soaplib在字符串有效负载中的XML字符问题

时间:2010-07-27 18:08:12

标签: python django soap wsgi

我使用soaplib创建了一个简单的SOAP Web服务,并遇到了一个问题,即发送的SOAP参数包括&符号或尖括号,即使在转义时也会被忽略。

该方法是否设置为接受原始字符串或“any”类型的原语,引入的任何字符都会导致此类型的webfault(使用suds):

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')

并引发异常。打开日志记录后,我可以看到suds正在逃避这些字符。到目前为止,我已经能够发现问题并没有在原始水平下降,我无法弄清楚问题出在哪里或者是什么。这使得通过该服务发送XML有效负载变得相当困难。

使用的类是SimpleWSGISoapApp的子类,该方法用作Django视图。我注意到当尝试使用soaplib客户端库Hello World example时它运行得很好。

2 个答案:

答案 0 :(得分:1)

我在python中使用“更容易”的肥皂库时遇到了问题(特别是suds)。我刚才有一个问题导致我使用soapPy,而类似你的问题就消失了。

Suds + JIRA = SAXException

这个问题对于使用例如wireshark(或谷歌“肥皂调试器”)以查看较低级别发生的事情也提出了很好的建议。

答案 1 :(得分:0)

问题绝对不是soaplib,而是Django代码。由于某种原因,该代码正在读取request.POST.items(),这会在任何特殊字符(例如=,&,>)中删除SOAP请求。切换到soaplib trunk,更新Django code,这解决了引发的参数错误以及lxml引发的相关Unicode ValueErrors。