关于Axis 1.4的Java2WSDL和WSDL2Java工具的一点心得

Posted on February 1, 2007

0


今天我仔细琢磨了一下Java2WSDL和WSDL2Java这2个工具。在一般常规的情况下,实现Axis Web service最佳的方案应该是:

1. 先写实现,这个实现的class应该和最终的Service名字一致。

2. 用Java2WSDL生成WSDL文档,这个步骤需要指定最终Web Service得样式。目前WS-I建议不要使用RPC, 应该使用Document。MS著名的Wrapped pattern在Axis下也支持,但是问题很多。

java org.apache.axis.wsdl.Java2WSDL -y WRAPPED -u LITERAL 
     -o main.wsdl -d  -l"http://localhost/axis/services/CDRator/WebShop" 
     -n "urn:CDRator"   -p"com.CDRator.billing.soap" "CDRator"  
     -p"com.CDRator.billing.soap.data" "data" com.CDRator.soap.WebShopService

3. 用WSDL2Java生成服务器端和客户端所需要的所有classes以及我们最关心的deploy.wsdd。如果用的Wrapped这个wsdd有些问题,稍后我会说明。

java org.apache.axis.wsdl.WSDL2Java  -o .\generated\ -u main.wsdl  
     -s -N"urn:CDRator"="com.CDRator.soap" 
     -N"http://data.soap.CDRator.com"="com.CDRator.soap.data" 

其实3这个步骤生成的classes并不需要deploy在服务器,所以简单的方法可以直接运行2, Java2WSDL这个工具很好,不仅可以生成WSDL文档,其实他也可以用来生成所有步骤3所能生成的文件(比如deploy.wsdd)。

需要注意的是,如果想用Java2WSDL生成WSDD部署文件,一定要用具体的Service实现,不能随便定义一个接口,否则Axis会需要输入实现类(-i参数)。还有注意 -d这个参数必须要加在wsdl文件名之后。否则只会生成WSDL。

综合以上所述,在已经有了service实现类的情况下,我们其实可以直接运行步骤2而省略步骤3。当然这里只是一个例子,所有的工作最好由Ant Task完成。

Posted in: Development