1.导入jar
2.在spring.xml中添加
<!-- axis2start --> <bean id="testWSService" class="com.sh.test.WsTestServer"></bean> <bean id="testWSService1" class="com.sh.test.WsTestServer1"></bean> <!-- axis2end -->
3.创建Java文件,这两个文件就是要对外暴露的接口方法
1 package com.sh.test; 2 3 /** 4 * webservice服务端 5 * @author Administrator 6 * 7 */ 8 public class WsTestServer { 9 10 /** 11 * WS服务器返回数据 一个加法操作 12 */ 13 public Integer jiafa(Integer d1, Integer d2) { 14 return d1+d2; 15 } 16 /** 17 * WS服务器返回数据 一个减法操作 18 */ 19 public Integer jianfa(Integer d1, Integer d2) { 20 return d1-d2; 21 } 22 23 }
1 package com.sh.test; 2 3 /** 4 * webservice服务端 5 * @author Administrator 6 * 7 */ 8 public class WsTestServer1 { 9 10 /** 11 * WS服务器返回数据 一个乘法操作 12 */ 13 public Integer chengfa(Integer d1, Integer d2) { 14 return d1*d2; 15 } 16 17 }
4.在web.xml中添加
<!--axis2 WebService配置信息开始--> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- axis2 WebService配置信息结束-->
5.在WEB-INF下创建以下文件夹和文件 services/MyService/META-INF/services.xml “MyService”这个自定义
1 <?xml version="1.0" encoding="UTF-8"?> 2 <serviceGroup> <!-- 多个类发布 --> 3 <!-- 访问地址中的访问那个webservice的名字 --> 4 <service name="TestWSService"> 5 <description>例子 </description> 6 <parameter name="ServiceObjectSupplier"> 7 org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier 8 </parameter> 9 <!-- 配置在applicationContext中配置的bean,,这里的值域bean中的id事一样的,否则就报错找不到bean错 --> 10 11 <parameter name="SpringBeanName">testWSService</parameter> 12 <messageReceivers> 13 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" 14 class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 15 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" 16 class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> 17 </messageReceivers> 18 </service> 19 <!-- 访问地址中的访问那个webservice的名字 --> 20 <service name="TestWSService1"> 21 <description>例子1 </description> 22 <parameter name="ServiceObjectSupplier"> 23 org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier 24 </parameter> 25 <!-- 配置在applicationContext中配置的bean,,这里的值域bean中的id事一样的,否则就报错找不到bean错 --> 26 27 <parameter name="SpringBeanName">testWSService1</parameter> 28 <messageReceivers> 29 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" 30 class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 31 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" 32 class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> 33 </messageReceivers> 34 </service> 35 </serviceGroup>
6.创建调用方法
1 package com.sh.test; 2 3 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 import javax.xml.namespace.QName; 7 8 import org.apache.axiom.om.OMElement; 9 import org.apache.axis2.AxisFault; 10 import org.apache.axis2.addressing.EndpointReference; 11 import org.apache.axis2.client.Options; 12 import org.apache.axis2.rpc.client.RPCServiceClient; 13 import org.springframework.stereotype.Controller; 14 import org.springframework.web.bind.annotation.RequestMapping; 15 import org.springframework.web.bind.annotation.RequestMethod; 16 17 /** 18 * WebSerivce 客户端 19 * @author Administrator 20 * 21 */ 22 @Controller 23 public class WsClient { 24 25 @RequestMapping(value="/wsclient",method=RequestMethod.GET) 26 public void Wstest(HttpServletRequest request, HttpServletResponse response){ 27 String url = "http://192.168.1.168:8080/axis2demo/services/TestWSService?wsdl";//TestWSService这个就是services.xml中第三行的 28 try { 29 // 使用RPC方式调用WebService 30 RPCServiceClient serviceClient = new RPCServiceClient(); 31 // 指定调用WebService的URL 32 EndpointReference targetEPR = new EndpointReference(url); 33 Options options = serviceClient.getOptions(); 34 // 确定目标服务地址 35 options.setTo(targetEPR); 36 // 确定调用方法 37 options.setAction("urn:jiafa"); 38 options.setTimeOutInMilliSeconds(60000L);//超时时间 毫秒 39 //第一个参数:包名倒过来,第二个参数:调用的方法 40 QName qname = new QName("http://test.sh.com","jiafa"); 41 // 指定jiafa方法的参数值 42 Object[] parameters = new Object[] {9,9}; 43 // 调用方法一 传递参数,调用服务,获取服务返回结果集 44 OMElement element = serviceClient.invokeBlocking(qname, parameters); 45 // 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 46 String result = element.getFirstElement().getText(); 47 System.out.println(result); 48 } catch (AxisFault e) { 49 e.printStackTrace(); 50 } 51 } 52 @RequestMapping(value="/wsclientjianfa",method=RequestMethod.GET) 53 public void Wstest1(HttpServletRequest request, HttpServletResponse response){ 54 String url = "http://192.168.1.168/axis2demo/services/TestWSService?wsdl";//TestWSService这个就是services.xml中第三行的 55 try { 56 // 使用RPC方式调用WebService 57 RPCServiceClient serviceClient = new RPCServiceClient(); 58 // 指定调用WebService的URL 59 EndpointReference targetEPR = new EndpointReference(url); 60 Options options = serviceClient.getOptions(); 61 // 确定目标服务地址 62 options.setTo(targetEPR); 63 // 确定调用方法 64 options.setAction("urn:jianfa"); 65 options.setTimeOutInMilliSeconds(60000L);//超时时间 毫秒 66 //第一个参数:包名倒过来,第二个参数:调用的方法 67 QName qname = new QName("http://test.sh.com","jianfa"); 68 // 指定jiafa方法的参数值 69 Object[] parameters = new Object[] {9,9}; 70 // 调用方法一 传递参数,调用服务,获取服务返回结果集 71 OMElement element = serviceClient.invokeBlocking(qname, parameters); 72 // 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 73 String result = element.getFirstElement().getText(); 74 System.out.println(result); 75 } catch (AxisFault e) { 76 e.printStackTrace(); 77 } 78 } 79 @RequestMapping(value="/wsclientchengfa",method=RequestMethod.GET) 80 public void Wstest2(HttpServletRequest request, HttpServletResponse response){ 81 String url = "http://192.168.1.168/axis2demo/services/TestWSService1?wsdl";//TestWSService这个就是services.xml中第三行的 82 try { 83 // 使用RPC方式调用WebService 84 RPCServiceClient serviceClient = new RPCServiceClient(); 85 // 指定调用WebService的URL 86 EndpointReference targetEPR = new EndpointReference(url); 87 Options options = serviceClient.getOptions(); 88 // 确定目标服务地址 89 options.setTo(targetEPR); 90 // 确定调用方法 91 options.setAction("urn:chengfa"); 92 options.setTimeOutInMilliSeconds(60000L);//超时时间 毫秒 93 //第一个参数:包名倒过来,第二个参数:调用的方法 94 QName qname = new QName("http://test.sh.com","chengfa"); 95 // 指定jiafa方法的参数值 96 Object[] parameters = new Object[] {9,9}; 97 // 调用方法一 传递参数,调用服务,获取服务返回结果集 98 OMElement element = serviceClient.invokeBlocking(qname, parameters); 99 // 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 100 String result = element.getFirstElement().getText(); 101 System.out.println(result); 102 } catch (AxisFault e) { 103 e.printStackTrace(); 104 } 105 } 106 107 108 109 }