JSP学习笔记(一百三十):使用axis2开发webservice
一、axis2介绍
Apache Axis2 是Axis1.x的后续版本,是新一代的SOAP引擎。
二、axis2下载
下载地址:http://axis.apache.org/axis2/java/core/download.cgi
我下载的是axis 1.5.6版本
三、axis2的使用
1、在项目中引用axis2的包,经过测试,使用axis2生成webservice服务,以及编写webservice客户端程序,至少需要以下包:
axiom-api-1.2.12.jar axiom-impl-1.2.12.jar axis2-adb-1.5.6.jar axis2-kernel-1.5.6.jar axis2-transport-http-1.5.6.jar
axis2-transport-local-1.5.6.jar httpcore-4.0.jar neethi-2.0.5.jar woden-api-1.0M8.jar wsdl4j-1.6.2.jar XmlSchema-1.4.3.jar
commons-httpclient-3.1.jar
可能还需要commons包之类的基础包,这些基础包的自己根据情况来加。
我由于要结合spring来用axis2,所以还需要一个spring相关的包:
axis2-spring-1.5.6.jar
需要的包好多。。。
2、编写webservice客户端程序(方式一)
public static void main(String[] args) { try { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/app/services/MyWebService"); //这里是webservice服务地址 options.setTo(targetEPR); QName qname = new QName("http://webservice.mydomain.com", "myMethod1"); //这里是webservice服务的名字空间和方法名 OMElement result = serviceClient.invokeBlocking(qname, new Object[]{"abc"}); //服务返回的值 System.out.println(result.getFirstElement().getText());
client.cleanupTransport();//调用完一定要释放资源,不然后果很严重,我这里不添加释放的代码,客户端调用只能调用2次。。 } catch (AxisFault axisFault) { axisFault.printStackTrace(); } }
3、编写webservice客户端程序(方式二)
public static void main(String[] args) { try { EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/app/services/MyWebService"); //这里是webservice服务地址 OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace ns = fac.createOMNamespace("http://webservice.domain.com", "ns1"); //这里是webservice服务的名字空间 OMElement payload = fac.createOMElement("queryTaskById", ns); //这里是服务的方法名 //服务方法的参数 OMElement ele = fac.createOMElement("str",ns); ele.setText("abc"); payload.addChild(ele); Options options = new Options(); ServiceClient client = new ServiceClient(); options.setTo(targetEPR); client.setOptions(options); OMElement result = client.sendReceive(payload); //服务返回的值 System.out.println(result.getFirstElement().getText()); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } }
4、生成webservice服务
首先要创建services.xml这个文件的位置要建立在WEB-INF/services/服务命名/META-INF/services.xml,服务命名这个文件夹名字可以随便起,services.xml的内容为:
<?xml version="1.0" encoding="UTF-8"?> <service name="MyWebService"> <description>web service</description> <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter> <parameter name="SpringBeanName">myWebService</parameter> <operation name="myMethod1"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="myMethod2"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>
注意到services.xml里面的parameter name="SpringBeanName"节点,这是要填写Spring实例化的类名,并把这个实例化的类发布出去。这里需要特别注意一下,就是这个实例类不支持事务处理,否则是无法发布这个服务的。operation name="myMethod1"节点,是指要发布的方法。
spring类的代码:
@Service public class MyWebService { @Autowired private MyDAO myDAO; public int myMethod1(String str) { int returnValue = 0; return returnValue; } public int myMethod2(String str) { int returnValue = 0; return returnValue; } }