Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / June 2006

Tip: Looking for answers? Try searching our database.

XmlBeans problem

Thread view: 
orb_at_cts_dot_com@fastmail.co.uk - 10 Jun 2006 09:39 GMT
Folks,
can you suggest a way around this feature of XmlBeans?
I have have two XML Schema, furniture_table.xsd and
html_table.xsd (see below) that both define a root
element "table".
Scomp was used to make two JARS, one for unmarshalling
html_table XML instance docs, and another for unmarshalling
furniture_table XML instance docs.
When I try to unmarshal my HTML table, the furniture table
Types get in the way.  The HTML JAR must be in the
java execution CLASSPATH *before* the furniture JAR,
otherwise I get a message
org.apache.xmlbeans.XmlException: XML object is not of type D=table
I assume this is because when XmlBeans looks up what class is bound
to <table> it finds html.HTMLTableDocument if HTML_TABLE.jar
is first and furniture.FURNTableDocument if
FURNITURE_TABLE.jar is first.
Any suggestions on how to avoid this CLASSPATH dependency?
Thanks for reading
Max
APPENDIX 1.  My source code...
   public void test()
   {
       try
       {
           System.out.println("Test is beginning...");
           HTMLTableDocument htmlTable =
HTMLTableDocument.Factory.parse(new
File("C:/Temp/XmlBeansBug/html_table.xml"));
           System.out.println("Parsed OK.");
       }
       catch( Exception e )
       {
           e.printStackTrace();
       }
       finally
       {
           System.out.println("Test is finished!");
       }
APPENDIX 2.  The result of running my code
Test is beginning...
org.apache.xmlbeans.XmlException: XML object is not of type D=table
at
org.apache.xmlbeans.impl.store.Root.autoTypedDocument(Root.java:436)
at org.apache.xmlbeans.impl.store.Root.loadXml(Root.java:1038)
at org.apache.xmlbeans.impl.store.Root.loadXml(Root.java:1022)
at
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:322)
at
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:233)
at html.HTMLTableDocument$Factory.parse(HTMLTableDocument.java:208)
at TestXmlBeans.test(TestXmlBeans.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
at java.lang.reflect.Method.invoke(Method.java:391)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
Test is finished!
APPENDIX 3.  My XSDs
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="table">
 <xs:annotation>
  <xs:documentation>HTML table</xs:documentation>
 </xs:annotation>
 <xs:complexType>
  <xs:sequence>
   <xs:element name="row" minOccurs="1" maxOccurs="256" >
    <xs:complexType>
     <xs:sequence>
      <xs:element name="cell" type="xs:string" minOccurs="1"
maxOccurs="256"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="table">
 <xs:annotation>
  <xs:documentation>this is an HTML table</xs:documentation>
 </xs:annotation>
 <xs:complexType>
  <xs:sequence>
   <xs:element name="leg" minOccurs="1" maxOccurs="4"
type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>
</xs:schema>
APPENDIX 4.  XML instance doc
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:\Temp\XmlBeansBug\html_table.xsd">
<row>
 <cell>Kaczynski </cell>
 <cell>Nichols</cell>
</row>
<row>
 <cell>Moussaoui<html_table.xsdconfig/cell>
 <cell>Yousef</cell>
</row>
</table>
APPENDIX 5.  My xsdconfig files...
<?xml version="1.0" encoding="UTF-8"?>
<xb:config
xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace uri="##any">
  <xb:package>html</xb:package>
<xb:prefix>HTML</xb:prefix>
</xb:namespace>
</xb:config>
<?xml version="1.0" encoding="UTF-8"?>
<xb:config
xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace uri="##any">
  <xb:package>furniture</xb:package>
<xb:prefix>FURN</xb:prefix>
</xb:namespace>
</xb:config>
APPENDIX 6  My BAT file
SET SCOMP_JARS=%XMLBEANS_HOME%\lib\jsr173_1.0_api.jar
SET SCOMP_JARS=%SCOMP_JARS%;%XMLBEANS_HOME%\lib\xmlpublic.jar
SET SCOMP_JARS=%SCOMP_JARS%;%XMLBEANS_HOME%\lib\xbean.jar
SET SCOMP_JARS=%SCOMP_JARS%;%XMLBEANS_HOME%\lib\resolver.jar
SET SCOMP_JARS=%SCOMP_JARS%;%XMLBEANS_HOME%\lib\xbean_xpath.jar
SET SCOMP_JARS=%SCOMP_JARS%;.
SET DEST_DIR=lib
REM %XMLBEANS_HOME%\bin\scomp -cp %SCOMP_JARS% -out
%DEST_DIR%\HTML_TABLE.jar -debug html_table.xsd  html_table.xsdconfig
%XMLBEANS_HOME%\bin\scomp -cp %SCOMP_JARS% -out
%DEST_DIR%\FURNITURE_TABLE.jar -debug furniture_table.xsd
furniture_table.xsdconfig
alex - 22 Jun 2006 11:29 GMT
As I see, you have specified a different package name for each schema
while generating the JARs. So there cannot be any problems with
uniqueness of the class names.
If you use HTMLTableDocument.Factory.parse() XMLBeans should use the
class HTMLTable for the element table.
Did you try to load files outside of JUnit? I had such a problem using
JUnit too. JUnit uses per default the own ClassLoader which make
problems in conjunction with XMLBeans. When I tried the console option
"-noloading" while starting the TestRunner, this problem disappeared.

Mit Gruss,
Alex


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.