练习使用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 services
Version
Service Description : Version
Service EPR : http://helpdesk.citicsinfo.com/services/Version
Service Status : Active
Available Operations
getVersion
callInfoService
Service Description : callInfoService
Service EPR : http://helpdesk.citicsinfo.com/services/callInfoService
Service Status : Active
Available Operations
updateCallInfo
writeLog
getUserNameFromSession
queryCallInfo
afterAddBillMessage
Service Description : afterAddBillMessage
Service EPR : http://helpdesk.citicsinfo.com/services/afterAddBillMessage
Service Status : Active
Available Operations
hadAddBillForTheCall
分析我新增的那个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方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的UR
// http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890
EndpointReference 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方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的UR
// http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890
EndpointReference 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方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的UR
// http://helpdesk.citicsinfo.com:80/services/callInfoService/queryCallInfo?comeUserjobNumber=T001890
EndpointReference 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
上面的方法调用都成功了。