2013-03-05 53 views
0

我創建了5種不同類型的服務。 A,B,C,d,E。使用Apache Axis如何從我的客戶端使用Web服務?

從單個java客戶端我將調用所有這5個服務,並給每個服務3個參數。

我創建了客戶端。像這樣是對的?

import javax.xml.namespace.QName; 
import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 

public class ServicesCaller 
{ 

    String A=""; 
    String B=""; 
    String C=""; 

    public void services(String start,String end,String comfort) 
    { 
     try 
     { 
      String endpoint1="http://localhost:8080/callser/services/A1"; 
      String endpoint2="http://localhost:8080/callser/services/A2"; 
      String endpoint3="http://localhost:8080/callser/services/A3"; 
      String endpoint4="http://localhost:8080/callser/services/A4"; 
      String endpoint5="http://localhost:8080/callser/services/A5"; 

      Service service=new Service(); 

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

      call.setTargetEndpointAddress(new java.net.URL(endpoint1)); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint2)); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint3)); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint4)); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint5)); 

      call.setOperationName(new QName("http://service.com","firstReturn")); 

      String ret = (String) call.invoke(new Object[] {start,end,comfort}); 

     } 

     catch(Exception e) 
     { 
      System.out.println(e); 
     } 
    } 
} 

它正確嗎?當我從我的jsp運行時,我得到這個異常

org.xml.sax.SAXException: Deserializing parameter 'arg0': could not find deserializer for type {http://schemas.xmlsoap.org/soap/encoding/}string 
+0

我建議您使用wsimport爲您的WSDL生成一個Java客戶端 – ftr 2013-03-05 17:27:07

回答

0

首先,使用IDE爲每個Web服務WSDL創建子目錄。有了存根後,只需撥打他們的虛擬方法即可。這爲您節省了大量時間和精力。

然後使用下面的代碼邏輯,根據您的代碼,您將無法調用所有WS,但只能調用最後一個。

如果您沒有IDE,那麼下載Net Beans或Oracle Jdev,這兩者都是免費軟件,並且不需要許可證 如果您無法做到這一點,那麼WSImport是您擁有的最佳選擇。

public class ServicesCaller 
{ 

    String A=""; 
    String B=""; 
    String C=""; 

    public void services(String start,String end,String comfort) 
    { 
     try 
     { 
      String endpoint1="http://localhost:8080/callser/services/A1"; 
      String endpoint2="http://localhost:8080/callser/services/A2"; 
      String endpoint3="http://localhost:8080/callser/services/A3"; 
      String endpoint4="http://localhost:8080/callser/services/A4"; 
      String endpoint5="http://localhost:8080/callser/services/A5"; 

      Service service=new Service(); 

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

      String ret =""; 
      call.setOperationName(new QName("http://service.com","allepyReturn")); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint1)); 
      ret = (String) call.invoke(new Object[] {start,end,comfort}); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint2)); 
      ret = (String) call.invoke(new Object[] {start,end,comfort}); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint3)); 
      ret = (String) call.invoke(new Object[] {start,end,comfort}); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint4)); 
      ret = (String) call.invoke(new Object[] {start,end,comfort}); 

      call.setTargetEndpointAddress(new java.net.URL(endpoint5)); 
      ret = (String) call.invoke(new Object[] {start,end,comfort}); 

     } 

     catch(Exception e) 
     { 
      System.out.println(e); 
     } 
    } 
+0

如何爲每個客戶端創建存根(stub)?以及如何打電話給每個客戶端 – 2013-03-06 05:06:51

+0

可以說你有Jdev,打開你的項目......將WSDL包含在項目中。然後右鍵單擊WSDL並單擊生成Web服務代理......一旦你完成它會帶你通過一個嚮導,當你完成時,你得到所有的存根類和文件生成.. 所有的WSDL重複這一點。 – 2013-03-06 05:29:46

+0

我正在使用eclipse juno – 2013-03-06 05:38:30