在Ruby中使用保留字作为字段名称的Web服务

时间:2010-10-26 14:59:29

标签: ruby soap

我正在尝试使用WebService,其中WSDL中的一个复杂类型具有使用Ruby保留字的字段名称。当我调用一个方法返回这些复杂类型之一并尝试访问数据时,我收到一个错误。

如何使用在Ruby中使用保留字的Web服务?

WSDL的相关部分是:

<s:complexType name="someObject">
  <s:sequence>
    <s:element minOccurs="0" name="field1" type="s:string"/>
    <s:element minOccurs="0" name="field2" type="s:boolean"/>
    <s:element minOccurs="0" name="field3" type="s:string"/>
    <s:element minOccurs="0" name="class" type="s:string"/> 
    <s:element minOccurs="0" name="field4" type="s:string"/>
  </s:sequence>
  <s:attribute form="unqualified" name="type" type="s:string"/>
</s:complexType>

这是从我的方法调用返回的XML:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Body>
    <MethodCallResponse>
      <MethodCallResult>
        <results>
          <object type="someObject">
            <field1>Whatever</field1>
            <field2>true</field2>
            <field3>TCP</field3>
            <class>CLIENT</class>
          </object>
        </results>
      </MethodCallResult>
    </MethodCallResponse>
  </soap:Body>
</soap:Envelope>

错误:

undefined method `class_eval' for "CLIENT":String

我使用的是ruby 1.8.7-p302。

1 个答案:

答案 0 :(得分:1)

你可能正在寻找像BlankState method这样的东西。我们的想法是为数据创建一个封装类,它取消定义一些与命名不佳的类型冲突的方法。