axis2练习

来源:互联网 发布:linux杀进程 编辑:程序博客网 时间:2024/05/01 04:41

 

练习使用axis2,它的部署我就不说了,我的博客也写过。

今天练习使用。

服务端CallBackAction定义4个方法,如下:

package org.hd.axis2.device;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import org.hd.business.service.BusinessService;import org.hd.business.summary.model.CallSummaryVo;import org.rd.framework.common.container.ContainerManager;import com.opensymphony.xwork2.ActionContext;import org.apache.axis2.rpc.receivers.RPCMessageReceiver;import org.apache.axis2.rpc.receivers.RPCInOutAsyncMessageReceiver;import org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver;public class CallBackAction{private BusinessService businessService = (BusinessService)ContainerManager.getComponent(BusinessService.BEAN_ID);public String updateCallInfo(String callid,String billNumber){String resultMessage="";CallSummaryVo call=new CallSummaryVo();if(callid==null||callid.trim().equals("")){resultMessage="未获取到参数通话callid,操作失败!";}else if(billNumber==null||billNumber.trim().equals("")){resultMessage="未获取到参数工单号billNumber,操作失败!";}else{call.setVoiceid(callid);call.setBill_number(billNumber);businessService.updateSummaryByWebservice(call);//这个方法就是更新数据库的2个字段resultMessage="收到信息:callid="+callid+",billNumber="+billNumber+"。根据参数已经完成更新数据库数据。";}System.out.println("调用webservice的返回结果信息:\r\n"+resultMessage);return resultMessage;}public String queryCallInfo(String comeUserjobNumber){String resultMessage="";if(comeUserjobNumber==null||comeUserjobNumber.trim().equals("")){resultMessage="未获取到参数comeUserjobNumber,操作失败!";}else{String userInfo=businessService.getAgentNameFromHdUser(comeUserjobNumber);//这个方法就是从数据库查询一个字段resultMessage="收到参数信息comeUserjobNumber="+comeUserjobNumber+"。根据此参数查询到的信息是:"+userInfo;}System.out.println("调用webservice的返回结果信息:\r\n"+resultMessage);return resultMessage;}//没有参数的方法public String getUserNameFromSession(){ActionContext ctx = ActionContext.getContext();HttpSession session=((HttpServletRequest) (ActionContext.getContext()).get(ServletActionContext.HTTP_REQUEST)).getSession();String resultMessage="";if(session.getAttribute("current_user_id")!=null){resultMessage="获取到当前登录用户的账号:"+(String)session.getAttribute("current_user_id");}else{resultMessage="当前登录用户的账号为null";}System.out.println("调用webservice的返回结果信息:\r\n"+resultMessage);return resultMessage;}//没有返回值得方法public void writeLog(String info){String resultMessage="";if(info==null||info.trim().equals("")){resultMessage="未获取到参数info,操作失败!";}else{resultMessage="收到参数信息info="+info;}System.out.println("调用webservice的返回结果信息:\r\n"+resultMessage);}}


在services.xml中注册webservice:在services.xml中注册webservice:

<service name="callInfoService">    <description>        This service is about deal with call info    </description>    <parameter name="ServiceClass">org.hd.axis2.device.CallBackAction</parameter>    <operation name="updateCallInfo">       <messageReceiver  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />    </operation>    <operation name="queryCallInfo">       <messageReceiver  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />    </operation><operation name="getUserNameFromSession">       <messageReceiver  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />    </operation><operation name="writeLog">       <messageReceiver  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />    </operation></service>


关于方法的类型分2种,可以在axis2.xml中找到定义:

    <!-- ================================================= -->    <!-- Message Receivers -->    <!-- ================================================= -->    <!--This is the default MessageReceiver for the system , if you want to have MessageReceivers for -->    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->    <!--any operation -->    <!--Note : You can override this for a particular service by adding the same element with your requirement-->    <messageReceivers>        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>    </messageReceivers>

这2种分别是:有参数无返回;有参数有返回。为什么上面有6个定义呢


1. messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver",
接受RPC调用,或者ADB也可以,AXIOM方式不行。服务的参数可以是普通的Java类型或自定义类型,但不能为OMElement。
 
2.messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver",
接受AXIOM方式的调用。参数为OMElement,调用采用AXIOM方式。如果类中的参数为Java类型或自定义的AXIOM是调用不到的。

所以我们使用org.apache.axis2.rpc.receivers.RPCMessageReceiver。
并且客户端相应使用rpc或adb方式访问。

 

这2种分别是:有参数无返回;有参数有返回。为什么上面有6个定义呢


 

在org.apache.axis2.rpc.receivers这个包里我找到了3中方式:
import org.apache.axis2.rpc.receivers.RPCMessageReceiver;
import org.apache.axis2.rpc.receivers.RPCInOutAsyncMessageReceiver;
import org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver;
根据名称我猜想:RPCInOnlyMessageReceiver是有参数无返回;RPCInOutAsyncMessageReceiver是有参数有返回。
RPCMessageReceiver这个好像把所有情况都封装了。目前我都用这个。

服务端和客户端的配置要一致,这个以后再细说吧
服务端的几种方式:AXIOM,ADB,XMLBeans,JiBX
客户端对应的方式:AXIOM,ADB,XMLBeans,JiBX

 

在浏览器中查看所有启动的webservice:
http://helpdesk.citicsinfo.com/services/listServices

 内容如下:

Available servicesVersionService Description : VersionService EPR : http://helpdesk.citicsinfo.com/services/VersionService Status : ActiveAvailable OperationsgetVersion callInfoServiceService Description : callInfoServiceService EPR : http://helpdesk.citicsinfo.com/services/callInfoServiceService Status : ActiveAvailable OperationsupdateCallInfo writeLog getUserNameFromSession queryCallInfo afterAddBillMessageService Description : afterAddBillMessageService EPR : http://helpdesk.citicsinfo.com/services/afterAddBillMessageService Status : ActiveAvailable OperationshadAddBillForTheCall 

分析我新增的那个service:

callInfoService   //service名称
Service Description : callInfoService
Service EPR : http://helpdesk.citicsinfo.com/services/callInfoService  //请求地址(查看xml后面要加?wsdl或?xsd)
Service Status : Active  //service状态:可用

Available Operations  //可执行的操作,即可用的方法
updateCallInfo
writeLog
getUserNameFromSession
queryCallInfo

在浏览器输入:http://helpdesk.citicsinfo.com/services/callInfoService?wsdl
显示xml结构如下:

 

  <?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://device.axis2.hd.org" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://device.axis2.hd.org">  <wsdl:documentation>callInfoService</wsdl:documentation> - <wsdl:types>- <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://device.axis2.hd.org">- <xs:element name="writeLog">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="info" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="updateCallInfo">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="callid" nillable="true" type="xs:string" />   <xs:element minOccurs="0" name="billNumber" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="updateCallInfoResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="queryCallInfo">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="comeUserjobNumber" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="queryCallInfoResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="getUserNameFromSession">- <xs:complexType>  <xs:sequence />   </xs:complexType>  </xs:element>- <xs:element name="getUserNameFromSessionResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>  </xs:schema>  </wsdl:types>- <wsdl:message name="updateCallInfoRequest">  <wsdl:part name="parameters" element="ns:updateCallInfo" />   </wsdl:message>- <wsdl:message name="updateCallInfoResponse">  <wsdl:part name="parameters" element="ns:updateCallInfoResponse" />   </wsdl:message>- <wsdl:message name="writeLogRequest">  <wsdl:part name="parameters" element="ns:writeLog" />   </wsdl:message>  <wsdl:message name="writeLogResponse" /> - <wsdl:message name="getUserNameFromSessionRequest">  <wsdl:part name="parameters" element="ns:getUserNameFromSession" />   </wsdl:message>- <wsdl:message name="getUserNameFromSessionResponse">  <wsdl:part name="parameters" element="ns:getUserNameFromSessionResponse" />   </wsdl:message>- <wsdl:message name="queryCallInfoRequest">  <wsdl:part name="parameters" element="ns:queryCallInfo" />   </wsdl:message>- <wsdl:message name="queryCallInfoResponse">  <wsdl:part name="parameters" element="ns:queryCallInfoResponse" />   </wsdl:message>- <wsdl:portType name="callInfoServicePortType">- <wsdl:operation name="updateCallInfo">  <wsdl:input message="ns:updateCallInfoRequest" wsaw:Action="urn:updateCallInfo" />   <wsdl:output message="ns:updateCallInfoResponse" wsaw:Action="urn:updateCallInfoResponse" />   </wsdl:operation>- <wsdl:operation name="writeLog">  <wsdl:input message="ns:writeLogRequest" wsaw:Action="urn:writeLog" />   <wsdl:output message="ns:writeLogResponse" wsaw:Action="urn:writeLogResponse" />   </wsdl:operation>- <wsdl:operation name="getUserNameFromSession">  <wsdl:input message="ns:getUserNameFromSessionRequest" wsaw:Action="urn:getUserNameFromSession" />   <wsdl:output message="ns:getUserNameFromSessionResponse" wsaw:Action="urn:getUserNameFromSessionResponse" />   </wsdl:operation>- <wsdl:operation name="queryCallInfo">  <wsdl:input message="ns:queryCallInfoRequest" wsaw:Action="urn:queryCallInfo" />   <wsdl:output message="ns:queryCallInfoResponse" wsaw:Action="urn:queryCallInfoResponse" />   </wsdl:operation>  </wsdl:portType>- <wsdl:binding name="callInfoServiceSoap11Binding" type="ns:callInfoServicePortType">  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="updateCallInfo">  <soap:operation soapAction="urn:updateCallInfo" style="document" /> - <wsdl:input>  <soap:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="writeLog">  <soap:operation soapAction="urn:writeLog" style="document" /> - <wsdl:input>  <soap:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="getUserNameFromSession">  <soap:operation soapAction="urn:getUserNameFromSession" style="document" /> - <wsdl:input>  <soap:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="queryCallInfo">  <soap:operation soapAction="urn:queryCallInfo" style="document" /> - <wsdl:input>  <soap:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap:body use="literal" />   </wsdl:output>  </wsdl:operation>  </wsdl:binding>- <wsdl:binding name="callInfoServiceSoap12Binding" type="ns:callInfoServicePortType">  <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="updateCallInfo">  <soap12:operation soapAction="urn:updateCallInfo" style="document" /> - <wsdl:input>  <soap12:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap12:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="writeLog">  <soap12:operation soapAction="urn:writeLog" style="document" /> - <wsdl:input>  <soap12:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap12:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="getUserNameFromSession">  <soap12:operation soapAction="urn:getUserNameFromSession" style="document" /> - <wsdl:input>  <soap12:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap12:body use="literal" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="queryCallInfo">  <soap12:operation soapAction="urn:queryCallInfo" style="document" /> - <wsdl:input>  <soap12:body use="literal" />   </wsdl:input>- <wsdl:output>  <soap12:body use="literal" />   </wsdl:output>  </wsdl:operation>  </wsdl:binding>- <wsdl:binding name="callInfoServiceHttpBinding" type="ns:callInfoServicePortType">  <http:binding verb="POST" /> - <wsdl:operation name="updateCallInfo">  <http:operation location="updateCallInfo" /> - <wsdl:input>  <mime:content type="application/xml" part="parameters" />   </wsdl:input>- <wsdl:output>  <mime:content type="application/xml" part="parameters" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="writeLog">  <http:operation location="writeLog" /> - <wsdl:input>  <mime:content type="application/xml" part="parameters" />   </wsdl:input>- <wsdl:output>  <mime:content type="application/xml" part="parameters" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="getUserNameFromSession">  <http:operation location="getUserNameFromSession" /> - <wsdl:input>  <mime:content type="application/xml" part="parameters" />   </wsdl:input>- <wsdl:output>  <mime:content type="application/xml" part="parameters" />   </wsdl:output>  </wsdl:operation>- <wsdl:operation name="queryCallInfo">  <http:operation location="queryCallInfo" /> - <wsdl:input>  <mime:content type="application/xml" part="parameters" />   </wsdl:input>- <wsdl:output>  <mime:content type="application/xml" part="parameters" />   </wsdl:output>  </wsdl:operation>  </wsdl:binding>- <wsdl:service name="callInfoService">- <wsdl:port name="callInfoServiceHttpSoap11Endpoint" binding="ns:callInfoServiceSoap11Binding">  <soap:address location="http://helpdesk.citicsinfo.com/services/callInfoService.callInfoServiceHttpSoap11Endpoint/" />   </wsdl:port>- <wsdl:port name="callInfoServiceHttpSoap12Endpoint" binding="ns:callInfoServiceSoap12Binding">  <soap12:address location="http://helpdesk.citicsinfo.com/services/callInfoService.callInfoServiceHttpSoap12Endpoint/" />   </wsdl:port>- <wsdl:port name="callInfoServiceHttpEndpoint" binding="ns:callInfoServiceHttpBinding">  <http:address location="http://helpdesk.citicsinfo.com/services/callInfoService.callInfoServiceHttpEndpoint/" />   </wsdl:port>  </wsdl:service>  </wsdl:definitions>


在浏览器输入:http://helpdesk.citicsinfo.com/services/callInfoService?xsd
显示xml结构如下:

- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://device.axis2.hd.org" xmlns:ns1="http://org.apache.axis2/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://device.axis2.hd.org">- <xs:element name="writeLog">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="info" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="updateCallInfo">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="callid" nillable="true" type="xs:string" />   <xs:element minOccurs="0" name="billNumber" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="updateCallInfoResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="queryCallInfo">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="comeUserjobNumber" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="queryCallInfoResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>- <xs:element name="getUserNameFromSession">- <xs:complexType>  <xs:sequence />   </xs:complexType>  </xs:element>- <xs:element name="getUserNameFromSessionResponse">- <xs:complexType>- <xs:sequence>  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />   </xs:sequence>  </xs:complexType>  </xs:element>  </xs:schema>


无论上面哪种xml结构我们都能很清楚的看出,我们定义的方法,以及参数,有无返回值等信息。

1,在浏览器调试,调用方法updateCallInfo:http://helpdesk.citicsinfo.com/services/callInfoService/updateCallInfo?callid=B4848F35FFFF827601ED4054D35238FC&billNumber=ceshi12页面输出:- <ns:updateCallInfoResponse xmlns:ns="http://device.axis2.hd.org">  <ns:return>收到信息:callid=B4848F35FFFF827601ED4054D35238FC,billNumber=ceshi12。根据参数已经完成更新数据库数据。</ns:return>   </ns:updateCallInfoResponse>后台也相应的打印:调用webservice的返回结果信息:收到信息:callid=B4848F35FFFF827601ED4054D35238FC,billNumber=ceshi12。根据参数已经完成更新数据库数据。去数据库查看,信息也正确更新了。2,在浏览器调试,调用方法queryCallInfo:http://helpdesk.citicsinfo.com/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890页面输出:- <ns:queryCallInfoResponse xmlns:ns="http://device.axis2.hd.org">  <ns:return>收到参数信息comeUserjobNumber=T001891。根据此参数查询到的信息是:卢帅印</ns:return>   </ns:queryCallInfoResponse>后台也相应的打印:调用webservice的返回结果信息:收到参数信息comeUserjobNumber=T001891。根据此参数查询到的信息是:卢帅印3,在浏览器调试,调用方法getUserNameFromSession:http://helpdesk.citicsinfo.com/services/callInfoService/getUserNameFromSession结果浏览器页面空白,后台也没有输出!原因待定。4,在浏览器调试,调用方法writeLog:http://helpdesk.citicsinfo.com/services/callInfoService/writeLog?info=写日志页面输出:- <ns:writeLogResponse xmlns:ns="http://device.axis2.hd.org">  <ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />   </ns:writeLogResponse>后台打印:调用webservice的返回结果信息:收到参数信息info=??????关于中文乱码,url还是要经过encodeURI才行,这个就不细说了。---------------------------------------------------------------


 

其中方法getUserNameFromSession调用没有成功,//没有参数的方法public String getUserNameFromSession(){ActionContext ctx = ActionContext.getContext();HttpSession session=((HttpServletRequest) (ActionContext.getContext()).get(ServletActionContext.HTTP_REQUEST)).getSession();String resultMessage="";if(session.getAttribute("current_user_id")!=null){resultMessage="获取到当前登录用户的账号:"+(String)session.getAttribute("current_user_id");}else{resultMessage="当前登录用户的账号为null";}System.out.println("调用webservice的返回结果信息:\r\n"+resultMessage);return resultMessage;}这个方法没有参数,并且从session获取当前用户的账号。经过调试发现 (HttpServletRequest) (ActionContext.getContext()).get(ServletActionContext.HTTP_REQUEST)为null也就是request对象是null,这样request。getSession()也为空。网上查了一下,webservice不能直接与session通信的忙着就涉及到了跨服务session管理,这是另外一个话题了,貌似挺深奥的。写webservice就必须写客户端代码,因为webservice就是为了让程序调用的。我们在浏览器调试这样很方便,最后还是要落实到客户端代码。


 

CallBackClient:package org.hd.axis2.client;import javax.xml.namespace.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class CallBackClient {public static void main(String args[]) throws AxisFault {CallBackClient.revokeMethodUpdateCallInfo();CallBackClient.revokeMethodQueryCallInfo();CallBackClient.revokeMethodWriteLog();}public static void revokeMethodUpdateCallInfo() throws AxisFault {// 使用RPC方式调用WebServiceRPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();// 指定调用WebService的UR//  http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890EndpointReference targetEPR = new EndpointReference("http://helpdesk.citicsinfo.com:80/services/callInfoService");options.setTo(targetEPR);// 指定hadAddBillForTheCall方法的参数值Object[] opAddEntryArgs = new Object[] { "B4848F35FFFF827601ED4054D35238FC","ceshi-SDF22" };// 指定返回值的数据类型Class[] classes = new Class[] { String.class };// 指定要调用的方法及WSDL文件的命名空间QName opAddEntry = new QName("http://device.axis2.hd.org","updateCallInfo");// 调用sayHelloToPerson方法并输出该方法的返回值Object[] resObj=serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes);//打印结果System.out.println("调用方法  updateCallInfo");if(resObj!=null&&resObj.length>0){for(int i=0;i<resObj.length;i++){System.out.println(resObj[i].toString());}}}public static void revokeMethodQueryCallInfo() throws AxisFault {// 使用RPC方式调用WebServiceRPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();// 指定调用WebService的UR//  http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890EndpointReference targetEPR = new EndpointReference("http://helpdesk.citicsinfo.com:80/services/callInfoService");options.setTo(targetEPR);// 指定hadAddBillForTheCall方法的参数值Object[] opAddEntryArgs = new Object[] { "T001890"};// 指定返回值的数据类型Class[] classes = new Class[] { String.class };// 指定要调用的方法及WSDL文件的命名空间QName opAddEntry = new QName("http://device.axis2.hd.org","queryCallInfo");// 调用sayHelloToPerson方法并输出该方法的返回值Object[] resObj=serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes);//打印结果System.out.println("调用方法  queryCallInfo");if(resObj!=null&&resObj.length>0){for(int i=0;i<resObj.length;i++){System.out.println(resObj[i].toString());}}}public static void revokeMethodWriteLog() throws AxisFault {// 使用RPC方式调用WebServiceRPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();// 指定调用WebService的UR//  http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890EndpointReference targetEPR = new EndpointReference("http://helpdesk.citicsinfo.com:80/services/callInfoService");options.setTo(targetEPR);// 指定hadAddBillForTheCall方法的参数值Object[] opAddEntryArgs = new Object[] { "写日志test" };// 指定返回值的数据类型Class[] classes = new Class[] { String.class };// 指定要调用的方法及WSDL文件的命名空间QName opAddEntry = new QName("http://device.axis2.hd.org","writeLog");// 调用sayHelloToPerson方法并输出该方法的返回值Object[] resObj=serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes);//打印结果System.out.println("调用方法  writeLog");if(resObj!=null&&resObj.length>0){for(int i=0;i<resObj.length;i++){System.out.println(resObj[i].toString());}}}}上面都采用了rpc的调用方式后台打印结果:调用webservice的返回结果信息:收到信息:callid=B4848F35FFFF827601ED4054D35238FC,billNumber=ceshi-SDF22。根据参数已经完成更新数据库数据。调用webservice的返回结果信息:收到参数信息comeUserjobNumber=T001890。根据此参数查询到的信息是:王占调用webservice的返回结果信息:收到参数信息info=写日志test上面的方法调用都成功了。