使用Xfire从WSDL生成客户端


从WSDL生成客户端和服务端

原文地址:

http://xfire.codehaus.org/Client+and+Server+Stub+Generation+from+WSDL

这片导航将一步一步地引导你为一个服务创建客户端.这个过程还同样适用于创建服务端.
完整的Example可以在distribution版本的"examples/geoip-client"文件夹中找到

限制

生成中有几个限制点需要注意

需要java 5.0环境,因为其使用了JSR 181 规范

不支持RPC/Encoding


生成客户端/服务端
Ant Task

我们将要使用的这个webservice获取一个ip地址,返回给我们一个国家的名称。生成客户端十分简单,这里有个build file的例子用于运行Xfire中的wsgen task。

xml 代码
  1. < taskdef   name = "wsgen"   classname = "org.codehaus.xfire.gen.WsGenTask"     
  2.       classpathref = "maven.compile.classpath" />   
  3.   
  4. < wsgen   outputDirectory = "${basedir}/target/generated-source"   
  5.    wsdl = "${basedir}/src/wsdl/geoip.wsdl"   package = "net.webservicex.geoip.jaxb"   overwrite = "true" />   


配置

命令行:
你还可以从命令行来运行WsGen(如果需要绑定jaxb,xmlbeans,你需要相关的jar文件),使用如下的脚本:

script 代码
  1. gpath=xfire- all -1.2-SNAPSHOT.jar:ant-1.6.5.jar:jaxb-api-2.0EA3.jar:stax-api-1.0.1.jar:jdom-1.0.jar:jaxb-impl-2.0EA3.jar\   
  2. :jaxb-xjc-2.0-ea3.jar:wstx-asl-2.9.3.jar:commons-logging-1.0.4.jar:activation-1.1.jar:wsdl4j-1.5.2.jar:XmlSchema-1.0.3.jar:xfire-jsr181-api-1.0-M1.jar;   
  3.   
  4. java -cp $gpath org.codehaus.xfire.gen.WsGen -wsdl http://localhost:8080/xfire/services/Bookservice?wsdl -o . -p pl.tomeks.client -overwrite  true   


你可以指定下面的参数:
-wsdl        : wsdl file的路径,可以是有效的URL地址 ( can be any valid url )
                 
-o             : 生成类的输出文件夹

-package   : 客户端代码存放的包

-binding    : 绑定使用( jaxb 或者 xmlbeans )

-overwrite: 允许覆盖已有的生成类文件(没有这个选项,则不会覆盖)


使用客户端

现在使用该客户端相当简单

java 代码
  1. package  net.webservicex.geoip;   
  2.   
  3. import  net.webservicex.GetGeoIP;   
  4. import  net.webservicex.geoip.jaxb.GeoIPServiceClient;   
  5. import  net.webservicex.geoip.jaxb.GeoIPServiceSoap;   
  6. import  junit.framework.TestCase;   
  7.   
  8. public   class  GeoIPClientTest  extends  TestCase   
  9. {   
  10.      public   void  testClient()  throws  Exception   
  11.     {   
  12.         GeoIPServiceClient service =  new  GeoIPServiceClient();   
  13.         GeoIPServiceSoap geoIPClient = service.getGeoIPServiceSoap();   
  14.            
  15.         System.out.println( "The country is: "  +    
  16.                            geoIPClient.getGeoIP( "216.73.126.120" ).getCountryName());   
  17.     }   
  18. }   
  19.   
  20.     
  21.   



你会发现 GeoIPImpl class也被生成了,如果你正在使用客户端,你不能删除它,因为它含有用来生成客户端的注释。Impl class 和wsdl中的<binding></binding>相符,它包含soap绑定信息。
使用如下的代码,你可以为客户端增加新的handlers 或者设置属性

java 代码
  1. Client client = Client.getInstance(geoIPClient);   
  2. client.setProperty(Channel.USERNAME,  "test" );   
  3. client.setProperty(Channel.PASSWORD,  "test" );   
  4. client.addInHandler( new  DOMOutHandler());   

XMLBeans 客户端/服务 生成
你可以使用XMLBeans 作为绑定来替代JAXB2.0.
简单地在task中设置绑定参数

xml 代码
  1. < wsgen   outputDirectory = "target/services"   
  2.    wsdl = "${basedir}/src/wsdl/echoW.wsdl"   
  3.    package = "com.acme.echo"   
  4.    binding = "xmlbeans"    overwrite = "true"    />   


请注意,你需要先生成该wsdl的XMLBeans ,然后把它的jar包放到wsgen-task的classpath下面。
如果你忘记了这步,你会看到
NullPointerException.


你可能感兴趣的:(maven,.net,ant,webservice,JUnit)