开发步骤:
1.按照XFIRE的快速开发指南编写服务端程序
2.部署
注意:将META-INF/xfire/services.xml目录加文件放到WEB-INF/classes下以便找到
3.使用ANT生成客户端程序
4.拷贝客户端程序到调用程序中,拷贝JAR包,测试(jdom的版本要为1.0,否则会报错)。
目前已经有很多好的例子了,请参见:http://www.blogjava.net/mmwy/archive/2006/03/02/33142.html
以上文章在服务器端讲得很详细,几乎可以直接照着做了,客户端除了该文提供的方法Dynamic Client,还可以用ANT直接生成,做法参照:http://xfire.codehaus.org/Client+and+Server+Stub +Generation+from+WSDL
新建一个WsGen的目录,其下放client和lib,build.xml和WsGen放同一目录。
build.xml:
xml 代码
1.按照XFIRE的快速开发指南编写服务端程序
2.部署
注意:将META-INF/xfire/services.xml目录加文件放到WEB-INF/classes下以便找到
3.使用ANT生成客户端程序
4.拷贝客户端程序到调用程序中,拷贝JAR包,测试(jdom的版本要为1.0,否则会报错)。
目前已经有很多好的例子了,请参见:http://www.blogjava.net/mmwy/archive/2006/03/02/33142.html
以上文章在服务器端讲得很详细,几乎可以直接照着做了,客户端除了该文提供的方法Dynamic Client,还可以用ANT直接生成,做法参照:http://xfire.codehaus.org/Client+and+Server+Stub +Generation+from+WSDL
新建一个WsGen的目录,其下放client和lib,build.xml和WsGen放同一目录。
build.xml:
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="XFire-WsGen" basedir="./WsGen" default="wsgen">
- <path id="maven.compile.classpath">
- <fileset file="${basedir}/lib/*.jar"/>
- </path>
- <target name="clean" description="Prepare for clean build">
- <delete dir="${basedir}/client"/>
- <mkdir dir="${basedir}/client"/>
- </target>
- <target name="wsgen" depends="clean">
- <taskdef name="WsGenTask" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="maven.compile.classpath"/>
- <WsGenTask outputDirectory="${basedir}/client" wsdl="http://localhost:8080/xfire-rules/services/RulesService?wsdl" package="com.passtech.webservice.client" overwrite="true"/>
- </target>
- </project>
执行命令:
F:/xfire-dev/xfire-client-generate>ant wsgen
Buildfile: build.xml
clean:
[delete] Deleting directory F:/xfire-dev/xfire-client-generate/WsGen/client
[mkdir] Created dir: F:/xfire-dev/xfire-client-generate/WsGen/client
wsgen:
[WsGenTask] 2007-6-27 9:57:49 org.codehaus.xfire.gen.Wsdl11Generator generate
[WsGenTask] 信息: Generating code for WSDL at http://localhost:8080/xfire-rules/
services/RulesService?wsdl with a base URI of http://localhost:8080/xfire-rules/
services/RulesService?wsdl
[WsGenTask] 2007-6-27 9:57:51 org.codehaus.xfire.gen.jsr181.AbstractServiceGener
ator generate
[WsGenTask] 信息: Creating class com.passtech.webservice.client.RulesServicePort
Type
[WsGenTask] 2007-6-27 9:57:51 org.codehaus.xfire.gen.jsr181.AbstractServiceGener
ator generate
[WsGenTask] 信息: Creating class com.passtech.webservice.client.RulesServiceImpl
[WsGenTask] com/passtech/rules/ArrayOfRules.java
[WsGenTask] com/passtech/rules/ObjectFactory.java
[WsGenTask] com/passtech/rules/Rules.java
[WsGenTask] com/passtech/rules/ShipParticulars.java
[WsGenTask] com/passtech/rules/package-info.java
[WsGenTask] com/passtech/webservice/client/RulesServiceClient.java
[WsGenTask] com/passtech/webservice/client/RulesServiceImpl.java
[WsGenTask] com/passtech/webservice/client/RulesServicePortType.java
[WsGenTask] locahost/_8080/rulesservice/FindRule.java
[WsGenTask] locahost/_8080/rulesservice/FindRuleResponse.java
[WsGenTask] locahost/_8080/rulesservice/ObjectFactory.java
[WsGenTask] locahost/_8080/rulesservice/package-info.java
BUILD SUCCESSFUL
Total time: 7 seconds
出现以上信息客户端生成成功,就可以到client目录下去拷贝指定的包了。
ObjectFactory objectFactory=new ObjectFactory(); 用objectFactory来构造请求对象(如果需要)
XXXXServiceClient client=new XXXXServiceClient();用client直接调用服务端的Service接口中的方法即可。
总结:
好处:纯POJO的方式,可以很方便的生成WSDL以及客户端。开发比较快,效率高,性能也比较好(使用了STAX方式解析XML)。
缺点:对于自定义的WSDL,需要符合标准的Schema的时候,功能比较欠缺。我在使用到枚举时,客户端并没有正确的生成。希望能在以后的版本中见到改进。