Converting from using scomp to SchemaTypeLoader.parse(...)
badger mailinglist <[email protected]> Tue, 8 Jan 2013 15:42:32 +0000
| Newsgroups | gmane.text.xml.xmlbeans.user |
|---|---|
| Message-ID | <CAF7=Xdig-MvO=Z_GJJ358B9WGsg2zH_=AyypGvUUh8J21RsZKw@mail.gmail.com> |
--f46d04462c4c4946b204d2c8cb79
Content-Type: text/plain; charset=ISO-8859-1
Hi,
Currently, I take some XSDs (see below for example), generate classes for
them (with scomp -out generatedClasses.jar testschema.xsd), then use those
classes in code with some like:
final XmlObject instance =
TestSchemaDocument.Factory.newInstance(xmlOptions);
This process now needs to be a bit more dynamic, so I'm trying to use
something more like the following:
final SchemaTypeLoader loader =
XmlBeans.typeLoaderForClassLoader(SchemaDocument.class.getClassLoader());
XmlOptions xmlOptions = new XmlOptions();
final XmlObject fileParsedInstance = loader.parse(new
File("C:\\testschema.xsd"), null, new XmlOptions());
However, I would expect the XmlObject returned in both cases to be the
same. However, if I recursively iterate through the properties of these two
objects, I get different results i.e. calling
instance.schemaType().getProperties() gets different results in each of the
cases.
For the instance loaded from the class the getProperties() method returns
one element with type 'TestSchema', which itself returns one element with
type 'TestType' and so on as you recur.
For the instance loaded directly from the xsd file the properties are all
things like E=restriction|D=restriction@http://www.w3.org/2001/XMLSchema,
which has a property T=localSimpleType@http://www.w3.org/2001/XMLSchema,
which has a property 'restriction' and so on infinitely.
I've assumed that these two methods of loading the schema would do the same
thing, but it looks like I'm wrong, can someone point me at the method call
I need to make to load from the file properly? I'm using XmlBeans 2.5.0.
Thanks!
Example xsd I'm testing this with:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="TestSchema" type="TestType" />
<xs:complexType name="TestComplexType">
<xs:sequence>
<xs:element type="xs:string" name="thing" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="TestType">
<xs:sequence>
<xs:element type="TestComplexType" name="TestComplex"
maxOccurs="unbounded" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
--f46d04462c4c4946b204d2c8cb79
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hi,<br><br>Currently, I take some XSDs (see below for example), generate cl=
asses for them (with scomp -out generatedClasses.jar testschema.xsd), then =
use those classes in code with some like:<br>final XmlObject instance =3D T=
estSchemaDocument.Factory.newInstance(xmlOptions);<br>
<br>This process now needs to be a bit more dynamic, so I'm trying to u=
se something more like the following:<br><br>final SchemaTypeLoader loader =
=3D XmlBeans.typeLoaderForClassLoader(SchemaDocument.class.getClassLoader()=
);<br>
XmlOptions xmlOptions =3D new XmlOptions();<br>final XmlObject fileParsedIn=
stance =3D loader.parse(new File("C:\\testschema.xsd"), null, new=
XmlOptions());<br><br><br>However, I would expect the XmlObject returned i=
n both cases to be the same. However, if I recursively iterate through the =
properties of these two objects, I get different results i.e. calling insta=
nce.schemaType().getProperties() gets different results in each of the case=
s.<br>
For the instance loaded from the class the getProperties() method returns o=
ne element with type 'TestSchema', which itself returns one element=
with type 'TestType' and so on as you recur.<br>For the instance l=
oaded directly from the xsd file the properties are all things like E=3Dres=
triction|D=3Drestriction@<a href=3D"http://www.w3.org/2001/XMLSchema">http:=
//www.w3.org/2001/XMLSchema</a>, which has a property T=3DlocalSimpleType@<=
a href=3D"http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchem=
a</a>, which has a property 'restriction' and so on infinitely.<br>
<br>I've assumed that these two methods of loading the schema would do =
the same thing, but it looks like I'm wrong, can someone point me at th=
e method call I need to make to load from the file properly? I'm using =
XmlBeans 2.5.0.<br>
<br>Thanks!<br><br><br>Example xsd I'm testing this with:<br><br><?x=
ml version=3D"1.0" encoding=3D"utf-8"?><br><xs:sc=
hema attributeFormDefault=3D"unqualified" elementFormDefault=3D&q=
uot;qualified" xmlns:xs=3D"<a href=3D"http://www.w3.org/2001/XMLS=
chema">http://www.w3.org/2001/XMLSchema</a>"><br>
<br>=A0 <xs:element name=3D"TestSchema" type=3D"TestType&=
quot; /><br>=A0 <br>=A0 <xs:complexType name=3D"TestComplexType&=
quot;><br>=A0=A0=A0 <xs:sequence><br>=A0=A0=A0=A0=A0 <xs:elemen=
t type=3D"xs:string" name=3D"thing" /><br>
=A0=A0=A0 </xs:sequence><br>=A0 </xs:complexType><br>=A0 <br>=
=A0 <xs:complexType name=3D"TestType"><br>=A0=A0=A0 <xs:=
sequence><br>=A0=A0=A0=A0=A0 <xs:element type=3D"TestComplexType=
" name=3D"TestComplex"<br>
=A0=A0=A0=A0=A0 maxOccurs=3D"unbounded" minOccurs=3D"0"=
/><br>=A0=A0=A0 </xs:sequence><br>=A0 </xs:complexType><br>=
=A0 <br></xs:schema><br><br>
--f46d04462c4c4946b204d2c8cb79--