-
-
Notifications
You must be signed in to change notification settings - Fork 605
Open
Description
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
Labels
No labels