axis与axis2的异同
1 服务端java代码的开发没有任何差别
2 服务端的差别是axis的服务标志文件是web-services.xml,而axis2的标志文件是services.xml,另外xml格式也不同。具体样本如下:
axis:
<?xml version="1.0" encoding="UTF-8"?>
<web-services>
<web-service protocol="http" useSOAP12="false" targetNamespace="http://www.jtv.com.cn" name="MyWebService" style="rpc" uri="/MyWebService">
<components>
<java-class name="MyWebService" class-name="mywsdemo.MyWebService">
</java-class>
</components>
<operations>
<operation method="*" component="MyWebService">
</operation>
</operations>
</web-service>
</web-services>
axis2:
<service name="TestService" scope="application">
<description>
myTestService
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">TestService</parameter>
</service>
可以看到差别还是挺大的。
3 发布文件的区别。axis是可以基于app模式发布的,但是app里面包装了war包的方式来发布(这个不太确定是否必须如此),web-services.xml需要放置在WEB-INF目录下。而axis2中是可以不基于web的,services.xml需要放置在aar(axis archive)的manifest目录下。
4 服务发布到web服务器后,获取wsdl的方式一样。都是在url+ws别名+"?wsdl"即可得到。不过我测试axis是在weblogic上进行,WSDL需要大写,而测试axis2时是在tomcat上,wsdl需要小写。不知是否有此规定?
5 调用WSDL2Java生成的客户端java代码文件不同。
在axis中,生成的文件有Locator类及其接口(定义获取PortType的方法)、PortStub类及其接口(该接口模拟了web服务的方法)类4个java文件(指在最基本的ws服务中),测试类的调用方式是通过Locator得到PortStub的实例。
在axis2中,生成的文件只有2个()但是使用了内部类。分别是CallbackHandler抽象类和Stub类(很多内部类)。测试类直接调用stub的实例即可。
以上只是表面上的些许差别,并且也不是很细致,因为我自己也没弄明白这些东西。实际应用中如果大规模的采用webservice的方式而采用wsdl2java生成客户端代码大概不可取吧,因为如果wsdl发生改变都要重新生成肯定不太好。如果手工实现,那么xml消息体的解析封装等还有很大量的工作可以学习哦!
yuast1234,你好。加qq32701044聊,今天评论老说验证码不对。csdn的blog系统做的真不怎么好...