axis2练习

 

练习使用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


上面的方法调用都成功了。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值