webService 客戶端呼叫 axis2

iteye_21202發表於2013-05-03


今天找出來給同事用,重新改了下 給同事.

package com.jielan.axis2;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HTTPConstants;

public class Client {
//private static String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
// targetEPR指定打包的Service(.aar檔案)在容器中的物理位置。
//EndpointReference端點引用
private static EndpointReference targetEpr;
//建立request SOAP包工廠 fac。
private static OMFactory fac = OMAbstractFactory.getOMFactory();

public static OMElement getMethodOMElement(String nameSpace,String tns,String methodName,String[] args,String[] vals){
// OMNamespace指定此fac SOAP文件名稱空間。
//有一個tns的namespace,這個namespace和目標的介面有關,一定要和目標 wsdl的message傳輸介面一致 是tns
OMNamespace omNs = fac.createOMNamespace(nameSpace,tns);
//建立元素getWeatherbyCityName oap,並指定其在omNs指代的名稱空間中。 方法函式
OMElement method = fac.createOMElement(methodName,omNs);
//給method新增 這個方法的引數名,和引數值
for(int i =0;i<args.length;i++){
//新建引數OMElement物件例項,設定引數名
OMElement params = fac.createOMElement(args[i],omNs);
//給引數名物件設定引數值
params.setText(vals[i]);
//將引數OMElement物件新增到Method物件中
method.addChild(params);
}
//返回request的方法 SOAP包
return method;
}

public static void main(String[] args) throws AxisFault {
OMElement result = new Client().getResult("http://**********/EnterpriseService.asmx?wsdl",
"http://tempuri.org/method", "http://tempuri.org/", "tns", "method",
new String[]{"paramName"}, new String[]{"value"},60000);
System.out.println(result.toString());
}

/****
*
* @param url webService wsdl地址
* @param SOAPAction SOAPAction的地址在方法中 請求頭裡面有SOAPAction: "http://tempuri.org/*******"
* @param nameSpace 名稱空間 xmlns="http://tempuri.org/"
* @param tns 為空好像也可以 我是用 "tns"
* @param method 方法名
* @param params 方法傳入引數名稱
* @param values 方法傳入引數值
* @return 返回結果 OMElement 型別
* @throws AxisFault
*/
public OMElement getResult(String url,String SOAPAction,String nameSpace,String tns,String method,String[] params,String[] values,int waitTime) throws AxisFault{
targetEpr = new EndpointReference(url);
ServiceClient client = new ServiceClient();
Options options = new Options();
options.setTimeOutInMilliSeconds(waitTime);
options.setAction(SOAPAction);
options.setTo(targetEpr);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);//設定傳輸協議
options.setProperty(HTTPConstants.CHUNKED, "false");
client.setOptions(options);
OMElement method1= getMethodOMElement(nameSpace,tns,method,params,values);
OMElement result = client.sendReceive(method1);
return result;
}
}



相關文章