Suds + JIRA = SAX异常

3 投票
3 回答
2091 浏览
提问于 2025-04-15 15:17

我正在使用 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(测试版),这个问题就能解决了……这是唯一一个有修复的版本。

撰写回答