It looks like the class/field mapping for the field CRITERIAID/class CRITERIAINPUT in your mapping file (assuming that you are using one) is incorrect. Or at least does not match the XML that's being parsed during unmarshalling.
Werner > -----Ursprüngliche Nachricht----- > Von: Saladin Sharif [mailto:[EMAIL PROTECTED] > Gesendet: Mittwoch, 14. März 2007 20:24 > An: [email protected] > Betreff: Re: AW: AW: [castor-user] How to do XSD validation when the code > was not generated by the Castor code generator > > > Stephen, > I tried your suggestion, but I get the following > error: > > org.xml.sax.SAXException: unable to find > FieldDescriptor for 'CRITERIAID' in ClassDescriptor of > CRITERIAINPUT > at > org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java: > 1924) > at > org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java: > 1362) > at > org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown > Source) > at > org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown > Source) > > > I followed the same steps that you outlined, except > for setting the xsd validation (i.e. specifing the > external-schema-location feature on the SAX parser). > I did not do that one step, as I wanted to make sure > that the Unmarshalling works with using the SAX parser > and the UnmarshalHandler before even trying to do any > XSD schema validation. > > The following is the code that I tried: > > > // load castor mapping file > Mapping map = new Mapping(); > map.loadMapping(mappingPath); > > // Create an instance of Castor's unmarshaller > Unmarshaller unmarshaller = new > Unmarshaller(RunDvpRequestVO.class); > unmarshaller.setMapping(map); > > // Create a Reader to the input file that is to be > unmarshalled from > Reader reader = new FileReader(inputFilePath); > > // Create content handler for Castor's Unmarshaller > UnmarshalHandler unmarshalHandler = > unmarshaller.createHandler(); > > XMLReader xmlReader = new > org.apache.xerces.parsers.SAXParser(); > > xmlReader.setContentHandler(unmarshalHandler); > xmlReader.setErrorHandler(unmarshalHandler); > xmlReader.parse(new InputSource(reader)); > > Object obj = unmarshalHandler.getObject(); > > > The exception gets thrown when the > xmlReader.parse(...) method is called. > > > Note: just to make sure that I was not getting the > error because of a problem with the input xml or the > Castor mapping file, I tried unmarshalling using > straight Castor unmarshalling code (see below) and it > works fine with any errors: > > > // load castor mapping file > Mapping map = new Mapping(); > map.loadMapping(mappingPath); > > // Create an instance of Castor's unmarshaller > Unmarshaller unmarshaller = new > Unmarshaller(RunDvpRequestVO.class); > unmarshaller.setMapping(map); > > > // Create a Reader to the input file to unmarshal from > Reader reader = new FileReader(inputFilePath); > > > // Unmarshall the input xml into a value object > RunDvpRequestVO runDvpRequest = (RunDvpRequestVO) > unmarshaller.unmarshal(reader); > > > > -Saladin > > > --- Werner Guttmann <[EMAIL PROTECTED]> wrote: > > > Actually, didn't know about this .. ;-). Which > > indicates that this > > should be documented somewhere ... e.g. XML HOW-TOs. > > And on top of that, > > maybe a setParser(SAXParser) method should be added > > to Unmarshaller. > > > > Werner > > > > Stephen Bash wrote: > > > Werner and Saladin- > > > > > > Sorry to jump in at the end here, but there might > > be an easy way > > > around this issue. If all you need is a custom > > configured parser you > > > can instantiate your own parser and have Castor > > use it: > > > > > > 1) Instantiate/configure a SAX parser (specify the > > > external-schema-location feature) > > > 2) Instantiate/configure an Unmarshaller instance > > > 3) Call createHandler() on the Unmarshaller object > > to get an > > > UnmarshalHandler which implements ContentHandler > > and ErrorHandler > > > 4) Set the parser's content handler to the > > UnmarshalHandler object > > > 5) Set the parser's error handler to the > > UnmarshalHandler object > > > 6) Parse the document > > > 7) Call getObject on the UnmarshalHandler to > > retrieve the root object > > > > > > Feel free to ignore me if I've completely missed > > the mark, but I hope > > > that helps. > > > > > > Stephen > > > > > > > > > On 3/14/07, Werner Guttmann > > <[EMAIL PROTECTED]> wrote: > > >> Okay, I don't think that what you want to achieve > > is possible without > > >> a small code change to the Unmarshaller. I just > > had a look at the JAXP > > >> API, and it looks like I have to provide you with > > an option to specify > > >> the > > >> > > >> > > > http://apache.org/xml/properties/schema/external-schemaLocation" > > >> > > >> feature of the JAXP Parser instance used > > internally by Castor. If this > > >> is an option for you, please create a new Jira > > issue at > > >> > > >> http://jira.codehaus.org/browse/CASTOR > > >> > > >> and attach the relevant fragments of this email > > conversation. > > >> > > >> Werner > > >> > > >> > -----Ursprüngliche Nachricht----- > > >> > Von: S. Sharif [mailto:[EMAIL PROTECTED] > > >> > Gesendet: Dienstag, 13. März 2007 21:00 > > >> > An: [email protected] > > >> > Betreff: Re: AW: AW: [castor-user] How to do > > XSD validation when the > > >> code > > >> > was not generated by the Castor code generator > > >> > > > >> > > > >> > Yes it has a namespace declaration. The > > following is > > >> > an example of how the input xml looks like: > > >> > > > >> > <?xml version="1.0" encoding="UTF-8"?> > > >> > <Document > > >> > > > xmlns="http://www.nproj.com/japps/AcceptRunRequest"> > > >> > <CRITERIAINPUT_LIST> > > >> > <CRITERIAINPUT> > > >> > <CRITERIAID>1</CRITERIAID> > > >> > </CRITERIAINPUT> > > >> > </CRITERIAINPUT_LIST> > > >> > > > >> > [ ... remaining xml was omitted for brevity > > ...] > > >> > > > >> > </Document> > > >> > > > >> > > > >> > In my project each Java service has one XSD > > schema > > >> > file for the input xml that it is expecting. > > So the > > >> > above is an example for one input xml for one > > >> > particular service. The input xml for the > > other Java > > >> > services have a very similar structure with the > > >> > namespace decalred in the root tag as in the > > example > > >> > above. > > >> > -Saladin > > >> > > > >> > --- Werner Guttmann <[EMAIL PROTECTED]> > > wrote: > > >> > > > >> > > Well, let's do a few things first. Can you > > show me > > >> > > what the XML that > > >> > > needs to be validated looks like ? Does it > > have > > >> > > namespace declarations, > > >> > > etc ? > > >> > > > > >> > > Werner > > >> > > > > >> > > S. Sharif wrote: > > >> > > > I am not sure I understand what you mean. > > Do you > > >> > > have > > >> > > > any basic or short code example that can > > give me > > >> > > the > > >> > > > basic idea of what you mean? > > >> > > > Thanks. > > >> > > > > > >> > > > > > >> > > > --- Werner Guttmann > > <[EMAIL PROTECTED]> > > >> > > > wrote: > > >> > > > > > >> > > >> You can always use an EntityResolver and > > repoint > > >> > > a > > >> > > >> request for a 'global' XML schema > > identifier to > > >> > > any > > >> > > >> file or InputSource convenient to you. > > >> > > >> > > >> > > >> Werner > > >> > > >> > > >> > > >>> -----Ursprüngliche Nachricht----- > > >> > > >>> Von: S. Sharif > > [mailto:[EMAIL PROTECTED] > > >> > > >>> Gesendet: Dienstag, 13. März 2007 17:27 > > >> > > >>> An: [email protected] > > >> > > >>> Betreff: Re: AW: [castor-user] How to do > > XSD > > >> > > >> validation when the code was > > >> > > >>> not generated by the Castor code > > generator > > >> > > >>> > > >> > > >>> > > >> > > >>> Thank for the link. But the problem is > > that in > > >> > > >> the > > >> > > >>> example it validates an xml document > > against the > > >> > > >> XSD > > >> > > >>> file specified in xsi:schemaLocation > > attribute > > >> > > of > > >> > > >> the > > >> > > >>> root xml tag. > > >> > > >>> > > >> > > >>> The xml documents that get submitted to > > my Java > > >> > > >>> service do not have the XSD > > schemaLocation > > >> > > >> attribute > > >> > > >>> specified. When I receive the XML > > document, my > > >> > > >> Java > > >> > > >>> code then needs to perform XSD validation > > based > > >> > > on > > >> > > >> a > > >> > > >>> predefined path for the XSD file. So I > > need to > > >> > > >> set > > >> > > >>> the XSD file location programmatically, > > if you > > >> > > >> know > > >> > > >>> what i mean. > > >> > > >>> > > >> > > >>> I mean I need to do something like this: > > >> > > >>> > > >> > > >>> > > >> > > >>> Mapping myMap = new Mapping(); > > >> > > >>> myMap.loadMapping( "po1Map.xml" ); > > >> > > >>> > > >> > > >>> Unmarshaller um1 = new Unmarshaller( > > myMap ); > > >> > > >>> > > >> > > > > um1.setSchemaLocation("http://www.example.com/PO1 > > >> > > >>> /project/schema/po1.xsd"); > > >> > > >>> PurchaseOrder po1 = > > >> > > >> (PurchaseOrder)um1.unmarshal(new > > >> > > >>> FileReader(filename)); > > >> > > >>> > > >> > > >>> > > >> > > >>> Note: this assumes that the xsd file > > po1.xsd is > > >> > > >>> located in the /project/schema/ folder. > > >> > > >>> > > >> > > >>> > > >> > > >>> The problem is that there is no > > >> > > >> setSchemaLocation() > > >> > > >>> method in the Unmarshaller class. So is > > there > > >> > > any > > >> > > >>> other way to do this? > > >> > > >>> > > >> > > >>> Thanks. > > >> > > >>> > > >> > > >>> > > >> > > >>> --- Werner Guttmann > > <[EMAIL PROTECTED]> > > >> > > >>> wrote: > > >> > > >>> > > >> > > > > > >> > > > > >> > > > > http://www.castor.org/how-to-enable-xml-validation.html > > >> > > >>>> should provide you with answers to your > > >> > > >> question. > > >> > > >>>> Werner > > >> > > >>>> > > >> > > >>>>> -----Ursprüngliche Nachricht----- > > >> > > >>>>> Von: S. Sharif > > [mailto:[EMAIL PROTECTED] > > >> > > >>>>> Gesendet: Dienstag, 13. März 2007 02:23 > > >> > > >>>>> An: [email protected] > > >> > > >>>>> Betreff: [castor-user] How to do XSD > > >> > > >> validation > > >> > > >>>> when the code was not > > >> > > >>>>> generated by the Castor code generator > > >> > > >>>>> > > >> > > >>>>> > > >> > > >>>>> Hi, > > >> > > >>>>> > > >> > > >>>>> I am not using the Castor code > > generator to > > >> > > >>>> generate > > >> > > >>>>> my Java classes. Instead I have my own > > java > > >> > > >>>> classes > > >> > > >>>>> that I am marshalling and unmarshalling > > >> > > >> to/from > > >> > > >>>> them > > >> > > >>>>> using a Castor mapping file. > > >> > > >>>>> > > >> > > >>>>> But now I am faced with the problem of > > how to > > >> > > >>>> perform > > >> > > >>>>> the XSD validation. I know that the > > Castor > > >> > > >> code > > >> > > >>>>> generator generates each Java class > > with the > > >> > > >>>> following > > >> > > >>>>> code: > > >> > > >>>>> > > >> > > >>>>> /** > > >> > > >>>>> * > > >> > > >>>>> * > > >> > > >>>>> * @throws > > >> > > >>>> > > org.exolab.castor.xml.ValidationException > > >> > > >>>>> if this > > >> > > >>>>> * object is an invalid instance > > according to > > >> > > >> the > > >> > > >>>>> schema > > >> > > >>>>> */ > > >> > > >>>>> public void validate() > > >> > > >>>>> throws > > >> > > >> org.exolab.castor.xml.ValidationException > > { > > >> > > >>>>> org.exolab.castor.xml.Validator > > validator > > >> > > >> = > > >> > > >>>> new > > >> > > >>>>> org.exolab.castor.xml.Validator(); > > >> > > >>>>> validator.validate(this); > > >> > > >>>>> } > > >> > > >>>>> > > >> > > >>>>> > > >> > > >>>>> and that this code performs the XSD > > validation > > >> > > >> on > > >> > > >>>> the > > >> > > >>>>> Java object using the ClassDescriptors > > and > > >> > > >>>>> FieldDescriptors that were generated > > for that > > >> > > >>>> object. > > >> > > >>>>> But now how do I perform XSD validation > > when I > > >> > > >>>> have my > > >> > > >>>>> own Java classes (that were not > > generated by > > >> > > >>>> Castor). > > >> > > >>>>> Is there some Castor API that I can > > call and > > >> > > >> pass > > >> > > >>>> to > > >> > > >>>>> it the path to the XSD file, the Java > > object > > >> > > >> that > > >> > > >>>> I > > >> > > >>>>> want to validate, and also the Castor > > mapping > > >> > > >>>> file, > > >> > > >>>>> and then it performs the validation? > > >> > > >>>>> Or how should I go about doing this? > > >> > > >>>>> > > >> > > >>>>> Thanks. > > >> > > >>>>> > > >> > > >>>>> -Saladin > > >> > > >>>>> > > >> > > >>>>> > > >> > > >>>>> > > >> > > > > > >> > > > > >> > > > > ********************************************************** > > >> > > >>>>> * Saladin Sharif > > >> > > >>>>> * e-mail: [EMAIL PROTECTED] > > >> > > >>>>> * Visit homepage @ > > >> > > >>>> http://gaia.ecs.csus.edu/~sharifs > > >> > > > > > >> > > > > >> > > > > ********************************************************** > > >> > > >>>>> > > >> > > >>>>> > > >> > > >>>>> > > >> > > > > > >> > > > > >> > > > >> > > > __________________________________________________________________________ > > >> > > >> > > >>>>> __________ > > >> > > >>>>> Don't pick lemons. > > >> > > >>>>> See all the new 2007 cars at Yahoo! > > Autos. > > >> > > >>>>> http://autos.yahoo.com/new_cars.html > > >> > > >>>>> > > >> > > >>>>> > > >> > > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > >>>>> To unsubscribe from this list please > > visit: > > >> > > >>>>> > > >> > > >>>>> > > http://xircles.codehaus.org/manage_email > > >> > > >>>> > > >> > > >>>> > > >> > > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > >>>> To unsubscribe from this list please > > visit: > > >> > > >>>> > > >> > > >>>> > > http://xircles.codehaus.org/manage_email > > >> > > >>>> > > >> > > >>>> > > >> > > >>> > > >> > > >>> > > >> > > >>> > > >> > > >>> > > >> > > > > > >> > > > > >> > > > >> > > > __________________________________________________________________________ > > >> > > >> > > >>> __________ > > >> > > >>> Expecting? Get great news right away with > > email > > >> > > >> Auto-Check. > > >> > > >>> Try the Yahoo! Mail Beta. > > >> > > >>> > > >> > > > > > >> > > > > >> > > > > http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html > > >> > > >>> > > >> > > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > >>> To unsubscribe from this list please > > visit: > > >> > > >>> > > >> > > >>> > > http://xircles.codehaus.org/manage_email > > >> > > >> > > >> > > >> > > >> > > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > >> To unsubscribe from this list please > > visit: > > >> > > >> > > >> > > >> > > http://xircles.codehaus.org/manage_email > > >> > > >> > > >> > > >> > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > > __________________________________________________________________________ > > >> > > >> > __________ > > >> > > > Finding fabulous fares is fun. > > >> > > > Let Yahoo! FareChase search your favorite > > travel > > >> > > sites to find flight and hotel bargains. > > >> > > > > > http://farechase.yahoo.com/promo-generic-14795097 > > >> > > > > > >> > > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > > To unsubscribe from this list please visit: > > >> > > > > > >> > > > > > http://xircles.codehaus.org/manage_email > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > > > --------------------------------------------------------------------- > > >> > > To unsubscribe from this list please visit: > > >> > > > > >> > > http://xircles.codehaus.org/manage_email > > >> > > > > >> > > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > __________________________________________________________________________ > > >> > > >> > __________ > > >> > The fish are biting. > > >> > Get more visitors on your site using Yahoo! > > Search Marketing. > > >> > > > > http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php > > >> > > > >> > > > > --------------------------------------------------------------------- > > >> > To unsubscribe from this list please visit: > > >> > > > >> > http://xircles.codehaus.org/manage_email > > >> > > >> > > >> > > > --------------------------------------------------------------------- > > >> To unsubscribe from this list please visit: > > >> > > >> http://xircles.codehaus.org/manage_email > > >> > > >> > > > > > > > --------------------------------------------------------------------- > > To unsubscribe from this list please visit: > > > > http://xircles.codehaus.org/manage_email > > > > > > > ********************************************************** > * Saladin Sharif > * e-mail: [EMAIL PROTECTED] > * Visit homepage @ http://gaia.ecs.csus.edu/~sharifs > ********************************************************** > > > > __________________________________________________________________________ > __________ > Don't get soaked. Take a quick peek at the forecast > with the Yahoo! Search weather shortcut. > http://tools.search.yahoo.com/shortcuts/#loc_weather > > --------------------------------------------------------------------- > To unsubscribe from this list please visit: > > http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email

