Spyne:Spyne:XML / XSD架构验证

时间:2017-08-05 02:26:08

标签: python soap xsd-validation spyne

我的测试spyne soap服务器监听发送肥皂请求的客户端:

<EventMessage>
   <Header>
      <Timestamp>2016-01-12T18:22:58.1909735-02:00</Timestamp>
   </Header>
   <MainData>
      <Events>
         <InfoEvent>
            <createdDateTime>2016-01-12T18:22:58.1909735-02:00</createdDateTime>
            <Credential>
               <Names>
                  <name>Bruce Wayne</name>
               </Names>
            </Credential>
            <Details>
               <name>Travel to europe</name>
               <value>Five hundred Euros</value>
            </Details>
            <EventCode ref="323.243.1327.524"/>
         </InfoEvent>
      </Events>
   </MainData>
</EventMessage>

我正在尝试创建验证架构,但我无法将“ ComplexModel ”插入另一个“ ComplexModel

如何在“凭据”,“ Infoevent ”和“活动”中添加标记“名称”?

我正在尝试:

class InfoEvent(ComplexModel):
     createdDateTime = String
    #InfoEvent =  Array(Events, wrapped=False)

class Events(ComplexModel):
    InfoEvent =  Array(InfoEvent, wrapped=False)

class Header(ComplexModel):
    Timestamp = String

class EventMessage(ComplexModel):
    __namespace__ = 'http://iec.ch/TC57/2011/schema/message'

    Header = Header
    MainData = Array(Events, wrapped=False)

但结果是:

  <xs:complexType name="Header">
    <xs:sequence>
      <xs:element name="Timestamp" type="xs:string" minOccurs="0" nillable="true"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="InfoEvent">
    <xs:sequence>
      <xs:element name="createdDateTime" type="xs:string" minOccurs="0" nillable="true"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Events">
    <xs:sequence>
      <xs:element name="InfoEvent" type="tns:InfoEvent" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="Header" type="tns:Header"/>
  <xs:element name="InfoEvent" type="tns:InfoEvent"/>
  <xs:element name="Events" type="tns:Events"/>

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

在您的服务中,尝试将多态= True添加到出站协议。

app = Application([service],
                  'whatever.whatever',
                  in_protocol=Soap11(validator='lxml'),
                  out_protocol=Soap11(polymorphic=True)
                 )