Skip to content

Problems with namespace selection #1463

Open

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?

Activity

  1. changed the title [-]Bug in namespace selection[/-] [+]Problems with namespace selection[/+] on Jun 4, 2025
  2. Lapeth commented on Mar 12, 2026

    @Lapeth

    Got the same issue here. In zeep/xsd/schema.py, we have Schema._create_prefix_map which populates the schema map based on the namespaces found in the documents. Except these are mapped to keys that are generated with a loop counter, not the keys that are specified in the documents. So zeep puts the namespaces in a dict with keys "ns0", "ns1", "ns2" etc.

    A workaround is to explicitly set namespaces in the map with the set_ns_prefix method.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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