使用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 代码
< taskdef   name = "wsgen"   classname = "org.codehaus.xfire.gen.WsGenTask"            classpathref = "maven.compile.classpath" />       < wsgen   outputDirectory = "${basedir}/target/generated-source"       wsdl = "${basedir}/src/wsdl/geoip.wsdl"   package = "net.webservicex.geoip.jaxb"   overwrite = "true" />   


配置

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

script 代码
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\    :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;       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 代码
package  net.webservicex.geoip;       import  net.webservicex.GetGeoIP;    import  net.webservicex.geoip.jaxb.GeoIPServiceClient;    import  net.webservicex.geoip.jaxb.GeoIPServiceSoap;    import  junit.framework.TestCase;       public   class  GeoIPClientTest  extends  TestCase    {         public   void  testClient()  throws  Exception        {            GeoIPServiceClient service =  new  GeoIPServiceClient();            GeoIPServiceSoap geoIPClient = service.getGeoIPServiceSoap();                        System.out.println( "The country is: "  +                                geoIPClient.getGeoIP( "216.73.126.120" ).getCountryName());        }    }              



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

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

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

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


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值