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?
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.
This is converted to dictionary and when creating the XML, it should create one these elements defined in the WSDL:
Problem/Bug
Creating the XML results this, which means that the top level element type for MasterDataContractMessage is chosen from wrong namespace:
Defining the correct namespace with correct element type leads to this:
The WSDL has the schema as:
Is this a bug or would there be something we could do?