2016-07-11 5 views
0

꼬인 spyne가있는 작은 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> 

임 :

목표는 다음과 같이 비누 응답을하는 것입니다.

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에 전화를 겁니다.