Axis2-WebService框架的学习心得-01

    今天看了之前几天写的代码,关于WebService框架--Axis2的一些心得,总体我把Axis2的开发步骤和结构分为3部分:

     1.初始化组件:

     1.1 核心组件类:

                       RPCServiceClient--客户端服务类--建立全局的Axis2对象的基础核心组件

                       MessageContext--消息摘要上下文--建立全局 消息摘要的上下文组件,即使整体WebService系统框架的上下文操作。

                       EndpointReference--终结点外向指引--作为整体WebService框架的重要的核心组件。进行操作请求地址,

                      Options--操作选项--执行连接RPCServiceClient和EndpointReference两个最重要核心组 件,本身作为一个容器,进行存放EndpointReference组件

                       QName--webService框架的命名调用规范对象,包含两部分:名空间+方法名,

 

     1.2 自定义实体类:

         RPCModel对象实体信息类:

         以下就是我自定义的类型熟悉,仅供参考

          targetNameSpace--名空间

          targetMethodName--方法名

          targetServiceUrl--服务请求路径

          paramArray--参数数组文件

          overtime--超时时间

         returnType--返回类型

     2.创建服务端:

        private static RPCServiceClient invokeBase(RPCModel model) throws AxisFault{

                if(model == null)

                  throw new IllegalArgumentException("出现参数为空的异常!"); 

               EndpointReference edf = new EndpointReference(model.getTargetServiceUrl());

               Options options = RPCClientFactory.newInstance().initOptions();

               options.setTo(edf);

               RPCServiceClient client = RPCClientFactory.newInstance().initClient();

              MessageContext messgeContext = RPCClientFactory.newInstance().initMessageContext();

               messgeContext.setServiceContext(client.getServiceContext());

                MessageContext.setCurrentMessageContext(messgeContext);

               if(model.getOverTime() != null)

                  options.setTimeOutInMilliSeconds(model.getOverTime());

                 client.setOptions(options);

                 return client;

}

 

<?xml version="1.0" encoding="utf-8"?>

<service name="TestService">

 <description>

  testService

 </description>

 <messageReceivers>

 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" 

  class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver">

 </messageReceiver>

 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"

  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver">

 </messageReceiver>

 </messageReceivers>

 <parameter name="ServiceClass">axisPro.test.TestService</parameter>

</service>

 

     3.调用服务端: 

        @Override

public void invokeNoReturnMethod(RPCModel model) {

try {

RPCServiceClient client = invokeBase(model);

Object [] params = model.getParamArray();

QName qName = new QName(model.getTargetNameSpace(),model.getTargetMethodName());

OMElement qm  = client.invokeBlocking(qName,params);

} catch (AxisFault e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

@Override

public Object invokeReturnMethod(RPCModel model) {

try {

RPCServiceClient client = invokeBase(model);

Object [] params = model.getParamArray();

QName qName = new                                   QName(model.getTargetNameSpace(),model.getTargetMethodName());

//Class [] returnType = new Class[]{String.class};

Object[] response  = client.invokeBlocking(qName,params,model.getReturnType());

return response[0];

} catch (AxisFault e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

       4.测试类:

public static void clientTest()

RPCInvokeService ris = new RPCInvokeImpl();

RPCModel model = new RPCModel();

model.setReturnType(new Class[]{String.class});

model.setTargetMethodName("test");

model.setTargetServiceUrl("http://127.0.0.1/axisPro/services/TestService");

model.setTargetNameSpace("http://test.axisPro");

model.setParamArray(new Object[]{"�"});

System.out.println(ris.invokeReturnMethod(model).toString());

 

}

 

猜你喜欢

转载自alex4java.iteye.com/blog/2287780