Wednesday, October 20, 2010

"XML-24500: (Error) Can not build schema" in JDeveloper 11g

Problem:

We migrated an ESB 10g project to Mediator 11g. What is strange is that this project works completely fine in the 10g world. However, when we try to make or deploy it in JDeveloper 11g, we receive the following error:

Buildfile: C:\jdeveloper\bin\ant-sca-compile.xml


scac:
[scac] Validating composite "C:\MyProject\composite.xml"
[scac] oracle.fabric.common.wsdl.XSDException: Global Type declaration/definition of name '{http://ns.ipnweb.com/MyApp/Organization/20090101}Organization' are duplicated at the following locations:
[scac]
[scac] file:/C:/MyProject/ContactWebService.svc_xsd_xsd9.xsd [line#: 6]
[scac] file:/C:/MyProject/AddressWebService.svc_xsd_xsd2.xsd [line#: 6]
[scac] There are at least two of them looking different:
[scac] file:/C:/MyProject/ContactWebService.svc_xsd_xsd9.xsd [difference starting at line#:17]
[scac] file:/C:/MyProject/AddressWebService.svc_xsd_xsd2.xsd [difference starting at line#:17]
[scac]
[scac] Global Type declaration/definition of name '{http://ns.ipnweb.com/MyApp/OrganizationEvent/20090101}OrganizationEvent' are duplicated at the following locations:
[scac]
[scac] file:/C:/MyProject/ContactWebService.svc_xsd_xsd10.xsd [line#: 11]
[scac] file:/C:/MyProject/AddressWebService.svc_xsd_xsd7.xsd [line#: 18]
[scac] There are at least two of them looking different:
[scac] file:/C:/MyProject/ContactWebService.svc_xsd_xsd10.xsd [difference starting at line#:12]
[scac] file:/C:/MyProject/AddressWebService.svc_xsd_xsd7.xsd [difference starting at line#:19]
[scac]
[scac]
[scac] at oracle.fabric.common.wsdl.SchemaBuilder.postProcessXSD(SchemaBuilder.java:330)
[scac] at oracle.fabric.common.wsdl.SchemaBuilder.loadAllSchemas(SchemaBuilder.java:210)
[scac] at oracle.fabric.common.wsdl.SchemaManager.loadAllXSD(SchemaManager.java:139)
[scac] at oracle.fabric.common.wsdl.SchemaManager.buildXDKSchema(SchemaManager.java:348)
[scac] at oracle.fabric.common.wsdl.SchemaManager.lookupSchema(SchemaManager.java:216)
[scac] at oracle.fabric.common.wsdl.SchemaManager.lookupXSDElementDeclaration(SchemaManager.java:399)
[scac] at oracle.soa.scac.WSDLValidator.validateMessageParts(WSDLValidator.java:112)
[scac] at oracle.soa.scac.WSDLValidator.validateMessages(WSDLValidator.java:88)
[scac] at oracle.soa.scac.WSDLValidator.validate(WSDLValidator.java:47)
[scac] at oracle.soa.scac.WSDLValidator.validate(WSDLValidator.java:40)
[scac] at oracle.soa.scac.ValidateComposite.loadWSDLs(ValidateComposite.java:1004)
[scac] at oracle.soa.scac.ValidateComposite.doValidation(ValidateComposite.java:568)
[scac] at oracle.soa.scac.ValidateComposite.run(ValidateComposite.java:156)
[scac] at oracle.soa.scac.ValidateComposite.main(ValidateComposite.java:141)
[scac]
[scac] <Line 2, Column 172>: XML-24500: (Error) Can not build schema 'http://ns.ipnweb.com/MyApp/Organization/20090101' located at 'http://ns.ipnweb.com/MyApp/Organization/20090101.__OAUX_GENXSD_.TOP.XSD'
[scac] <Line 2, Column 168>: XML-24500: (Error) Can not build schema 'http://ns.ipnweb.com/MyApp/DomainBase/20090101' located at 'http://ns.ipnweb.com/MyApp/DomainBase/20090101.__OAUX_GENXSD_.TOP.XSD'
[scac] <Line 3, Column 162>: XML-24500: (Error) Can not build schema 'http://ns.ipnweb.com/MyApp/Contact/20090101' located at 'http://ns.ipnweb.com/MyApp/Contact/20090101.__OAUX_GENXSD_.TOP.XSD'
[scac] <Line 106, Column 164>: XML-24528: (Error) Invalid reference: 'http://ns.ipnweb.com/MyApp/Organization/20090101:Organization'
[scac]
[scac] FATAL_ERROR: location {/ns:composite/ns:import[@location='file:/C:/MyProject/AddressWebService.svc_wsdl_wsdl0.wsdl']}: Load of wsdl "ContactWebService.svc.wsdl with Message part element undefined in wsdl [file:/C:/MyProject/AddressWebService.svc_wsdl_wsdl0.wsdl] part name = parameters type = {http://ns.ipnweb.com/MyApp/AddressWebService/20090101}DeleteAddressBookEntry" failed
[scac] FATAL_ERROR: location {/ns:composite/ns:import[@location='file:/C:/MyProject/ContactWebService.svc_wsdl_wsdl0.wsdl']}: Load of wsdl "ContactWebService.svc.wsdl with Message part element undefined in wsdl [file:/C:/MyProject/ContactWebService.svc_wsdl_wsdl0.wsdl] part name = parameters type = {http://ns.ipnweb.com/MyApp/ContactWebService/20090101}DeleteProfileContactResponse" failed
[scac] FATAL_ERROR: location {/ns:composite/ns:import[@location='file:/C:/MyProject/AddressWebService.svc.wsdl']}: Load of wsdl "ContactWebService.svc.wsdl with Message part element undefined in wsdl [file:/C:/MyProject/AddressWebService.svc_wsdl_wsdl0.wsdl] part name = parameters type = {http://ns.ipnweb.com/MyApp/AddressWebService/20090101}DeleteAddressBookEntry" failed
[scac] FATAL_ERROR: location {/ns:composite/ns:import[@location='file:/C:/MyProject/ContactWebService.svc.wsdl']}: Load of wsdl "ContactWebService.svc.wsdl with Message part element undefined in wsdl [file:/C:/MyProject/ContactWebService.svc_wsdl_wsdl0.wsdl] part name = parameters type = {http://ns.ipnweb.com/MyApp/ContactWebService/20090101}DeleteProfileContactResponse" failed
[scac] FATAL_ERROR: location {/ns:composite/ns:reference[@name='Address']}(17,74): Reference Address does not exist as wire target
[scac] FATAL_ERROR: location {/ns:composite/ns:reference[@name='Contact']}(25,74): Reference Contact does not exist as wire target


BUILD FAILED
C:\jdeveloper\bin\ant-sca-compile.xml:236: Java returned: 1 Check log file : C:\MyProject\SCA-INF\classes\scac.log for errors


Total time: 5 seconds
Investigation:

Oracle JDeveloper 10g is more liberal in its verification. In fact, our problem was the following.
  • Our JDeveloper 11g composite looks like this:
  • There are 2 external SOAP services, each having its own WSDL. For example:
http://external.ipnweb.org/Location/AddressWebService.svc?wsdl
http://external.ipnweb.org/Contact/ContactWebService.svc?wsdl
  • Observe the schema definition in each of the WSDLs. You will notice that the same namespace is used across both references, but related to different XSDs.
First WSDL
<xsd:schema targetNamespace="http://ns.ipnweb.com/MyApp/AddressWebService/20090101/Imports">
  <xsd:import schemaLocation="http://external.ipnweb.org/Location/AddressWebService.xsd" namespace="http://ns.ipnweb.com/MyApp/Contact/20090101"/>
  <xsd:import schemaLocation="http://external.ipnweb.org/Location/AddressWebService.xsd" namespace="http://ns.ipnweb.com/MyApp/AuditableDomainBase/20090101"/>
</xsd:schema>

Second WSDL
<xsd:schema targetNamespace="http://ns.ipnweb.com/MyApp/ContactWebService/20090101/Imports">
  <xsd:import schemaLocation="http://external.ipnweb.org/Contact/ContactWebService.xsd" namespace="http://ns.ipnweb.com/MyApp/Contact/20090101"/>
  <xsd:import schemaLocation="http://external.ipnweb.org/Contact/ContactWebService.xsd" namespace="http://ns.ipnweb.com/MyApp/Enums/20090101"/>
</xsd:schema>
  • When we open both the XSDs, we can see that the same element is defined identically, but the problem is, the annotations are defined in one of them, but not the other.
First XSD
<xs:complexType name="Organization">
  <xs:complexContent mixed="false">
    <xs:extension base="q1:DomainBase">
      <xs:sequence>
        <xs:element minOccurs="0" name="OrgId" nillable="true" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>

Second XSD
<xs:complexType name="Organization">
  <xs:annotation>
    <xs:appinfo>
      <Surrogate i:type="d1p1:Annotation"/>
    </xs:appinfo>
  </xs:annotation>
  <xs:complexContent mixed="false">
    <xs:extension base="q1:DomainBase">
      <xs:sequence>
        <xs:element minOccurs="0" name="OrgId" nillable="true" type="xs:string">
          <xs:annotation>
            <xs:appinfo>
              <Surrogate i:type="d1p1:Annotation"/>
            </xs:appinfo>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
The fact that the annotations are different is what is causing the XML-24500 error seen above.

Resolution:

Ensure that the XSDs are identical in terms of definition, including annotations.

References:

Ahmed Aboulnaga

1 comment:

Anonymous said...

Wow! Thanks a lot.. i got this problem and it helped me to solve! Thanks!