需求:开发VAC与SP间订购通知接口服务器端(SP端),给定VacSyncService_SPClient.wsdl文件
首先,官网下载axis2-1.6.2-bin.zip和axis2-1.6.2-war.zip
axis2-1.6.2-bin.zip包含axis2的jar包,工具和例子
axis2-1.6.2-war.zip包含了axis2的web应用,发布web服务时,将自己的程序以特定文件结构发布到axis2的web应用的service目录中
1.根据wsdl生成服务器端代码
解压axis2-1.6.2-bin.zip, cmd命令行进入到axis2-1.6.2bin:
1
|
cd D:axis2axis2-1.6.2bin
|
假设wsdl文件存放于D盘根目录,将服务器端代码生成到D:gen_code目录:
1
|
WSDL2Java -uri D:VacSyncService_SPClient.wsdl -p com.example -s -ss -sd -ssi -o d:gen_code
|
参数说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
-o : 指定生成代码的输出路径 -a : 生成异步模式的代码 -s : 生成同步模式的代码 -p : 指定代码的package名称 -l : 使用的语言(Java/C) 默认是java -t : 为代码生成测试用例 -ss : 生成服务端代码 默认不生成 -sd : 生成服务描述文件 services.xml,仅与-ss一同使用 -d : 指定databingding,例如,adb,xmlbean,jibx,jaxme and jaxbri -g : 生成服务端和客户端的代码 -pn : 当WSDL中有多个port时,指定其中一个port -sn : 选择WSDL中的一个service -u : 展开data-binding的类 -r : 为代码生成指定一个repository -ssi : 为服务端实现代码生成接口类 -S : 为生成的源码指定存储路径 -R : 为生成的resources指定存储路径 --noBuildXML : 输出中不生成build.xml文件 --noWSDL : 在resources目录中不生成WSDL文件 --noMessageReceiver : 不生成MessageReceiver类
|
cmd里执行如上命令之后,d:gen_code会生成如下文件:
/gen_code
/gen_code/resources
/gen_code/resources/services.xml
/gen_code/resources/SyncNotifySPServiceService.wsdl
/gen_code/src
/gen_code/build.xml
2.根据wsdl生成客户端代码
cmd命令行进入到axis2-1.6.2bin:
1
|
WSDL2Java -uri D:myWebService.wsdl -o d:ws_client
|
使用:在代码中调用刚刚生成的以Stub结尾的类,可以测试服务器端
3.新建maven web项目
项目的spring配置略…
pom.xml需要添加axis2的依赖
[code lang=”xml”]
org.apache.axis2
axis2-kernel
1.6.2
org.apache.axis2
axis2-adb
1.6.2
org.apache.axis2
axis2-transport-http
1.6.2
org.apache.axis2
axis2-jaxws
1.6.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
将axis2-1.6.2-war.zip中的war包解压,解压后WEB-INF下的conf,modules,services复制到项目的WEB-INF下 web.xml中的内容复制到web项目的web.xml中,要复制的内容: [code lang="xml"] AxisServlet org.apache.axis2.transport.http.AxisServlet 1 AxisServlet /servlet/AxisServlet AxisServlet *.jws AxisServlet /services/*
|
将生成的服务器端和客户端代码复制到项目中,服务器端代码中以Skeleton结尾的类需要修改并添加业务逻辑代码
此类的spring配置
[code lang=”xml”]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
在web项目的WEB-INF/services目录下建立自己的webservice目录,如下: WEB-INF/services/MyWebservice WEB-INF/services/MyWebservice/META-INF WEB-INF/services/MyWebservice/META-INF/services.xml
其中的services.xml为之前已生成的/gen_code/resources/services.xml services.xml内容 [code lang="xml"]
com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceSkeleton true true http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyRequest http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyResponse
|
修改services.xml为
[code lang=”xml” highlight=”10,11”]
com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceSkeleton
syncNotifySPServiceServiceSkeleton
false
true
http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyRequest
http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyResponse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
SpringBeanName的值与spring中配置的bean一致 useOriginalwsdl设置为false时,由axis2生成wsdl文件
**4.测试代码** ```java public class Test { static SyncNotifySPServiceServiceStub service;
static { try { service = new SyncNotifySPServiceServiceStub("http://localhost:8080/vacsyncservice/services/SyncNotifySPServiceService"); } catch (AxisFault e) { e.printStackTrace(); } }
public static void main(String[] args) throws RemoteException { System.out.println("begin..."); OrderRelationUpdateNotify orderRelationUpdateNotify = new OrderRelationUpdateNotify(); OrderRelationUpdateNotifyRequest param = new OrderRelationUpdateNotifyRequest(); orderRelationUpdateNotify.setOrderRelationUpdateNotifyRequest(param); OrderRelationUpdateNotifyResponseE respE = service.orderRelationUpdateNotify(orderRelationUpdateNotify); OrderRelationUpdateNotifyResponse resp = respE.getOrderRelationUpdateNotifyReturn(); System.out.println("ResultCode:" + resp.getResultCode()); } }
|
原文:大专栏 axis2+spring开发webservice服务器端