一、使用AXIS2 1.4根据WSDL分别生成服务端代码
例:
1)生成多个用户信息查询服务端代码:
wsdl2java -uri MultipleUserInfoQuery.wsdl -ss -sd -g -ns2p http://www.test.com/schema/MultipleUserInfoQuery/=com.test.demo.userinfo.multiple,http://www.test.com/schema/MultipleUserInfoQuery/type=com.test.demo.userinfo.multiple.type
2)生成单个用户信息查询服务端代码:
wsdl2java -uri SingleUserInfoQuery.wsdl -ss -sd -g -ns2p http://www.test.com/schema/SingleUserInfoQuery/=com.test.demo.userinfo.single,http://www.test.com/schema/SingleUserInfoQuery/type=com.test.demo.userinfo.single.type
二、新增接口
增加一个都支持查询的接口,将两个接口合并为一个接口,示例代码如下:
public interface IUserInfoQuery
{
public com.test.demo.userinfo.single.QuerySingleUserInfoResponse querySingleUserInfo(
com.test.demo.userinfo.single.QuerySingleUserInfo querySingleUserInfo);
public com.test.demo.userinfo.multiple.QueryMultipleUserInfoResponse queryMultipleUserInfo(
com.test.demo.userinfo.multiple.QueryMultipleUserInfo queryMultipleUserInfo);
}
三、 合并两个服务的***MessageReceiverInOut.java类
这一步是最关键的一步操作,如果能合并成功,这个功能基本上就实现了。
示例操作如下:
1):将IMultipleUserInfoQueryMessageReceiverInOut.java复制到all包下,将名称改为:
IUserInfoQueryMessageReceiverInOut.java
2):IMultipleUserInfoQuerySkeleton skel = (IMultipleUserInfoQuerySkeleton) obj;;改为:
IUserInfoQuery skel = (IUserInfoQuery) obj;
3):在invokeBusinessLogic方法中将ISingleUserInfoQueryMessageReceiverInOut.java类
invokeBusinessLogic方法中if ("querySingleUserInfo".equals(methodName))语句包含的
内容合并到IUserInfoQueryMessageReceiverInOut.java中。
4):根据错误提示,复制相应的方法即可;
四、配置服务
将生成的Service.xml配置文件合并成一个,然后在添加一个都支持的配置文件,都支持的配置示例如下:
<!-- 都支持配置 --> <service name="UserInfoQuery"> <messageReceivers> <!-- 配置新增的***Inout --> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="com.test.demo.userinfo.all.IUserInfoQueryMessageReceiverInOut"/> </messageReceivers> <!-- 配置完成该功能的实现类 --> <parameter name="ServiceClass"> com.test.demo.userinfo.all.UserInfoQueryImpl </parameter> <parameter name="useOriginalwsdl">true</parameter> <parameter name="modifyUserWSDLPortAddress">true</parameter> <operation name="queryMultipleUserInfo" mep="http://www.w3.org/ns/wsdl/in-out" namespace="http://www.test.com/schema/MultipleUserInfoQuery/"> <actionMapping> http://www.test.com/schema/MultipleUserInfoQuery </actionMapping> <outputActionMapping> http://www.test.com/schema/MultipleUserInfoQuery/MultipleUserInfoQuery/queryMultipleUserInfoResponse </outputActionMapping> </operation> </service>