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>

      

      

      

  • 相关阅读:
    ubuntu一般软件安装在什么目录
    Swing是一把刀
    eclipse 3.6的VE配置 Visual Editor for eclipse3.6
    有关import sun.audio.AudioPlayer(或者其它文件)的问题
    ubuntu 下安装jdk
    linux查看java jdk安装路径
    关于绿色
    Swing如何正确的处理界面中的线程(EDT)
    在Eclipse4.2x中安装最新版插件WindowBuilder
    Eclipse java swing开发环境
  • 原文地址:https://www.cnblogs.com/adam1991/p/7644338.html
Copyright © 2011-2022 走看看