Hi Jeff,
Do you need any more attention from the Castor developers on this matter? I think you forget the URL to the whitepaper. Also on the second point (xsi:type using Schema type instead of Java class type), I checked in a fix to the CVS, it should work for you, at least it works on your test case. Thanks, --Keith Jeff Norris wrote: > > I have determined the source of the error. The problem is that I have installed > castor as a java extension (the jar file is symlinked in the jdk/jre/lib/ext/ > directory), and I would bet money that you have it on your classpath. Java > extensions use the ExtClassLoader by default, which unfortunately does not have > access to the application classpath. This is not a security issue-- it is in my > opinion an unfortunate by-product of some design decisions made by Sun. > > This issue is discussed in detail in the following white paper: > > /** > * [EMAIL PROTECTED] (818) 354-5472 > * http://robotics.jpl.nasa.gov/people/jnorris/ > */ > > > -----Original Message----- > > From: Keith Visco [mailto:[EMAIL PROTECTED]] > > Sent: Monday, January 14, 2002 7:33 PM > > To: [EMAIL PROTECTED] > > Subject: Re: [castor-dev] BUG: Castor fails to find class for > > xsi:type="java:MyClass" - Example included. > > > > > > > > Hi Jeff, > > > > I just ran your test case, and it appears fine for me. The output I get > > is: > > > > BugTest > > Beginning test #1 > > Test 1 suceeded. > > Beginning test #2 > > Test 2 suceeded. > > > > > > I am using the CVS version. I don't think any changes have gone into the > > CVS that would affect this issue, but you might want to try it. > > > > If not, it sounds to me like it could be a CLASSPATH issue. Are you > > running inside of a Servlet or App server engine? > > > > I will still look into the second issue: xsi:type="java:ChildType" > > instead of xsi:type="childType" > > > > Thanks, > > > > --Keith > > > > > > Jeff Norris wrote: > > > > > > First, I continue to be amazed by Castor. It is truly a first-rate > > product and > > > has saved my development staff countless hours. I have taken the time to > > > carefully write a detailed bug report and include a test program because I > > > appreciate Castor so much and want to see it continue to improve. On to the > > > bug... > > > > > > Castor 0.9.3.9 is not able to locate the class for a derived type > > that has been > > > specified in an XML file with xsi:type="java:fully.qualified.ClassName" and > > > throws a ClassNotFoundException. This occurs even when the file being > > > unmarshalled was originally written by Castor. Note that I *AM* > > including the > > > "java:" prefix and am specifing the fully qualified class name of > > the desired > > > derived type. > > > > > > I have constructed a simple schema, xml file, and test program which will > > > illustrate the problem. Note that I am using the "type" method in > > the source > > > generator - if you use the "element" method then you will have to slightly > > > modify BugTest.java. > > > > > > ***** THE SCHEMA (bugtest.xsd): > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> > > > <xs:element name="root"> > > > <xs:complexType> > > > <xs:sequence> > > > <xs:element name="foo" type="parentType"/> > > > </xs:sequence> > > > </xs:complexType> > > > </xs:element> > > > <xs:complexType name="parentType"> > > > <xs:sequence> > > > <xs:element name="a" type="xs:int"/> > > > </xs:sequence> > > > </xs:complexType> > > > <xs:complexType name="childType"> > > > <xs:complexContent> > > > <xs:extension base="parentType"> > > > <xs:sequence> > > > <xs:element name="b" type="xs:int"/> > > > </xs:sequence> > > > </xs:extension> > > > </xs:complexContent> > > > </xs:complexType> > > > </xs:schema> > > > > > > ***** THE XML FILE (bugtest.xml): > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > xsi:noNamespaceSchemaLocation="bugtest.xsd"> > > > <foo xsi:type="java:ChildType"> > > > <a>0</a> > > > <b>1</b> > > > </foo> > > > </root> > > > > > > ***** THE TEST PROGRAM (BugTest.java): > > > > > > import java.io.*; > > > > > > public class BugTest > > > { > > > public static void main (String[] args) > > > { > > > try { > > > // TEST 1 - attempt to unmarshal a hand-written xml file that > > > // contains a derived element. > > > System.out.println("Beginning test #1"); > > > FileReader reader = new FileReader("bugtest.xml"); > > > Root root = Root.unmarshalRoot(reader); > > > System.out.println("Test 1 suceeded."); > > > } catch (Exception e) { > > > System.out.println("Test 1 failed."); > > > e.printStackTrace(); > > > } // end of try-catch > > > > > > try { > > > // TEST 2 - attempt to marshal and unmarshal an xml file with > > > // a derived element > > > System.out.println("Beginning test #2"); > > > Root root = new Root(); > > > root.setFoo(new ChildType()); > > > ((ChildType)root.getFoo()).setA(1); > > > ((ChildType)root.getFoo()).setB(2); > > > FileWriter writer = new FileWriter("bugtest2.xml"); > > > root.marshal(writer); > > > FileReader reader = new FileReader("bugtest2.xml"); > > > root = Root.unmarshalRoot(reader); > > > System.out.println("Test 2 suceeded."); > > > } catch (Exception e) { > > > System.out.println("Test 2 failed."); > > > e.printStackTrace(); > > > } // end of try-catch > > > > > > } // end of main () > > > } > > > > > > ***** OUTPUT FROM THE TEST PROGRAM: > > > > > > > java BugTest > > > Beginning test #1 > > > Test 1 failed. > > > org.xml.sax.SAXException: unable to instantiate ChildType; > > > java.lang.ClassNotFoundException: ChildType > > > at > > > > > org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:957) > > > at > > org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1335) > > > at > > > > > org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLV > > alidator.j > > > ava:823) > > > at > > > > > org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocument > > Scanner.ja > > > va:1852) > > > at > > > > > org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispa > > tch(XMLDoc > > > umentScanner.java:1233) > > > at > > > > > org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentSc > > anner.java > > > :380) > > > at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:900) > > > at > > org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:338) > > > at > > org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:270) > > > at > > org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:391) > > > at Root.unmarshalRoot(Root.java:173) > > > at BugTest.main(BugTest.java:10) > > > Beginning test #2 > > > Test 2 failed. > > > org.xml.sax.SAXException: unable to instantiate ChildType; > > > java.lang.ClassNotFoundException: ChildType > > > at > > > > > org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:957) > > > at > > org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1335) > > > ... etc, same as above > > > > > > ***** XML FILE WRITTEN DURING TEST #2: > > > > > > For reference, here is bugtest2.xml, which is the xml file written by Castor > > > during test #2: > > > > > > <?xml version="1.0"?> > > > <root><foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > xsi:type="java:ChildType"><a>1</a><b>2</b></foo></root> > > > > > > Note that the xsi:type tag is exactly the same as it was in the hand-written > > > bugtest.xml above. > > > > > > As a side note, It would be fantastic if Castor were able to handle derived > > > types without the "java:" prefix in the xsi:type attribute. Castor-written > > > documents with derived types can't be loaded into any commercial > > xml editor (IE, > > > XMLSpy) since they don't recongnize the "java:" prefix. > > > > > > Jeff > > > > > > /** > > > * [EMAIL PROTECTED] > > > * http://robotics.jpl.nasa.gov/people/jnorris/ > > > */ > > > > > > ----------------------------------------------------------- > > > If you wish to unsubscribe from this mailing, send mail to > > > [EMAIL PROTECTED] with a subject of: > > > unsubscribe castor-dev > > > > ----------------------------------------------------------- > > If you wish to unsubscribe from this mailing, send mail to > > [EMAIL PROTECTED] with a subject of: > > unsubscribe castor-dev > > > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-dev ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
