Suds + JIRA = SAX异常
我正在使用 Python 2.6 和 suds 0.3.7 来和 JIRA 4.0 进行交互。
当我连接到 JIRA 服务器时,可以顺利获取所有问题的信息。
但是,当我想要更新一个问题时,suds 报出了一个 SAXException(大概是这个原因):
WebFault: 服务器出现错误: org.xml.sax.SAXException: 在反序列化时发现数组元素内的字符数据
我按照这里描述的步骤在操作: http://confluence.atlassian.com/display/JIRA/Creating+a+SOAP+Client
只是把 SOAPpy 的调用替换成了 suds。
我尝试更新一个问题的代码大致是这样的,还包含了异常信息:
>>> w="http://bugs/rpc/soap/jirasoapservice-v2?wsdl"
>>> from suds.client import Client
>>> client = Client(w)
>>> auth = client.service.login("myname","mypass")
>>> issue = client.service.getIssue(auth,"BUG-30112")
>>> issue.summary
This is the original summary for BUG-30112
>>>
>>> client.service.updateIssue(auth,"BUG-30112",[
... {"id":"summary","values":["My new summary"]}])
Traceback (most recent call last):
File "<interactive input>", line 2, in <module>
File "C:\Python26\lib\suds\client.py", line 535, in __call__
return client.invoke(args, kwargs)
File "C:\Python26\lib\suds\client.py", line 595, in invoke
result = self.send(msg)
File "C:\Python26\lib\suds\client.py", line 630, in send
result = self.failed(binding, e)
File "C:\Python26\lib\suds\client.py", line 681, in failed
r, p = binding.get_fault(reply)
File "C:\Python26\lib\suds\bindings\binding.py", line 235, in get_fault
raise WebFault(p, faultroot)
WebFault: Server raised fault: 'org.xml.sax.SAXException: Found character data inside an array element while deserializing'
>>>
有没有人遇到过类似的问题?
3 个回答
1
其实,只要把库从suds换成SOAPpy,其他的都不用改,整个程序就开始正常工作了。这有点让人烦。之前我没用SOAPpy是因为觉得它好像被抛弃了,而且安装起来比suds复杂。但没想到SOAPpy居然能正常工作!
谢谢大家。
1
你可以试着增加输出的信息量,这样就能看到具体发送了什么。或者使用Wireshark这个工具。你也可以用SOAPpy来做同样的事情,看看具体发送了哪些内容。对我来说,调试SOAP错误通常就是这样 :-/
~Matt
1
如果你换到suds 3.0.9(测试版),这个问题就能解决了……这是唯一一个有修复的版本。