Java利用Axis遠端呼叫WebService介面
阿新 • • 發佈:2019-01-09
準備工作:
主要依賴的包:
1.axis.jar
官網:http://axis.apache.org/axis/
2.jaxrpc.jar
下載地址:http://www.java2s.com/Code/Jar/j/Downloadjaxrpcjar.htm
說明:
在拿到wsdl地址後先分析清楚xml檔案的一些引數,然後再動手寫程式碼,例如service名稱,targetNamespace,請求operation的名稱,要傳入的引數型別,返回結果型別等等。具體的程式碼參考如下:
1 package com.joysee.account.service.impl; 2 3 4import java.rmi.RemoteException; 5 6 import javax.xml.namespace.QName; 7 import javax.xml.rpc.ParameterMode; 8 import javax.xml.rpc.ServiceException; 9 10 import org.apache.axis.client.Call; 11 import org.apache.axis.client.Service; 12 13 14 public class Test { 15 16 /** 17 * @paramargs 18 * @throws ServiceException 19 * @throws MalformedURLException 20 * @throws RemoteException 21 */ 22 public static void main(String[] args) throws ServiceException, RemoteException { 23 24 //WSDL地址 25 String wsdlUrl ="http://IP:PORT/ExampleWebService?wsdl";26 //看具體響應的WSDL中的namespace 27 String nameSpaceUri ="http://ws.exmaple.com/"; 28 29 Service service = new Service(); 30 31 Call call = (Call)service.createCall(); 32 call.setTargetEndpointAddress(wsdlUrl); 33 34 //設定operation 名稱, 35 call.setOperationName(new QName(nameSpaceUri, "order")); 36 37 //設定賬戶,注意引數為XSD_STRRING 38 call.addParameter("account", org.apache.axis.Constants.XSD_STRING, 39 ParameterMode.IN); 40 41 //設定賬戶,注意引數為XSD_LONG 42 call.addParameter("price", org.apache.axis.Constants.XSD_LONG, 43 ParameterMode.IN); 44 45 //設定返回型別為物件陣列 46 call.setReturnClass(Object[].class); 47 48 Object[] result = (Object[]) call.invoke(new Object[]{"test","123456"}); 49 50 System.out.println(result[0]); 51 52 } 53 54 }
常見異常:
1.org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType
這個異常需要檢查call.setReturnClass(); 中的型別,或者是setReturnType()
2. Unexpected wrapper element order found.
可以檢查setOperationName中的QName引數,其中的NameSpace地址是不是有問題,或者operation名是否有誤