2016-07-11 4 views
0

私は、ねじれとスピンのある小さなSOAP 1.1サーバーをセットアップしようとしていますが、カスタムタグ(本文)、名前空間、ヘッダーを作成する方法については何も見つかりません。独自のProtocolBaseを作成するよりも、これを行うための良い方法はありますか?私は以下に類似したXMLの文字列を渡しているため、自分のプロトコルを作成することで、私が探しているものを生成することができspyneのカスタムタグ

<?xml version="1.0"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cwmp="urn:dslforum-org:cwmp-1-2"> 
<SOAP-ENV:Header> 
    <cwmp:ID SOAP-ENV:mustUnderstand="1">123456789</cwmp:ID> 
</SOAP-ENV:Header> 
<SOAP-ENV:Body> 
    <cwmp:SetParameterValues> 
     <ParameterList SOAP-ENC:arrayType="cwmp:ParameterValueStruct[1]"> 
      <ParameterValueStruct> 
       <Name>MY.NAME</Name> 
       <Value xsi:type="xsd:unsignedInt">4000</Value> 
      </ParameterValueStruct> 
     </ParameterList> 
     <ParameterKey>Axess Update parameters</ParameterKey> 
    </cwmp:SetParameterValues> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

イム:

目標は、次のようになりSOAP応答を持つことです。

class spyne(ServiceBase): 
    isLeaf = TwistedWebResource 

    @rpc(AnyDict, AnyDict, _returns=Unicode) 
    def my_rpc(ctx, DeviceId, ParameterList): 

     out_document = etree.parse('data.xml') 

     return etree.tostring(out_document, pretty_print=True, 
             encoding='utf8', xml_declaration=False) 

class my_protocol(XmlDocument): 

    mime_type = 'text/xml; charset=utf-8' 
    type = set(XmlDocument.type) 
    type.update(('soap', 'soap11')) 

    def __init__(self, *args, **kwargs): 
     super(TR_069_SOAP, self).__init__(*args, **kwargs) 

    def serialize(self, ctx, message): 
     ctx.out_document = ctx.out_object[0] 

    def create_out_string(self, ctx, charset=None): 
     ctx.out_string = [ctx.out_document] 

これを行うより良い方法があるかどうかはわかりません。

+0

どのようなドキュメントを作成する必要がありますか?例がありますか?何を試しましたか?あなたが私に見せることができるコードですか? –

+0

@BurakArslan私はいくつかの追加情報で質問を更新しました。どんな助けもありがとう。 –

答えて

0

Spyneは、SOAP-ENC:arrayType="cwmp:ParameterValueStruct[1]"スタイルを使用してシリアル化配列をサポートしていません。

あなたがあなた自身のプロトコルを必要としませんが、あなたはSoap11XmlDocumentのcomplex_to_parentをオーバーライドして、アレイ(SomeType、array_typeに= 『CWMP:ParameterValueStruct [1]』)、たとえば、持っているアレイ用の特別な処理を追加する必要があります。

Spyne自体にパッチを当てて自分のプルリクエストを送信するか、Soap11サブクラス(XmlDocumentサブクラスではない)を作成し、そこでオーバーライドコードを書き込むことができます。

チャイムインのhttp://lists.spyne.io/listinfo/peopleいずれかの方法を進めたい場合。

関連する問題