0

我正在尝试使用 soap4r(来自https://github.com/mumboe/soap4r)为名为 SysAid 的产品编写 SOAP 客户端。

我有一个 Java SOAP 客户端的工作示例,对于大多数方法,我的 Ruby 客户端也可以工作。Java 客户端可用于确定 Ruby 版本的错误。

使用特定呼叫时收到错误消息:

SOAP::FaultError: prefix xs is not bound to a namespace

这是soap4r发送的消息,它产生了这个错误:

<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <n1:save xmlns:n1="http://api.ilient.com/">
      <sessionId>1339292997261</sessionId>
      <apiSysObj xsi:type="n1:apiServiceRequest">
        <customDateFields></customDateFields>
        <customFields>
          <entry>
            <key xsi:type="xs:string">sr_cust_dafis_fau</key>
            <value xsi:type="xs:string"></value>
          </entry>
          <entry>
            <key xsi:type="xs:string">sr_cust_activity</key>
          </entry>
        </customFields>
        <description>This is the description of the ticket.</description>
      </apiSysObj>
    </n1:save>
  </env:Body>
</env:Envelope>

这是 Java 为相同方法发送的内容,服务器没有抱怨:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:save xmlns:ns2="http://api.ilient.com/">
      <sessionId>1339199684324</sessionId>
      <apiSysObj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:apiServiceRequest">
        <customDateFields/><customFields>
        <entry>
          <key xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">sr_cust_dafis_fau</key>
          <value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string"></value>
        </entry>
        <entry>
          <key xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">sr_cust_activity</key>
        </entry>
      </customFields>
      <description>This is the description of the ticket.</description>
    </apiSysObj>
  </ns2:save>
</S:Body>
</S:Envelope>

如您所见,错误来自 customFields 标签。soap4r 省略了 key 标记上的 xmlns:xs 属性,而 Java 将其放入。

据我所知,soap4r 在任何其他方法调用上都不会出现这样的严重错误。

如何让soap4r将此所需的属性添加到键标签?

4

1 回答 1

0

我认为命名空间“xmlns:xsd="http://www.w3.org/2001/XMLSchema" 已在“env:Envelope”中定义,问题是为什么在主体soap4r 中使用“xs:string” “xsd:字符串”。

于 2012-06-29T03:39:28.170 回答