Maybe your string xml is not right,it should include "<?xml version="1.0" 
encoding="UTF-8"?>" element.




At 2010-12-13 14:30:52,ext2 <[email protected]> wrote:

>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