Hi Sean, This is about the only way to handle validation in JiBX. Other data binding techniques which support validation generally do pretty much the same thing behind the scenes - serialize to byte stream or character stream/string, validate the byte/character stream. You might want to try using the Java 5 validation handling instead of Xerces, though - I suspect the Java 5 implementation would be more performant, though I haven't checked (so if you *do* try both, let us know how the performance compares!). Here's some sample code for using the Java 5 version:
import java.io.File; import java.io.IOException; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.w3c.dom.Document; import org.xml.sax.SAXException; /** * Schema validator using support added in JDK 1.5. */ public class Validate { public static void main(String[] args) { if (args.length < 2) { System.out.println("Usage: java Validate schema-file " + "inst-file1 inst-file2 ..."); return; } Validator validator; Document document; try { // create a SchemaFactory capable of understanding WXS schemas SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // create validator from schema instance Source schemaFile = new StreamSource(new File(args[0])); Schema schema = factory.newSchema(schemaFile); validator = schema.newValidator(); // validate all instance documents for (int i = 1; i < args.length; i++) { // parse input XML document into a DOM tree DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); document = parser.parse(new File(args[i])); // validate the DOM tree try { validator.validate(new DOMSource(document)); } catch (SAXException e) { System.err.println("Document validation error on " + args[i]); e.printStackTrace(); } catch (IOException e) { System.err.println("Error processing document"); e.printStackTrace(); } } } catch (Exception e) { System.err.println("Error in validation setup"); e.printStackTrace(); } } } - Dennis Dennis M. Sosnoski SOA and Web Services in Java Training and Consulting http://www.sosnoski.com - http://www.sosnoski.co.nz Seattle, WA +1-425-939-0576 - Wellington, NZ +64-4-298-6117 Sean Mickey wrote: > Hi marco - > Your need to validate the XML produced by JiBX does not mean that you *must* > use the schema generator, it just means that you have to create a schema that > matches the XML that will be produced by JiBX during marshalling. You could > certainly use the schema generator, but it is not necessary. We are using > existing classes (from the JiBX perspective) that are not generated from the > XML schema. > > We have the need for schema validation on our project, because our XML must > be sent over JMS, where it is received by an infrastructure process that > validates the structure of the XML before allowing it to continue through to > delivery for the JMS MessageConsumer. We looked for a way to automate the > schema validation within JiBX, but did not find anything that meets our > needs. Note that this is our first project with JiBX, so it is possible that > we missed something. > > We ended up creating a simple framework that contains 4 validation points, > because our messaging model is request-reply: > 1 Sender has Java Object -> JiBX marshall to XML -> Schema validation, if > good -> send JMS message with XML > 2 Framework receives JMS message -> obtains XML and performs schema > validation, if good -> JiBX unsmarshall -> Receiver is given Java Object > 3 Handler does necessary processing and creates a new Java Object -> JiBX > marshall to XML -> Schema validation, if good -> send JMS reply message with > XML > 4 Framework receives JMS reply message -> obtains XML and performs schema > validation, if good -> JiBX unmarshall -> Original sender from step 1 is > given reply Java Object > > We use Xerces 2.9.1 for all of the schema validation. I hope this is helpful - > Sean > > > -----Original Message----- > From: marco.mistr...@barclayscapital.com > [mailto:marco.mistr...@barclayscapital.com] > Sent: Thursday, January 08, 2009 5:09 AM > To: jibx-users@lists.sourceforge.net > Subject: [jibx-users] Validating XML against schema > > > Hi all, > I am currently using JIBX to unmarshal XML into java objects.. > > I need to validate the XML against a schema... > > Does that mean that I need to use schema generator to use my classes? > > What if I have existing classes (not being generated from the schema)? > > Thanks an dregards > marco > _______________________________________________ > > This e-mail may contain information that is confidential, privileged or > otherwise protected from disclosure. If you are not an intended recipient of > this e-mail, do not duplicate or redistribute it by any means. Please delete > it and any attachments and notify the sender that you have received it in > error. Unless specifically indicated, this e-mail is not an offer to buy or > sell or a solicitation to buy or sell any securities, investment products or > other financial product or service, an official confirmation of any > transaction, or an official statement of Barclays. Any views or opinions > presented are solely those of the author and do not necessarily represent > those of Barclays. This e-mail is subject to terms available at the following > link: www.barcap.com/emaildisclaimer. By messaging with Barclays you consent > to the foregoing. Barclays Capital is the investment banking division of > Barclays Bank PLC, a company registered in England (number 1026167) with its > registered offic > e at 1 Churchill Place, London, E14 5HP. This email may relate to or be > sent from other members of the Barclays Group. > _______________________________________________ > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > jibx-users mailing list > jibx-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jibx-users > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > jibx-users mailing list > jibx-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jibx-users > > ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ jibx-users mailing list jibx-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jibx-users