Skip to content

Problems with namespace selection #1463

@s2bjni

Description

@s2bjni

Use case

We have a WSDL, which has "document types". These document types have different structures, but different document types can have same top level elements tags with different namespaces. We have a pydantic BaseModel adapter which is used to create the dictionary and then will be used with zeep.

class Payload(_pydantic.BaseModel):
    MasterDataContractEventMessage: Union[MasterDataContractEventMessageCls_F04, MasterDataContractEventMessageCls_F06, MasterDataContractEventMessageCls_F18, MasterDataContractEventMessageCls_F27, None]

This is converted to dictionary and when creating the XML, it should create one these elements defined in the WSDL:

<urn11:MasterDataContractEventMessage wsu:Id="?">
    <urn11:MasterDataContractEvent>
        ...
    </urn11:MasterDataContractEvent>
</urn11:MasterDataContractEventMessage>

<urn13:MasterDataContractEventMessage wsu:Id="?">
    <urn13:MasterDataContractEvent>
        ...
    </urn13:MasterDataContractEvent>
</urn13:MasterDataContractEventMessage>

<urn15:MasterDataContractEventMessage wsu:Id="?">
    <urn15:MasterDataContractEvent>
        ...
    </urn15:MasterDataContractEvent>
</urn15:MasterDataContractEventMessage>

Problem/Bug

Creating the XML results this, which means that the top level element type for MasterDataContractMessage is chosen from wrong namespace:

<urn11:MasterDataContractEventMessage>
    <urn13:MasterDataContractEvent>
        ...
    </urn13:MasterDataContractEvent>
</urn11:MasterDataContractEventMessage>

Defining the correct namespace with correct element type leads to this:

<ns0:MasterDataContractEventMessage xmlns:ns0="urn:fi:Datahub:mif:masterdata:F04_MasterDataContractEvent:v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="urn13:MasterDataContractEventMessage_Type">
    <urn13:MasterDataContractEvent>
    </urn13:MasterDataContractEvent>
</ns0:MasterDataContractEventMessage>

The WSDL has the schema as:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rsm="urn:fi:Datahub:mif:test:ProcessMessageRequestMessage:v1" xmlns:abie="urn:fi:Datahub:mif:common:v1"  targetNamespace="urn:fi:Datahub:mif:test:ProcessMessageRequestMessage:v1" 
 xmlns:F04="urn:fi:Datahub:mif:masterdata:F04_MasterDataContractEvent:v1"
 xmlns:F06="urn:fi:Datahub:mif:masterdata:F06_MasterDataContractEvent:v1"
 xmlns:F18="urn:fi:Datahub:mif:masterdata:F18_MasterDataContractEvent:v1"
 elementFormDefault="qualified" attributeFormDefault="unqualified"  version="2.4.0.0">

<xs:import namespace="urn:fi:Datahub:mif:masterdata:F04_MasterDataContractEvent:v1"   schemaLocation="../../masterdata/F04_MasterDataContractEvent.xsd"/>
<xs:import namespace="urn:fi:Datahub:mif:masterdata:F06_MasterDataContractEvent:v1"   schemaLocation="../../masterdata/F06_MasterDataContractEvent.xsd"/>
<xs:import namespace="urn:fi:Datahub:mif:masterdata:F18_MasterDataContractEvent:v1"   schemaLocation="../../masterdata/F18_MasterDataContractEvent.xsd"/>

<xs:complexType name="ProcessMessageRequestMessage_Type">
  <xs:choice maxOccurs="1">
    <xs:element  ref="F04:MasterDataContractEventMessage" minOccurs="1" maxOccurs="1"/>
    <xs:element  ref="F06:MasterDataContractEventMessage" minOccurs="1" maxOccurs="1"/>
    <xs:element  ref="F18:MasterDataContractEventMessage" minOccurs="1" maxOccurs="1"/>
  </xs:choice>
</xs:complexType>

Is this a bug or would there be something we could do?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions