【问题标题】:How to add xmlns to message in savon如何在 savon 中将 xmlns 添加到消息中
【发布时间】:2014-05-07 08:28:43
【问题描述】:

我正在使用 savon 2 gem。如何将 xmlns 添加到消息标签而不是信封?

xml生成是这样的

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.serviceurl.com/"> <soap:Body> <tns:Search> <Token>55</Token> </tns:Search> </soap:Body> </soap:Envelope>

我需要这个

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Search xmlns="http://www.serviceurl.com/"> <Token>55</Token> </Search> </soap:Body> </soap:Envelope>

搜索 xmlns="http://www.serviceurl.com/"

【问题讨论】:

    标签: soap savon


    【解决方案1】:

    我有一个非常简单的解决方案。 只需使用字符串作为标记并指定命名空间。 你错过了分享你的代码,所以我只能猜测它的样子,但你应该把它改成这样:

    'tns:Token' => 'SS'
    

    【讨论】:

      【解决方案2】:

      在 XML 术语中,这两个请求之间的区别不是 Search 元素,而是在“当前”版本中,Token 元素不在命名空间中,而在“需要”版本中,@987654325 @ 在 http://www.serviceurl.com/ 命名空间中。

      设置客户端的element_form_default参数为:qualified应该可以达到你需要的效果

      Savon.client(element_form_default: :qualified)
      

      (docs)

      这可能会产生

      <tns:Search>
        <tns:Token>
      

      但就 XML 解析器而言,它等同于具有默认命名空间声明的版本(如果服务不接受这种形式,则错误在于 服务,而不是在您的客户端中)。

      【讨论】:

      • 是的,搜索和令牌在 tns 命名空间中。但我调用的服务无法识别令牌。
      • 那么你需要向服务提供商投诉并让他们修复他们损坏的服务......如果一切都失败了,你总是可以手动构造 XML(this page 上的“xml”选项) 但这意味着您必须处理 Token 值内任何必要的非法字符转义。
      【解决方案3】:

      试试这样:

      client=Savon.client(wdsl: ...)
      client.call(:search, attributes: {xmlns: "http://www.serviceurl.com/"}) do 
        message ({ 
          "Token" => 55
        })
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2014-02-23
        • 2015-02-23
        相关资源
        最近更新 更多