Hi:

If I convert  a xml  to sdo which stand for a xsd's global element;
The Tuscany SDO always ask for me to using string , and cannot using
DOMSource.
If I using DOMSource, the Tuscany cannot aware to the xml element's type, so
the converted SDO's type is not correct, it will always be ANYTYPE; 
        This means I must convert DOM to String first, then convert String
to SDO, this waste performance;

I illustrate the bug , using following code, schema and xml:

Schema: targetNamespace="http://test/sometype";
<xs:element name="st1E" type="ns:ST1"/>
<xs:complexType name="ST1">
        <xs:sequence>
                <xs:element name="a1" type="xs:string"/>
        </xs:sequence>
</xs:complexType>

XML: defined by the global element {http://test/sometype}st1E
<st1E xmlns="http://test/sometype";><a1>test</a1></st1E>

The Source code:
        //the global element's xml
        String xml="<st1E
xmlns=\"http://test/sometype\";><a1>test</a1></st1E>"; 
        DataObject o = context.getXMLHelper().load(xml).getDataObject();
        //loading string as SDO is correctly, so the assert is passed;
        assertTrue(o.getType().getURI().equals(xsd_namespace));


        //here I using DocumentBuilder to convert string to w3c Element;
        Element e = DOMUtil.string2DOM(xml) 
        DataObject o = context.getXMLHelper().load(new DOMSource(e), null,
null).getDataObject();
        //loaded SDO's type is AnyType, not the schema defined type; so the
assertion will failure;
        Try{assertTrue(o.getType().getURI().equals(xsd_namespace));
}catch(){}
        
        //finally  I convert the Element back to string and reload it using
xml helper , the sdo is also correctly;
        String s1 = DOMUtil.dom2String(e);//here I using a xsl transformer
to convert element back to string;
        DataObject o = context.getXMLHelper().load(xml).getDataObject();

        //re-loading string as SDO is also correctly, so the assert is
passed;
        assertTrue(o.getType().getURI().equals(xsd_namespace));




Reply via email to