无聊人士

搬家==》www.soapui.cn

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  32 随笔 :: 0 文章 :: 60 评论 :: 0 Trackbacks
白衣同志是个好同志,“刨虫”啊,俺现在用的O/R Broker就是白衣“刨”出来的!

今天准备睡觉,发现白衣同志blog上在推荐“Web Service Framework:XFire”( http://www.blogjava.net/calvin/archive/2005/12/04/22390.html).嘿嘿,受够了axis,终于解放了。

xfire的user's guide做得很漂亮,俺这种E盲都能看个半懂。quick start看完,直接跳到spring一章,顺带拿手上的一个测试工程做测试,HelloXfire。

xfire 要加的包一大堆,guide上“Dependency Guide”这一章纯粹是在糊弄人,我的工程是webwork2.1.7(freemarker2.3.4)+spring1.2.5+ hibernate3.0.5+oracle8.1.7的东西,原来的jar不算,新加了一堆进去,最后所有的包加进来有19MB,晕啊!
antlr-2.7.5H3.jar
aopalliance.jar
asm.jar
asm-attrs.jar
cglib-nodep-2.1_2.jar
classes12.jar
commons-codec-1.3.jar
commons-collections-3.1.jar
commons-dbcp-1.2.1.jar
commons-fileupload.jar
commons-io-1.1.jar
commons-lang-2.1.jar
commons-logging.jar
commons-pool-1.2.jar
concurrent-1.3.4.jar
cos-multipart.jar
dom4j-1.6.jar
freemarker.jar
groovy-all-1.0-jsr-04.jar
hibernate3.jar
javamail-1.3.2.jar
jaxen-1.1-beta-8.jar
jdom-1.0.jar

jencrypt.jar
jta.jar
log4j-1.2.9.jar
lucene-1.4.3.jar
nls_charset12.jar
ognl.jar
oscache-2.2.jar
oscore.jar
quartz-1.5.0.jar
quartz-oracle-1.5.0.jar
quartz-weblogic-1.5.0.jar
spring.jar
spring-xwork-integration.jar
stax-1.1.2-dev.jar
stax-api-1.0.jar
stax-utils-snapshot-20040917.jar

velocity-dep.jar
webflow-2.1.7.jar
webwork-2.1.7.jar
webwork2-spring.jar
xfire-all-1.0-M6a.jar
xwork.jar
activation-1.0.2.jar
commons-beanutils-1.7.0.jar
wsdl4j-1.5.1.jar


user's guide上说得比较清楚,下载下来的zip里面也有一个spring的example。
首先是在web.xml中做配置,除了原来spring、webwork的,加上
 1    <context-param>
 2        <param-name>contextConfigLocation</param-name>
 3        <param-value>classpath:beans.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
 4    </context-param>
 5    <servlet>
 6        <servlet-name>xfire</servlet-name>
 7        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 8    </servlet>
 9    <servlet-mapping>
10        <servlet-name>xfire</servlet-name>
11        <url-pattern>/xfire/*</url-pattern>
12    </servlet-mapping>


然后在WEB-INF下面放一个xfire-servlet.xml文件,实际上就是一个spring的配置文件
 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3<beans>
 4    <!-- START SNIPPET: xfire -->
 5    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 6        <property name="urlMap">
 7            <map>
 8                <entry key="/echo" value-ref="echo" />
 9                <entry key="/HelloWorld" value-ref="HelloWorld" />
10                <entry key="/AccountManager" value-ref="AccountManager-xfire" />
11            </map>
12        </property>
13    </bean>
14    <bean id="echoBean" class="com.yninfo.rules.services.impl.EchoImpl" />
15    <!-- Declare a parent bean with all properties common to both services -->
16    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
17        <property name="serviceFactory" ref="xfire.serviceFactory" />
18        <property name="xfire" ref="xfire" />
19        <property name="serviceBean" ref="echoBean" />
20        <property name="serviceInterface" value="com.yninfo.rules.services.Echo" />
21    </bean>
22    <bean id="HelloWorld" class="org.codehaus.xfire.spring.remoting.XFireExporter">
23        <property name="serviceFactory" ref="xfire.serviceFactory" />
24        <property name="xfire" ref="xfire" />
25        <property name="serviceBean" ref="HelloService" />
26        <property name="serviceInterface" value="com.yninfo.rules.services.HelloWorld" />
27    </bean>
28    <bean id="AccountManager-xfire" class="org.codehaus.xfire.spring.remoting.XFireExporter">
29        <property name="serviceFactory" ref="xfire.serviceFactory" />
30        <property name="xfire" ref="xfire" />
31        <property name="serviceBean" ref="AccountManager" />
32        <property name="serviceInterface" value="com.yninfo.rules.services.AccountManager" />
33    </bean>
34    <!-- END SNIPPET: xfire -->
35</beans>
36
值得注意的是“serviceBean”,按user's guides上给的例子是“service”,结果是报错,大意说service这个属性没有setter。
 1public class ServiceBean
 2    implements InitializingBean, ApplicationContextAware
 3{
 4
 5    private Object service;
 6    /**
 7     * Gets the object which backs this service.
 8     * @return
 9     */

10    public Object getServiceBean()
11    {
12        return service;
13    }

14}

我做测试的三个例子,echo是抄xfire examples上的,HelloWorld是一个groovy的例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
    
<bean id="GroovyScriptFactory" class="org.springframework.beans.factory.script.groovy.GroovyScriptFactory">
        
<property name="expirySeconds" value="20" />
    
</bean>

    
<bean id="HelloService" factory-bean="GroovyScriptFactory" factory-method="create">
        
<constructor-arg index="0" value="classpath:com/yninfo/rules/services/impl/HelloWorldImpl.groovy" />
    
</bean>
</beans>
而AccountManager,则是标准的spring+hibernate的东西。
 1    <bean id="AccountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
 2        <property name="transactionManager" ref="TransactionManager" />
 3        <property name="transactionAttributes">
 4            <props>
 5                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
 6                <prop key="load">PROPAGATION_REQUIRED,readOnly</prop>
 7                <prop key="*">PROPAGATION_REQUIRED</prop>
 8            </props>
 9        </property>
10        <property name="target">
11            <bean class="com.yninfo.rules.services.impl.AccountManagerImpl">
12                <property name="accountDAO" ref="AccountDAO" />
13            </bean>
14        </property>
15    </bean>

配置完成后,启动tomcat,用http://192.168.0.100:8080/rules/xfire/echo?wsdl可以看到wsdl的描述。

在vs2005里面,建了个j#的工程(略)。。。

注:手误,把图覆盖了,只好全部删掉

posted on 2005-12-05 03:20 mmwy 阅读(7714) 评论(12)  编辑  收藏 所属分类: Others

评论

# re: 接触xfire 2005-12-05 09:27 mingo
感觉和burlap差不多  回复  更多评论
  

# re: 接触xfire 2005-12-05 10:56 江南白衣@ITO
Spring的Refrence里Remoting 一章也加入了XFire,看来也是决定放低axis,和XFire暧昧了:)  回复  更多评论
  

# re: 接触xfire 2006-03-10 23:05 Flier Lu
XFireExporter 这种方式太繁琐了,直接用 Java 5 annotation 或 commons-attributes 用起来舒服得多,只需要对服务接口做直接定义即可
/**
* Common Server Variables
*
* @@WebService(name = "ServerVariables", serviceName = "ServerVariables", targetNamespace = "http://flier.yeah.net/")
* @@SOAPBinding(style = SOAPBindingAnnotation.STYLE_RPC)
*/
public interface ServerVariables
{
/**
* @@WebMethod(operationName = "GetMachineName", action="urn:GetMachineName")
* @@.return WebResult("machineName")
*/
string GetMachineName();
}

spring 中也仅需要增加对此 bean 得管理

<bean id="serverVariables" class="net.yeah.flier.ws.impl.ServerVariablesImpl" singleton="true">

所有的 dirty work 可以一次性配置进去

详细的说明可以参考我的一篇文章

使用 xfire 快速发布 WebService
http://www.blogjava.net/flier/archive/2006/03/10/34730.html  回复  更多评论
  

# re: 接触xfire 2006-04-26 14:10 pc
再研究一下 收藏了  回复  更多评论
  

# re: 接触xfire 2006-07-27 20:44 xx
你好,我运行xfire自带的bookservice例子咋老出这个错误呢?

java.lang.NullPointerException
at com.caucho.xml.QAttributedNode.getAttributeNodeNS(QAttributedNode.java:146)
at com.ibm.wsdl.util.xml.DOMUtils.getAttributeNS(Unknown Source)
at com.ibm.wsdl.util.xml.DOM2Writer.printNamespaceDecl(Unknown Source)
at com.ibm.wsdl.util.xml.DOM2Writer.printNamespaceDecl(Unknown Source)
at com.ibm.wsdl.util.xml.DOM2Writer.print(Unknown Source)
at com.ibm.wsdl.util.xml.DOM2Writer.serializeAsXML(Unknown Source)
at com.ibm.wsdl.extensions.schema.SchemaSerializer.marshall(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printExtensibilityElements(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printTypes(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printDefinition(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilder.write(WSDLBuilder.java:181)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40)
at org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:104)
at org.codehaus.xfire.transport.http.XFireServletController.generateWSDL(XFireServletController.java:325)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:116)
at org.codehaus.xfire.transport.http.XFireServlet.doGet(XFireServlet.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:178)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:268)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:389)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:492)
at com.caucho.util.ThreadPool.run(ThreadPool.java:425)
at java.lang.Thread.run(Thread.java:536)

  回复  更多评论
  

# re: 接触xfire 2006-07-27 22:18 xx
上面是我发的,我刚刚调用webservice是成功的,但是在IE中输入:http://localhost:8080/test/BookService?WSDL就出现上面的错误。。。为啥?  回复  更多评论
  

# re: 接触xfire 2006-07-27 22:19 xx
wsdl4j-1.5.2.jar 包也有,啥原因呢?  回复  更多评论
  

# re: 接触xfire 2006-07-28 17:25 xx
我继续,把Resin换成tomcat就可以显示wsdl文件的内容了,resin的冲突?  回复  更多评论
  

# re: 接触xfire 2006-07-29 01:32 mmwy
我也遇到过,在tomcat里面正常,扔resin下面,wsdl出不来,别的都正常。
  回复  更多评论
  

# re: 接触xfire 2006-09-03 21:43 bellone.wu
请教xfire有没有超时的机制呢...

burlap没有.soap 里有超时机制.  回复  更多评论
  

# re: 接触xfire 2006-09-21 16:07 wmuu
今天试了下,wsdl出不来别的正常,半天没找到原因。最后把web.xml里头的log4j去掉就正常了。  回复  更多评论
  

# re: 接触xfire 2006-12-08 15:12 hellen
我现在也有用oracle8.1.7和hibernate3做项目呢,我用的驱动就是oracle8.1.7下面的classes12.jar,可是在eclipse下数据库能连上,可是就是生不成hibernate文件,报这个错an error occurrend during generating artifacts
我在csdn上发贴了,麻烦你告诉我一下呗
http://community.csdn.net/Expert/topic/5215/5215576.xml?temp=.6507227  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: