2010-11-15 55 views
2

我測試了用ksoap2調用soap 12 webservices。 我用這個代碼來調用Web服務:ksoap2和soap版本12有問題嗎?

SoapObject request = new SoapObject(NAMESPACE, NAME); 
request.addProperty("id", ID); 
request.addProperty("name", "[email protected]"); 
request.addProperty("pw", "password"); 
request.addProperty("listid", 501); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
envelope.setOutputSoapObject(request); 

AndroidHttpTransport client = new AndroidHttpTransport(URL); 
try { 
    client.call(NAMESPACE + NAME, envelope); 
    Object response = envelope.getResponse(); 
} catch (IOException e) { 
    Log.e(getClass().getSimpleName(), "IO Problem", e); 
} catch (XmlPullParserException e) { 
    Log.e(getClass().getSimpleName(), "Parser Problem", e); 
} 

我現在得到以下異常:

org.xmlpull.v1.XmlPullParserException:expected: START_TAG {http://www.w3.org/2001/12/soap-envelope}Envelope (position:START_TAG <{http://schemas.xmlsoap.org/soap/envelope/}soapenv:Envelope>@1:114 in [email protected]) 

這是服務器響應的問題,或者是有什麼錯誤的,我到目前爲止的代碼?看來其他用戶也有同樣的問題。如果我將信封更改爲SoapEnvelope.VER11,我會再進一步​​(可能由於URL錯誤,我從soap服務器獲得訪問被拒絕的響應),可能是因爲缺少創建VER12信封的其他信息。

+0

你是什麼意思,你更進一步與V11?你真的得到了正確的迴應嗎? – 2010-11-15 22:29:37

+0

我從soap服務中獲得拒絕的權限。這似乎是與使用URL而不是ksoap庫的URL的問題。 – Janusz 2010-11-16 09:11:05

+2

PermissionDenied是99%,因爲您沒有在您的AndroidManifest – Taras 2012-08-31 14:21:27

回答

4

您是否嘗試過你的信封查看服務所期待的各種選項?

E.g.你可以設置

envelope.dotNet = true; 
envelope.headerOut = security; // this is an Element[] created before 
envelope.encodingStyle = SoapEnvelope.ENC; 
envelope.setAddAdornments(false); 
envelope.implicitTypes = false; 

和一堆更多。看看javadoc?

此外請確保使用ksoap2-android項目的最新版本,以獲得一系列不在正常sourceforge項目中的修復。

+2

問題仍然沒有解決,但賞金即將到期。所以我會給你作爲獎勵你在android上的ksoap上的努力。感謝唯一可以與soap API進行通信的工作解決方案。 – Janusz 2010-12-07 09:08:25

+0

Thx。這可能是嘗試在服務器端使用不同配置的情況。希望你能控制它。 – 2010-12-07 20:04:50

+0

謝謝!真的幫助:D終於! 順便說一句,幫助我將SOAP版本從SOAP12更改爲SOAP11 + Manfred Moser提供的這些設置 – manWe 2013-07-30 21:14:57

0

嘗試VR11並更換

Object response = envelope.getResponse(); 

SoapObject reponse=(SoapObject)envelope.getResponse(); 
+0

中提供,它不會產生影響 – 2010-12-02 18:58:44

-2

我有同樣的問題,我不斷從envelop.getResponse得到一個例外「權限被拒絕」。

我認爲我的SOAP請求出了問題,並試圖對信封進行一些更改。最終,在查看其他一些板子後,我意識到我需要Android的額外權限來允許這樣做。

因此,將以下權限添加到您的Android應用的清單。

<uses-permission android:name="android.permission.INTERNET"> 
+1

錯誤中提到的錯誤與您實際提供的解決方案不同...... – DeltaCap 2013-06-06 05:22:54

1

我做了什麼,使這項工作是使用11版,它工作得很好,我:-)

 // Request model 
     SoapObject request = new SoapObject(namespace, Metodo); 

     // Envelop model 
     SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     sobre.dotNet = true; 
     sobre.setOutputSoapObject(request); 

     // Transport model 
     HttpTransportSE transporte = new HttpTransportSE(url); 

     // Let's call it :) 
     transporte.call(accionSoap, sobre); 

     //Result 
     SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse(); 

     tv.setText("" + resultado.toString()); 

我的變量:

private static final String accionSoap = "http://tempuri.org/ServicioAndroid"; 
private static final String Metodo = "ServicioAndroid"; 
private static final String namespace = "http://tempuri.org/"; 
private static final String url = "http://192.168.1.33/AutoEPOC_H/WS/WSAutoEPOC.asmx"; 

此Web服務創建使用dotNet。您可以通過使用IIS運行您的Web服務來檢查您的方法,操作,命名空間和URL。

如果你懂得西班牙語,你可以檢查這些鏈接:

http://www.youtube.com/watch?v=_MMByNiwqMc

http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html

我希望這有助於!

0

我只使用kso​​ap2 ver11 ...當我在localhost以外的其他服務器上使用它時,它仍然給我一個expected start_tag錯誤。

我的web服務完全由我公司的服務器託管,但它在Android 2.2模擬器中給出了這個預期的開始標記錯誤,並在吐司中不顯示任何內容(空錯誤)。

我不確定,但它可以是電話(Android 4.0)中的'NetworkOnMainThread'異常。