zoukankan      html  css  js  c++  java
  • WebService-axis2

    WebService框架有好多,常用的cxf,axis2等,axis2的配置过程相对简单,不用编写接口,在实现。只需要一个Service服务类即可。配置过程大致如下:

    1,导入jar包(这里我是把axis2使用的所有jar全部放到项目当中,可以根据自己使用的功能进行增删,使用的版本是1.6.2,开发环境jdk 1.6):

    2,实现服务端WebService服务,会使用到javax.ws的注解

      

    import javax.jws.WebMethod;
    import javax.jws.WebService;

    public class TestService {

    @WebMethod(action="sayHello",operationName="sayHello")
    public String sayHello(String name){

    return "hello "+name;
    }
    }

    3,修改Web.xml文件,添加如下内容:

      

    <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
    <servlet-name>AxisAdminServlet</servlet-name>
    <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    4,创建service.xml,测试用的service.xml文件内容如下:

      

    <serviceGroup>
    <!-- servlet拦截serices/后面的请求,此处配置为TestService对应的服务名称,则访问时为/services/services/mehtod?param=xxx -->
    <service name="TestService" scope="application">
    <parameter name="ServiceClass">com.sample.axis2.serivce.TestService</parameter>
    <messageReceivers>
    <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
    <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    </service>
    </serviceGroup>

    5,发布服务,通过浏览器访问:

      

    6,测试,axis2属于resetFul WebService,即可以通过post请求传入参数,例如:http://localhost:8090/axis2-webService/services/TestService/sayHello?name=test%20for%20axis2

    返回值就会出现如下内容: 

      

    7,通过应用程序调用webserice服务:

      aixs2的调用方可以直接使用webservice地址进行,也可以将webservice接口文件下载本地进行调用,不同方式获取接口文件的可以查看      http://axis.apache.org/axis2/java/core/docs/quickstartguide.html官网地址给出的内容。

      1)在测试程序里,使用动态代理的方式进行调用,内容如下:

      

    public static String RPCInvoke() throws AxisFault{

    RPCServiceClient serviceClient = new RPCServiceClient();
    Options options = serviceClient.getOptions();
    Class<?>[] opReturnType = new Class[] { String[].class };//返回值类型
    EndpointReference targetEPR = new EndpointReference(
    "http://localhost:8090/axis2-webService/services/TestService?wsdl");
    options.setTo(targetEPR);
    QName opAddEntry = new QName("http://serivce.axis2.sample.com", "sayHello");//调用webservice方法

    Object[] opAddEntryArgs = new Object[] { "test" };//传入参数
    Object[] res = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,opReturnType);//调用方法并获取返回值
    System.out.println(((String[]) res[0])[0]);//输出返回值
    return ((String[]) res[0])[0];

    }

     2)另一种调用方式会显得麻烦一些,使用OMElement,在调用请求之前你需要创建这个对象,OMElement继承自OMNode对象,如果想要更深入了解可以查看这个链接:http://ws.apache.org/axiom/apidocs/org/apache/axiom/om/OMElement.html下的doc说明。

    public static OMElement getEchoOMElement() { //这个方法主要是创建OMElement对象
    OMFactory fac = OMAbstractFactory.getOMFactory();
    OMNamespace omNs = fac.createOMNamespace( 
    "http://serivce.axis2.sample.com", "example1");//webservice的targetNameSpaces,
    OMElement method = fac.createOMElement("sayHello", omNs); //调用的webservice方法
    OMElement value = fac.createOMElement("name", omNs);//参数名称
    value.addChild(fac.createOMText(value, "Axis2 Echo String "));//参数
    method.addChild(value);

    return method;
    }

    public static void OMEInvoke() throws AxisFault{ //调用webservice,这种调用方式和在浏览器里调用返回结构相同。所以你需要将返回值在xml和object之间进行转换,获得需要数据

    Options options = new Options();
    EndpointReference targetEPR = new EndpointReference(
    "http://localhost:8090/axis2-webService/services/TestService");
    options.setTo(targetEPR);
    options.setAction("urn:echo");

    //Blocking invocation
    ServiceClient sender = new ServiceClient();
    sender.setOptions(options);
    OMElement result = sender.sendReceive(getEchoOMElement());

    System.out.println(result);
    }

    可以看一下他的返回值:

    <ns:sayHelloResponse xmlns:ns="http://serivce.axis2.sample.com"><ns:return>hello Axis2 Echo String </ns:return></ns:sayHelloResponse>

      

      

      

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/adam1991/p/7644338.html
Copyright © 2011-2022 走看看