Handling Multiple Namespaces in SOAP Payloads in Oracle Integration Cloud (OIC)
Use Case
When integrating with SOAP-based APIs in OIC, the payload sometimes requires elements from different namespaces within the same request.
For example, a SOAP login request may contain:
MessageId
,ReplyAddress
, andTimestamp
(from a Common namespace)UserName
andPassword
(from an API-specific namespace)
If the WSDL does not define these elements properly, OIC generates an incorrect SOAP request, causing deserialization errors such as:
CASDK-0033: Received a SOAP fault while invoking endpoint target...
The formatter threw an exception while trying to deserialize the message:
'Element 'UserName' from namespace ... is not expected.
Expecting element 'MessageId'.
Problem
The SOAP request requires two different namespaces for different elements:
- Namespace A →
MessageId
,ReplyAddress
,Timestamp
- Namespace B →
UserName
,Password
If the WSDL only defines one namespace, OIC incorrectly generates the payload, mixing up the expected prefixes.
Solution Steps
Step 1: Define a Schema for MessageId
Create a schema (.xsd
) for the Common namespace elements:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.mv90xiApi.com/Common/2022/5"
elementFormDefault="qualified">
<xs:element name="MessageId" type="xs:string"/>
<xs:element name="ReplyAddress" type="xs:string"/>
<xs:element name="Timestamp" type="xs:string"/>
</xs:schema>
Step 2: Import Schema into WSDL
In your WSDL, import the schema so OIC can resolve the namespace correctly:
<xs:import namespace="http://www.mv90xiApi.com/Common/2022/5"/>
Then, instead of defining MessageId
inline, reference it:
<xs:element ref="common:MessageId"/>
Step 3: Fix UserName and Password Namespace
Update the WSDL for the AuthRequestMessage
.
Originally it might look like this (incorrect namespace usage):
<xs:complexType name="AuthRequestMessage">
<xs:complexContent mixed="false">
<xs:extension base="tns:RequestMessage" xmlns="http://www.mv90xiApi.com/Common/2022/5">
<xs:sequence>
<xs:element name="UserName" nillable="true" type="xs:string"/>
<xs:element name="Password" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Change it to explicitly use the API namespace:
<xs:complexType name="AuthRequestMessage">
<xs:complexContent mixed="false">
<xs:extension base="tns:RequestMessage" xmlns="http://www.mv90xiApi.com/api/2022/5">
<xs:sequence>
<xs:element name="UserName" nillable="true" type="xs:string"/>
<xs:element name="Password" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Step 4: Validate Final Payload
After modifying the WSDL, OIC generates the correct SOAP request with both namespaces:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns="http://www.mv90xiApi.com/api/2022/5"
xmlns:ns1="http://www.mv90xiApi.com/Common/2022/5">
<soap:Header/>
<soap:Body>
<ns:Login>
<ns:message>
<ns1:MessageId>12345</ns1:MessageId>
<ns1:ReplyAddress>http://reply.com</ns1:ReplyAddress>
<ns1:Timestamp>2025-09-03T10:00:00</ns1:Timestamp>
<ns:UserName>user</ns:UserName>
<ns:Password>pwd</ns:Password>
</ns:message>
</ns:Login>
</soap:Body>
</soap:Envelope>
✅ Benefits of This Approach
- Resolves namespace conflicts between common elements and authentication fields.
- Ensures SOAP payload matches the service contract.
- Avoids CASDK-0033 deserialization errors in OIC.
👉 Reference: Oracle Docs – Working with SOAP Integrations
No comments:
Post a Comment