Ich versuche, einen kleinen SOAP 1.1-Server mit twisted und Spyne einzurichten, aber ich kann anscheinend nichts finden, wie benutzerdefinierte Tags (Body), Namespaces oder Header für meine Antworten zu erstellen. Gibt es einen besseren Weg dies zu tun, als eine eigene ProtocolBase zu erstellen?Benutzerdefinierte Tags mit Spyne
Das Ziel ist, Seife Antworten zu haben, die wie folgt aussehen:
<?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>
Im fähig, zu produzieren, was ich suche mein eigenes Protokoll zu schaffen, für die ich eine Reihe von XML ähnlich wie unter der Hand.
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]
Ich bin mir nicht sicher, ob es einen besseren Weg gibt, dies zu tun.
Welches Dokument müssen Sie erstellen? Hast du ein Beispiel? Was hast du versucht? Irgendwelchen Code kannst du mir zeigen? –
@BurakArslan Ich aktualisierte meine Frage mit einigen zusätzlichen Informationen. Jede Hilfe wäre willkommen. –