Thursday, October 7, 2010

"Error: Load of wsdl X with Message part element undefined in wsdl"

When migrating an ESB 10g project to Mediator 11g, we experienced a rather unique issue. Our WSDLs were hosted outside of the project (this was not the problem), and they referenced our own custom artifacts that were deployed to the ~/AIAComponents folders, which in turn referenced AIA 2.4 specific artifacts.

Problem:
The ESB 10g project migrated successfully through JDeveloper 11g. When trying to 'make' the project, we received the following error:
Error: Load of wsdl "ProcessCustomerPartyTargetProvABCSImpl.wsdl with Message part element undefined in wsdl [file:/C:/SOA11g/Temp/ProcessCustomerPartyTargetProvABCSImpl/ProcessCustomerPartyTargetProvABCSImpl.wsdl] part name = UpdateCustomerParty    type = {http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/CustomerParty/V2}UpdateCustomerPartyEBM" failed
Our project WSDL appeared to be syntactically valid, with no issues with how our operations, messages, or elements were defined.

Solution:
This was our schema definition in our WSDL:
<types>
  <xsd:schema targetNamespace="http://xmlns.oracle.com/ABCSImpl/Project1/Core/AddressChange" elementFormDefault="qualified">
    <xsd:import namespace="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/CustomerParty/V2" schemaLocation="xsd/CustomerPartyEBM.xsd"/>
  </xsd:schema>
</types>
The short answer is to remove the following string from the WSDL file:
targetNamespace="http://xmlns.oracle.com/ABCSImpl/Project1/Core/AddressChange"
This target namespace is already declared in our <definitions> and it appears that the way 11g handles namespace references differs slightly from that of 10g as it tries to reference the element.

No comments: