Hi Sypne Dev,

thanks for providing this amazing spyne lib.
I have got the subscription to http://lists.spyne.io/subscribe/people

I was using the lib for one of my tasks wherein I'm trying to parse a soap
envelope request having multiple namespaces including an attribute with the

See below xml soap envelope request :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
       <ns3:StatusNotification xmlns:ns3="http://some_url/notify";
           <ns3:status type="STARTED"
timestamp="2016-11-13T17:11:49.195+03:00" *ns3:executionId*="117336">

The problem here is for ns3 we have an element  <status> which has 3
attributes ( type, timestamp and *executionId) but the issue is in the xml
I am using has "**executionId" with prefix as "ns3:" ( **ns3:executionId*

Likewise spyne is not able to identify  *ns3:clientNotificationId="87654321"
because of the same prefix "ns3:".*

*I have used below code to parse it using sypne lib :*

class  NotificationType(ComplexModel):
    __namespace__ = 'http://some_url/notify'
    __metaclass__ = ComplexModelMeta

class GetStatusType(NotificationType):
    executionId = XmlAttribute(Integer)
    timestamp = XmlAttribute(DateTime)
    type = XmlAttribute(String(values=('CREATED', 'STARTED',

class GetclientNotificationId(NotificationType):
    __type_name__ = 'StatusNotification'

class ClientNotificationIdType(XmlAttribute):
   __namespace__ = 'http://some_url/notify'

class GetStatusNotification(NotificationType):
    clientNotificationId = ClientNotificationIdType(Unicode)
    status = GetStatusType

class GetFeedbackNotification(NotificationType):
    clientNotificationId = XmlAttribute(Unicode)


*spyne app:*

    app = Flask(__name__)
    nbi_spyne = Spyne(app)

    from spyne.model.primitive import Unicode, Integer
    from spyne.model.complex import Iterable

    class NBIService(nbi_spyne.Service):
        __service_url_path__ = '/test'
        __in_protocol__ = Soap11(validator='lxml')
        __in_protocol__ = Soap11()
        __out_protocol__ = Soap11()
        __target_namespace__ = 'http://some_url/notify'
        __wsdl_access__ = 'allow'  # 'no_access' to restrict the access of
wsdl and 'allow' to grant the access

        @nbi_spyne.rpc(GetStatusNotification, _returns=Integer,
                       _soap_body_style='rpc', _body_style='bare')
        def StatusNotification(context, request):
            logger.info("StatusNotification received with Status
            response = 200
            return response


*using this I expect below schema:*

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
      <not:StatusNotification clientNotificationId="?">
         <not:status timestamp="?" executionId="?" type="?"/>

*which doesn't include the prefix "ns3:".*

*If I remove the prefix "ns3:" from the attributes, my code works perfectly
and I get the attributes as expected.*

Please let me know is there any way to parse the attributes having
namespaces as prefix ( "ns3:" as here) or is it feasible to modify
handle_rpc parsing for such soap envelope requests

Looking forward for some valuable inputs from your side.

Spyne community mailing list

Reply via email to