Hi,
I have a problem with an xml file based on a schema with a type that is
imported from another schema. I think that the problem it's into the
schemaLocation parameter on the define method.


Of course if I use the value null for both the schemaLocation, like:

           XSDHelper.INSTANCE.define(baseXsd, null);
           XSDHelper.INSTANCE.define(sampleXsd, null);

then I receive a

FeatureNotFoundException: Feature 'baseElement' not found. (http:///temp.xml,
4, 18)

exception when loading the xml document.


If I specify the schemaLocation option like this:

           XSDHelper.INSTANCE.define(baseXsd, "
http://www.example.org/BaseSchema";);
           XSDHelper.INSTANCE.define(sampleXsd, null);

then I have a

java.lang.IllegalArgumentException:
org.apache.tuscany.sdo.util.resource.SDOXMLResourceImpl

without further explanations.


Many thanks in advance
Emiliano


The Java code:

           //base.xsd
           //Schema with only a type definition
           InputStream baseXsd = Thread.currentThread()
                   .getContextClassLoader().getResourceAsStream(
                           "base.xsd");

           //sample.xsd
           //Schema that import the type definition from the other xsd
           InputStream sampleXsd = Thread.currentThread()
                   .getContextClassLoader().getResourceAsStream(
                           "sample.xsd");

           //sample.xml
           //document conform to the sample.xsd
           InputStream sampleXml = Thread.currentThread()
                   .getContextClassLoader().getResourceAsStream(
                           "sample.xml");

           //Load the Schemas
           XSDHelper.INSTANCE.define(baseXsd, "
http://www.example.org/BaseSchema";);
           XSDHelper.INSTANCE.define(sampleXsd, null);
           System.out.println("-------------->>> Schemas read");

           //Load xml
           XMLDocument xDoc = XMLHelper.INSTANCE.load(sampleXml);
           System.out.println("-------------->>> Xml read");


The base.xsd source:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="
http://www.example.org/BaseSchema"; xmlns:base="
http://www.example.org/BaseSchema"; >
   <complexType name="baseType">
       <sequence>
           <element name="baseElement" type="string" minOccurs="1"
maxOccurs="1"/>
       </sequence>
   </complexType>
</schema>


The sample.xsd source:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="
http://www.example.org/SampleSchema"; xmlns:sample="
http://www.example.org/SampleSchema"; xmlns:base="
http://www.example.org/BaseSchema";>
   <import namespace="http://www.example.org/BaseSchema"; schemaLocation="
base.xsd"/>
   <complexType name="sampleType">
       <sequence>
            <element name="sampleElement" type="base:baseType"></element>
       </sequence>
   </complexType>
   <element name="myElement" type="sample:sampleType"></element>
</schema>


The sample.xml source:

<?xml version="1.0" encoding="UTF-8"?>
<sample:myElement xmlns:base="http://www.example.org/BaseSchema";
xmlns:sample="http://www.example.org/SampleSchema"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="
http://www.example.org/SampleSchema sample.xsd
http://www.example.org/BaseSchema base.xsd ">
 <sampleElement>
   <baseElement>this is my content</baseElement>
 </sampleElement>
</sample:myElement>

Reply via email to