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;
    }

}
posted @ 2015-09-27 12:19  魔豆  阅读(408)  评论(0编辑  收藏  举报