【问题标题】:Savon ruby gem adds ins0 to tagsSavon ruby​​ gem 将 ins0 添加到标签
【发布时间】:2011-10-20 14:35:31
【问题描述】:

使用 savon gem,我得到以下请求 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:wsdl="URL" 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:ins0="SOME URL">
        <soap:Body>
            <ins0:Test xmlns="SOME URL">
            </ins0:Test>
        </soap:Body>
    </soap:Envelope>

但它必须是这样的:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:wsdl="URL" 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <Test xmlns="SOME URL">
            </Test>
        </soap:Body>
    </soap:Envelope>

通知ins0 已被删除。

有什么建议吗?

【问题讨论】:

  • 试过了,但我得到了一个错误:Server did not recognize the value of HTTP Header SOAPAction: test. 因为它采取了“测试”动作并将其变为小写。
  • 实际上我刚刚发现这个 XML 差异并没有破坏任何东西,代码工作正常。但它可能会破坏其他人的代码。

标签: ruby namespaces savon


【解决方案1】:

这两个 XML 文档是等价的,所以只要文档由符合 XML 的代理解析就应该没有问题。

Savon 生成的文档只是为“SOME URL”命名空间创建了一个命名空间前缀 ins0。这对于包含来自该名称空间的许多元素的大型 SOAP 文档很方便。在这个例子中,前缀并不是真正需要的。

我能看到的唯一潜在问题是 Savion 生成的文档似乎两次声明了 ins0 命名空间 - 一次是在 soap:Envelope 中,然后是在 soap:Body 中。似乎是多余的,并且可能会出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多