As far as I remember, there was plans to add an option (by the means of a setter) to the Unmarshaller implementing exactly this behaviour you are asking for. I honestly would not know whether this little initiative has been implemented fully or not.
Werner Saladin Sharif wrote: > Sorry for resurrecting this issue from 6 weeks ago. I > tried the suggestion that Stephen gave to me for doing > XSD validation on an input XML using the Castor XML > Mapping method: > > 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 > > > so the code looks something like this: > > UnmarshalHandler unmarshalHandler = > unmarshaller.createHandler(); > > // Set the parser's content handler to the > // UnmarshalHandler object > xmlReader.setContentHandler(unmarshalHandler); > > // Set the parser's error handler to the > // UnmarshalHandler object > xmlReader.setErrorHandler(unmarshalHandler); > > // Parse the xml document > xmlReader.parse(inputSource); > > > This solution has worked for me. The only problem is > that on my project we have a requirement to show all > XSD validation errors for an input XML. The problem > with Castor's Unmarshaller handler is that it only > reports the first XSD validation error. So for > example, if an XML document fails because of 3 > different XSD validation errors, then Castor's > Unmarshaller error handler only shows the first XSD > validation error. > > Is there an easy way around this? How can I get it to > give me all the XSD validation errors? > > Thanks. > > -Saladin > > > --- Stephen Bash <[EMAIL PROTECTED]> 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 >>> >>> > > > > > ____________________________________________________________________________________ > TV dinner still cooling? > Check out "Tonight's Picks" on Yahoo! TV. > http://tv.yahoo.com/ > > --------------------------------------------------------------------- > 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

