【问题标题】:Python Spyne - SOAP Server - This element is not expected. Expected is ( {http:// } Element_name )Python Spyne - SOAP 服务器 - 不需要此元素。预期为 ( {http://} Element_name )
【发布时间】:2013-09-13 12:57:15
【问题描述】:

我收到一个错误该元素不是预期的。

Expected is {http://com.blablabla.fbs.webservice.receiver/webservice}Sms_1 ).

我不明白它是什么,这是我试图修复它的另一天。

请提供一些提示或建议,以帮助我解决问题。

发送的XML

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body>
<ns1:ReceiveSms xmlns:ns1='http://com.blablabla.fbs.webservice.receiver/webservice'>
<Sms_1><id>1231231231</id><from>124214124</from><operator>test</operator><to>482414245</to>
<text>Hallo</text><numberOfParts>1</numberOfParts></Sms_1></ns1:ReceiveSms></env:Body></env:Envelope> 

错误信息

senv:Client.SchemaValidationError<string>:3:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element 'Sms_1': This element is not expected. Expected is ( {http://com.blablabla.fbs.webservice.receiver/webservice}Sms_1 ).

代码:

class sms(ComplexModel):
    _type_info = {
        "text": Unicode,
        'from': Unicode,
        "id": Long,
        "operator": Unicode,
        "to": Unicode,
        "numberOfParts": Integer,
    }


class ReceiverService(ServiceBase):

    @srpc(Array(sms), _returns=Unicode)
    def ReceiveSms(Sms_1):
        for data in Sms_1:
            test = data.get_deserialization_instance()
            print test.operator
        return Sms_1

application = Application([ReceiverService],
    tns='http://com.blablabla.fbs.webservice.receiver/webservice',
    name="ReceiverService",
    in_protocol=Soap11(validator="lxml"),
    out_protocol=Soap11()
    )

hello_app = csrf_exempt(DjangoApplication(application))

【问题讨论】:

    标签: python django soap wsdl spyne


    【解决方案1】:

    您的请求文件有误。你不见了

    1. Sms_1 标记中的命名空间前缀。
    2. 对象定义中的命名空间声明。

    这是正确的对象声明:

    class sms(ComplexModel):
        __namespace__ = 'http://com.blablabla.fbs.webservice.receiver/webservice'
        _type_info = {
            "text": Unicode,
            'from': Unicode,
            "id": Long,
            "operator": Unicode,
            "to": Unicode,
            "numberOfParts": Integer,
        }
    

    这是一个固定的请求文件:

    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
      <env:Body>
        <ns1:ReceiveSms xmlns:ns1="http://com.blablabla.fbs.webservice.receiver/webservice">
          <ns1:Sms_1>
            <ns1:id>1231231231</ns1:id>
            <ns1:from>124214124</ns1:from>
            <ns1:operator>test</ns1:operator>
            <ns1:to>482414245</ns1:to>
            <ns1:text>Hallo</ns1:text>
            <ns1:numberOfParts>1</ns1:numberOfParts>
          </ns1:Sms_1>
        </ns1:ReceiveSms>
      </env:Body>
    </env:Envelope>
    

    【讨论】:

    • 它看起来很棒 :) 我会在星期一检查它
    • 嘿,服务器是否可以像我之前的请求那样接受没有 ns1 的标签?
    • 这是一个无效的请求,所以 libxml 验证器不会接受它。 'soft' 验证器会接受它,因此即使我强烈反对将其用于 Xml 文档,您也可以尝试使用它。
    猜你喜欢
    • 2015-07-07
    • 2012-05-13
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多