首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Savon肥皂体问题

Savon肥皂体问题
EN

Stack Overflow用户
提问于 2011-06-07 15:24:51
回答 1查看 3.3K关注 0票数 2

我用的是稀释剂0.9.2和红宝石1.8.7。我正在尝试发出一个复杂类型的soap请求。

我需要弄清楚如何使用ruby和savon为以下类型的请求编写soap主体代码。基本上,请求中的一个复杂类型扩展了另一个类型,还需要将其编码为数组。

soap请求对象应该如下所示。

代码语言:javascript
运行
复制
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:app="http://someurl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Header/>
<soapenv:Body>
<app:someMethod soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<xyzResReq xsi:type="java:xyzResReq" xmlns:java="java:com.xyz.request">
<somestring xsi:type="xsd:string">abc123</somestring>
<itinerary xsi:type="java1:xyzItinerary" xmlns:java1="java:com.xyz.domain">
<someList xsi:type="java2:List" soapenc:arrayType="xsd:anyType[]" xmlns:java2="java:language_builtins.util"/>
</itinerary>
</xyzResReq>
</app:someMethod>
</soapenv:Body>
</soapenv:Envelope> 

someList还是模式表单中的一个复杂类型。

代码语言:javascript
运行
复制
<xsd:complexType name="someList">
<xsd:complexContent>
<xsd:extension base="stns:someBaseList">
<xsd:sequence>
<xsd:element maxOccurs="1" name="someElement" type="xsd:boolean" minOccurs="0" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

和someBaseList定义为

代码语言:javascript
运行
复制
<xsd:complexType name="someBaseList"> 
<xsd:sequence>
<xsd:element maxOccurs="1" nillable="true" name="baseElement" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>

我怎么才能在稀树草原做这件事。

EN

回答 1

Stack Overflow用户

发布于 2011-06-07 18:44:49

Savon基于这样的假设:大多数请求(XML)都足够简单,可以抽象为哈希。在这个复杂的例子中,我建议两个备选方案:

  1. 您可以使用任何Ruby对象(不是哈希)来响应to_s,而不是哈希。因此,您可以使用to_s方法创建对象(或对象层次结构),通过类似于构建器的内容构造XML,并将其传递给Savon::SOAP::XML#body=。 类SomeXML def self.to_s "xml“结束client.request :some_action do soap.body = SomeXML end
  2. 您还可以使用Savon::SOAP::XML#xml,它向给定的块生成一个Builder实例,以“动态”构造XML。 client.request :some_action do soap.xml do xml\xml xml.person {区b= b.name("Jim");b.phone("555-1234") } end

希望这能帮上忙!另外,请看一下新萨翁指南

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6267579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档