2014-01-15 19 views
0

我一直在使用kso​​ap2庫來處理所有的SOAP調用,並且它們都已經成功。但是,當我嘗試調用使用WSE的Web服務時,我收到以下錯誤...在Android上使用WSE調用web服務

代碼:soap:發件人,原因:WSE012:輸入不是有效的SOAP消息,因爲缺少以下信息:行動。

從我可以告訴,這意味着SOAP動作在頭必需的,但SOAPAction的不是12版http://code.google.com/p/ksoap2-android/issues/detail?id=67

當我添加一個有效的報頭中的文檔中它明確規定作爲標題我只是收到「服務器無法處理請求」錯誤。我一直堅持這一段時間,並希望有人知道發生了什麼。這裏是主代碼...

SoapObject request = new SoapObject(namespace, methodName); 
request.addProperty(name, value);  
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 
try { 
    HttpTransportSE transport = new HttpTransportSE(URL); 
    List<HeaderProperty> headers = new ArrayList<HeaderProperty>(); 
    headers.add(new HeaderProperty("SOAPAction", soapAction)); 
    transport.call(soapAction, envelope, headers); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

回答

0

它看起來像KSOAP庫不包括從肥皂VER12信封肥皂行動。此操作對於WSE增強型Web服務是必需的,因此從VER12到VER11的一個簡單變化就是訣竅。

0

你有沒有在你的代碼像空間(namespace /的soapAction)按您的WSDL定義的SOAP動作,

private static final String SOAP_ACTION_Auth = "http://AuthHeaderImplementation/Authentication"; 

一件事在你的代碼,

transport.call(soapAction, envelope, headers); 

根據this ksoap2 doc,它只需要動作和包絡作爲輸入參數。

call(java.lang.String soapAction, SoapEnvelope envelope) 
     set the desired soapAction header field 

這就是我如何添加空頭在我的代碼,如果需要通過服務器,

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
    //Create empty Header 
    Element [] header = new Element[1]; 
    header[0]=new Element(); 
       // add header to envelope 
    envelope.headerOut = header;   
    envelope.setOutputSoapObject(request); 
+0

該調用方法有另一個構造函數,允許將頭添加爲參數。在深入研究代碼之後,soapAction從未在ver12中實際使用過。您可以傳入一個空參數,並且對於非WSE Web服務仍然可以正常工作。我不確定這樣做或設置envelope.headerOut之間的區別是什麼。我只是想知道定義該特定URL的soap動作的目的是什麼? – user2983641