今天看了之前几天写的代码,关于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;
}
testService
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver">
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver">
axisPro.test.TestService
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());
}