I don't think it is a problem with the class/field
mapping in the mapping file. As I mentioned in my
previous e-mail from yesterday: 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 NO 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);
The code above works fine, and there is no errors. So
obviously the class/field mapping must be correct. It
must be a problem with using the UnmarshalHandler with
the SAX praser. In my case I was using the Xerces SAX
parser.
-Saladin
--- Werner Guttmann <[EMAIL PROTECTED]>
wrote:
> 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
>
>
____________________________________________________________________________________
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