axis2+spring开发webservice服务器端 Posted 2022-12-14 wangziqiang123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axis2+spring开发webservice服务器端相关的知识,希望对你有一定的参考价值。
需求:开发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"] <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <!--<init-param> --> <!--<param-name>axis2.xml.path</param-name> --> <!--<param-value>/WEB-INF/conf/axis2.xml</param-value> --> <!--<param-name>axis2.xml.url</param-name> --> <!--<param-value>http://localhost/myrepo/axis2.xml</param-value> --> <!--<param-name>axis2.repository.path</param-name> --> <!--<param-value>/WEB-INF</param-value> --> <!--<param-name>axis2.repository.url</param-name> --> <!--<param-value>http://localhost/myrepo</param-value> --> <!--</init-param> --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
将生成的服务器端和客户端代码复制到项目中,服务器端代码中以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"] <?xml version="1.0" encoding="UTF-8"?> <!-- This file was auto-generated from WSDL --> <!-- by the Apache Axis2 version: 1.6.1 Built on : Aug 31, 2011 (12:22:40 CEST) --> <serviceGroup> <service name="SyncNotifySPServiceService"> <messageReceivers> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceMessageReceiverInOut"/> </messageReceivers> <parameter name="ServiceClass">com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceSkeleton</parameter> <parameter name="useOriginalwsdl">true</parameter> <parameter name="modifyUserWSDLPortAddress">true</parameter> <operation name="orderRelationUpdateNotify" mep="http://www.w3.org/ns/wsdl/in-out" namespace="http://soap.bossagent.vac.unicom.com"> <actionMapping>http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyRequest</actionMapping> <outputActionMapping>http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyResponse</outputActionMapping> </operation> </service> </serviceGroup>
修改services.xml为 [code lang=”xml” highlight=”10,11”] <?xml version=”1.0” encoding=”UTF-8”?>
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服务器端
以上是关于axis2+spring开发webservice服务器端的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat 8,axis2 webservices aar,spring jndi未绑定在上下文中
webservice -- cxf客户端调用axis2服务端
axis2开发webservice之编写Axis2模块(Module)
Axis2的下载和安装
基于Myeclipse+Axis2的WebService开发实录
Eclipse + Apache Axis2 发布RESTful WebService基础知识