2010-07-27 66 views
0

我已經使用soaplib創建了一個簡單的SOAP Web服務,並且遇到了一個問題,其中包含&符或尖括號的SOAP參數即使在轉義時也會被忽略。soaplib字符串有效載荷中的XML字符問題

無論該方法被設置爲接受這種類型的原語字符串或一個基本類型的「任意」,任何在WebFault此類引入結果這些字符(使用泡沫):

suds.WebFault: Server raised fault: 'my_method() takes exactly 2 arguments (1 given)'

現在,這裏的方法中,具有用於存儲結果移除附加碼:

@soapmethod(soap_types.String, _returns=soap_types.Boolean) 
def my_method_(self, sample): 
    return True 

調用此方法與任何簡單的字符串工作得很好,如在肥皂水,

suds_object.service.my_method('Hello World')

結果爲 「真」。但是可以添加任何和號或尖括號,例如

suds_object.service.my_method('Hello & World')

和異常。打開日誌記錄後,我可以看到泡沫正在逃離這些角色。到目前爲止,我已經能夠發現問題不在原始層面,我無法弄清楚問題出在哪裏或是什麼。它使通過服務發送XML有效載荷變得相當困難。

使用的類是SimpleWSGISoapApp的子類,該方法用作Django視圖。我注意到,當試圖使用Hello World example使用soaplib客戶端庫,它工作得很好。

回答

0

問題絕對不是soaplib,而是Django代碼。出於某種原因,該代碼讀取request.POST.items(),該代碼在任何特殊字符處切斷SOAP請求(例如=,&,>)。切換到soaplib trunk,更新了Django code,並解決了引發的參數錯誤和lxml引發的相關Unicode ValueErrors。

1

我在python(特別是泡沫)中遇到了「更容易」的soap庫問題。前一段時間我有一個問題,導致我使用soapPy,而類似於你的問題剛剛消失。

Suds + JIRA = SAXException

這個問題也有使用好的建議,例如,Wireshark的(或谷歌「肥皂調試器」),看看在一個較低的水平發生。

+0

+1用於指出泡沫因子。將嘗試與其他一些客戶 - 我主要關心的是服務。 – bennylope 2010-07-27 20:58:01

+0

如果你這樣做,請在這裏傳遞你的結果。我很好奇。 – Chris 2010-07-28 01:37:28

+0

按照我的回答完成編輯,並且能夠同時使用suds和第三方SOAP客戶端(http://www.soapclient.com/soaptest.html)對服務進行編輯。 – bennylope 2010-08-02 21:43:49