【问题标题】:Creating Soap messages with objectTypes using SUDS library in Robot Framework使用 Robot Framework 中的 SUDS 库创建带有 objectTypes 的 Soap 消息
【发布时间】:2016-06-01 11:31:58
【问题描述】:

我正在努力使用带有 SUDS 库的机器人框架来创建肥皂消息的这一部分。

<ns1:Request>
    <ns0:ID objectType="SomeType">Value</ns0:ID>
</ns1:Request>

如果我这样做,那么我得到了我需要的所有东西,但不是 objectType。

${object}=    Create Wsdl Object    ns19:RequestTypeSingle
Set Wsdl Object Attribute    ${object}    ID    1234

输出

  <ns1:Request>
    <ns0:ID>1234</ns0:ID>
  </ns1:Request>

如果我检查我的 ns19:RequestTypeSingle 想要什么,我会得到这个:

${object} = (RequestTypeSingle){
   ID = 
      (ID){
         _objectType = ""
      }
 }

“RequestTypeSingle”定义

<xs:complexType name="RequestTypeSingle">
 <xs:sequence>
  <xs:element minOccurs="1" maxOccurs="1" name="ID" nillable="true">
   <xs:complexType>
    <xs:simpleContent>
     <xs:extension base="xs:string">
      <xs:attribute name="objectType" type="xs:string"/>
     </xs:extension>
    </xs:simpleContent>
   </xs:complexType>
  </xs:element>
 </xs:sequence>
</xs:complexType>

那么我怎样才能用 SUDS 或其他方式声明这个 "(ID){_objectType = ""}?

感谢 ombre42,这可以像这样完成(回答第一个问题):

${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType

(继续问题)。 这不会像我在请求示例中提到的那样设置值。看起来这种语法会起作用,但它没有。关于这个有什么好主意吗?

这会报错:“ValueError: Object must be a WSDL object (suds.sudsobject.Object)。”

${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req}    ID    1234
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType

这将覆盖第一个 _objectType 定义。

${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType
Set Wsdl Object Attribute    ${req}    ID    1234

我所说的覆盖是指我明白了:

  <ns1:Request>
    <ns0:ID>1234</ns0:ID>
  </ns1:Request>

【问题讨论】:

    标签: soap robotframework suds


    【解决方案1】:

    当为表示为 XML 属性而不是元素的属性分配值时,请在名称前加上下划线(为什么是 _objectType 而不是 objectType)。

    ${req}=    Create WSDL Object    RequestTypeSingle    # may need namespace prefix here
    Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType
    

    【讨论】:

    • 没用。 “设置 Wsdl 对象属性 ${object} ID ${id}”将创建一个内部元素,这是不允许的。正如 RequestTypeSingle 定义的那样,我需要在一行中使用它。
    • 添加了“RequestTypeSingle”定义
    • ID 不是我怀疑的复杂类型。我已经相应地更新了我的答案。我能够通过获取您的模式摘录并将其包含在现有的 WSDL 中来测试解决方案。我能够生成一个看起来像您需要的请求。
    • 谢谢你。但仍然没有设置值。我更新了我的问题(继续问题),定义了我将 objectType 和 value 设置在一起的问题。我认为这不是“问题”。
    • 不知道你为什么接受这个。从我的研究看来,解决这个问题的唯一方法是使用消息插件或补丁 Suds。据我所知,使用 Suds 0.4 无法在同一元素上设置属性和元素文本。
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多