如何在 Savon 中使用带有 xsi:types 的对象

发布于 2024-09-24 03:46:59 字数 508 浏览 10 评论 0原文

我正在尝试使用 Savon 发出一些 SOAP 请求,但恐怕我需要在某种程度上超出基础知识。

我需要发送以下内容:

<env:Body>
  <wsdl:methodName>
    <parameter xsi:type='ValueClass'>value</parameter>
  </wsdl:methodName>
</env:Body>

现在,如果我不必指定 xsi:type,那么问题就很简单:

client.method_name { |soap| soap.body = {:parameter => 'value'} }

问题是参数中的 xsi:type;由于我使用的 Web 服务是围绕多态性构建的,因此我需要显式指定参数的类型。有什么方法可以做到这一点(最好不必生成自己的 XML?)我真的很想永远放弃soap4r :)

谢谢!

I'm trying to use Savon to make some SOAP requests, but I'm afraid I need to go beyond the basics somewhat.

I need to send something along the lines of:

<env:Body>
  <wsdl:methodName>
    <parameter xsi:type='ValueClass'>value</parameter>
  </wsdl:methodName>
</env:Body>

Now, if I didn't have to specify that xsi:type, it would be a simple matter of:

client.method_name { |soap| soap.body = {:parameter => 'value'} }

The problem is the xsi:type in the parameter; due to the way the web service I'm using is built around polymorphism, I need to explicitly specify what type the parameter is. Is there any way I can do this (preferably without having to generate my own XML?) I'd really love to drop soap4r for good :)

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

于我来说 2024-10-01 03:46:59

在 Hash 中指定 XML 属性非常难看,但这是可能的:

client.method_name do |soap|
  soap.body = {
    :parameter => 'value',
    :attributes! => { :parameter => { 'xsi:type' => ValueClass } }
  }
end

请查看:http: //github.com/rubiii/savon/wiki/SOAP

在 Savon 支持 XML 架构属性之前,我建议您使用 构建器
(Savon 附带)生成 XML:

client.method_name do |soap|
  xml = Builder::XmlMarkup.new
  soap.body = xml.parameter "value", "xsi:type" => "ValueClass"
end

Specifying XML attributes in a Hash is pretty ugly, but it's possible:

client.method_name do |soap|
  soap.body = {
    :parameter => 'value',
    :attributes! => { :parameter => { 'xsi:type' => ValueClass } }
  }
end

Please have a look at: http://github.com/rubiii/savon/wiki/SOAP

Until Savon supports XML Schema Attributes, I would suggest you to use Builder
(which comes with Savon) to generate your XML:

client.method_name do |soap|
  xml = Builder::XmlMarkup.new
  soap.body = xml.parameter "value", "xsi:type" => "ValueClass"
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文