webservice調用接口,接口返回數組類型


1.

其中sendSyncMsg1接口是方法名,Vector實現了List接口,xml是sendSyncMsg1的方法形參

Service service = new Service();   

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(     "http://127.0.0.1:8080/services/fangkunTest"));   

call.setOperationName(new QName("http://127.0.0.1:8080/",     "sendSyncMsg1"));  

call.addParameter(new QName("http://127.0.0.1:8080/", "xml"),     XMLType.XSD_STRING, ParameterMode.IN);   //必須這么用,不知道為啥,此處與返回基本類型寫法有差別

call.setReturnType(XMLType.SOAP_VECTOR);   //返回時數組類型,暫時知道用XMLType.SOAP_VECTOR

call.setUseSOAPAction(true);  

call.setSOAPActionURI("http://127.0.0.1:8080/sendSyncMsg1");  

Vector result = (Vector) call.invoke(new Object[] { "昆明" });   

// Vector實現了List接口   

System.out.println((String) result.get(1));   

if (result != null && result.size() != 0) {   

 if (result.get(0).equals("1")) {     

String etoken = (String) result.get(1);    

} else {

    System.out.println(result.get(2));    

    return;    

}

  }

 

2.(轉來自google)

Java利用Axis遠程調用WebService接口

准備工作:

  主要依賴的包:

  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 4 import 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 * @param args 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名是否有誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM