Sophie

Sophie

distrib > Mageia > 2 > i586 > by-pkgid > 810230cc82a9e066bb26dbfa2e6e043f > files > 30

castor-doc-1.3.2-1.mga2.noarch.rpm

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>How to use XML validation with Castor</title><link href="default.css" rel="stylesheet"></head><body marginwidth="0" marginheight="0" leftmargin="0" bottommargin="0" topmargin="0" vlink="#6763a9" link="#6763a9" bgcolor="#ffffff"><a name="top"></a><table height="400" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2" align="left" valign="top" width="10"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td bgcolor="#7270c2" align="left" valign="top" width="150"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="7"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" width="70"><img border="0" height="6" width="70" src="images/dotTrans.gif"></td><td align="left" valign="top" width="100%"><img border="0" height="6" width="100%" src="images/top_2.gif"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="10"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="150"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#ffffff" width="7"></td><td align="left" valign="top" width="70"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="middle" width="100%"><a href="license.html"><span class="menuTopOff">License</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.codehaus.org"><span class="menuTopOff">Codehaus</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://openejb.org"><span class="menuTopOff">OpenEJB</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://openjms.sf.net"><span class="menuTopOff">OpenJMS</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://openorb.sf.net"><span class="menuTopOn">OpenORB</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://tyrex.sf.net"><span class="menuTopOff">Tyrex</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="10"><img border="0" height="3" width="10" src="images/dotTrans.gif"></td><td align="right" valign="top" bgcolor="#7270c2" width="150"><img border="0" height="3" width="105" src="images/line_sm.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="3" width="7" src="images/line_sm.gif"></td><td align="left" valign="top" width="70"><img border="0" height="3" width="70" src="images/line_light.gif"></td><td align="left" valign="top" width="100%"><img border="0" height="3" width="100%" src="images/line_light.gif"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2"><img border="0" height="10" width="10" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="150"><img border="0" height="2" width="1" src="images/dotTrans.gif"><br><table cellspacing="0" cellpadding="10" border="0"><tr><td><script src="http://www.ohloh.net/p/3635/widgets/project_users_logo.js" type="text/javascript"></script></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Old releases</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="releases-old.html"><span class="subMenuOff">General</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://www.castor.org/1.3/index.html"><span class="subMenuOff">Release 1.3</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://www.castor.org/1.3rc1/index.html"><span class="subMenuOff">Release 1.3rc1</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://www.castor.org/1.2/index.html"><span class="subMenuOff">Release 1.2</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Main</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="index.html"><span class="subMenuOff">Home</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="about.html"><span class="subMenuOff">About</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="features.html"><span class="subMenuOff">Features</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="download.html"><span class="subMenuOff">Download</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="dependencies.html"><span class="subMenuOff">Dependencies</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="reference-guide.html"><span class="subMenuOffHighlighted">Reference guide</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="presentations.html"><span class="subMenuOff">Publications</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="javadoc/overview-summary.html"><span class="subMenuOff">JavaDoc</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="maven-integration.html"><span class="subMenuOff">Maven 2 support</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="maven-archetypes.html"><span class="subMenuOff">Maven 2 archetypes</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="schema.html"><span class="subMenuOff">DTD &amp; Schemas</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="changes.html"><span class="subMenuOff">Recent HTML changes</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="news.html"><span class="subMenuOff">News Archive</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://castor.codehaus.org/rss/castor-announce.xml"><span class="subMenuOff">RSS news feed</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://docs.codehaus.org/display/CASTOR/"><span class="subMenuOffHighlighted">Project Wiki</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Development/Support</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="lists.html"><span class="subMenuOff">Mailing Lists</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="scm.html"><span class="subMenuOff">SVN/JIRA</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="contributing.html"><span class="subMenuOff">Contributing</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="support.html"><span class="subMenuOff">Support</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://bamboo.ci.codehaus.org/browse/CASTOR"><span class="subMenuOff">Continuous builds</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="professional-services.html"><span class="subMenuOffHighlighted">Prof. services</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Related projects</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="spring-orm-integration.html"><span class="subMenuOff">Spring ORM support</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="spring-xml-intro.html"><span class="subMenuOff">Spring XML factories</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ws-integration.html"><span class="subMenuOff">WS frameworks</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">XML</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="xml-link.html"><span class="subMenuOff">XML</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">XML Code Generator</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="srcgen-link.html"><span class="subMenuOff">XML Code Generator</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">JDO</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-introduction.html"><span class="subMenuOff">Introduction</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-starter-tutorial.html"><span class="subMenuOff">First steps</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo.html"><span class="subMenuOff">Using JDO</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-database-conf.html"><span class="subMenuOff">JDO Config</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="types.html"><span class="subMenuOff">Types</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-mapping.html"><span class="subMenuOff">JDO Mapping</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-faq.html"><span class="subMenuOff">JDO FAQ</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-examples.html"><span class="subMenuOff">JDO Examples</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-howto.html"><span class="subMenuOffHighlighted">JDO HOW-TOs</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-tips-tricks.html"><span class="subMenuOffHighlighted">Tips &amp; Tricks</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-other-features.html"><span class="subMenuOff">Other Features</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-self-executable-examples.html"><span class="subMenuOff">JDO sample JAR</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Tools</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="schemaGen-anttask.html"><span class="subMenuOff">Schema generator</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Advanced JDO</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-caching-detail.html"><span class="subMenuOff">Caching</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="oql.html"><span class="subMenuOff">OQL</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="locking.html"><span class="subMenuOff">Trans. &amp; Locks</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="design-persist.html"><span class="subMenuOff">Design</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="key-generator.html"><span class="subMenuOff">KeyGen</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="long-transact.html"><span class="subMenuOff">Long Trans.</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="nested-attr.html"><span class="subMenuOff">Nested Attrs.</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-pooling.html"><span class="subMenuOff">Pooling Examples</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="postgresql-blobs.html"><span class="subMenuOff">LOBs</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="jdo-best-practice.html"><span class="subMenuOff">Best practice</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">DDL Generator</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ddlgen.html"><span class="subMenuOff">Using DDL Generator</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ddlgen-properties.html"><span class="subMenuOff">Properties</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ddlgen-anttask.html"><span class="subMenuOff">Ant task</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ddlgen-mapping.html"><span class="subMenuOff">Type Mapping</span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">More</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="examples.html"><span class="subMenuOff">The Examples</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="extras.html"><span class="subMenuOff">3rd Party Tools</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="test-framework.html"><span class="subMenuOff">JDO Tests</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="ctf.html"><span class="subMenuOff">XML Tests</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="conf-lib.html"><span class="subMenuOff">Configuration</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href=""><span class="subMenuOff"></span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="http://www.java.net/"><span class="subMenuOff"><img border="0" src="images/javanet_button_90.gif"></span></a></td></tr></table><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">About</span></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="license.html"><span class="subMenuOff">License</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="user-experience.html"><span class="subMenuOffHighlighted">User stories</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="contributors.html"><span class="subMenuOff">Contributors</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="marketplace.html"><span class="subMenuOff">Marketplace</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="status.html"><span class="subMenuOff">Status, Todo</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="release-notes.html"><span class="subMenuOff">Changelog</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="library.html"><span class="subMenuOff">Library</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="contacts.html"><span class="subMenuOff">Contact</span></a></td></tr><tr><td align="left" valign="top">
        &nbsp;
                <a href="origins.html"><span class="subMenuOff">Project Name</span></a></td></tr></table><br></td><td align="left" valign="top" bgcolor="#a9a5de" width="7">&nbsp;</td><td align="left" valign="top" width="70">&nbsp;</td><td valign="top" width="100%" rowspan="4"><table width="100%" cellspacing="0" cellpadding="0" border="0" rows="2" cols="2"><tr><td align="left" valign="top"><br><img width="115" vspace="0" src="images/castor.gif" hspace="0" height="34" border="0"><br><img src="images/dotTrans.gif" hspace="0" height="10" border="0"></td><td align="right" valign="top" height="5" width="120"></td></tr></table><p></p><p></p><br><h2 align="center">How to use XML validation with Castor</h2><HR size="1"><span class="bodyGrey"><b><a href="#Intended-Audience">Intended Audience</a></b><br></span><span class="bodyGrey"><b><a href="#Prerequisites">Prerequisites</a></b><br></span><span class="bodyGrey"><b><a href="#XML-Schema-and-document-instances">XML Schema and document instances</a></b><br></span><span class="bodyGrey"><b><a href="#Java-entities">Java entities</a></b><br></span><span class="bodyGrey"><b><a href="#Mapping-file">Mapping file</a></b><br></span><span class="bodyGrey"><b><a href="#Java-code-to-test-XML-validation">Java code to test XML validation</a></b><br></span><span class="bodyGrey"><b><a href="#References">References</a></b><br></span><HR size="1"><br><a name="Intended-Audience"><h2>Intended Audience</h2></a>

        <p><span class="bodyGrey">Anyone who wants to enable XML validation with Castor XML.</span></p>
        
        <p><span class="bodyGrey">This document helps people to get familiar with the basic concepts
        and discusses some implementation details.</span></p>

        <p><span class="bodyGrey">The example given describes the steps required to enble XML validation 
           with Castor XML.</span></p>
        
    <a name="Prerequisites"><h2>Prerequisites</h2></a>

        <p><span class="bodyGrey">None.</span></p>

        <p><span class="bodyGrey">The code given are based on examples from the XML Schema Part 0: Primer 
           Second Edition from <a href="http://www.w3.org/TR/xmlschema-0/#NS">w3.org</a>.</span></p>

    <a name="XML-Schema-and-document-instances"><h2>XML Schema and document instances</h2></a>

        <p><span class="bodyGrey">The XML Schema instance (<tt>po1.xsd</tt>) used here looks as follows:</span></p>

        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
&lt;schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:po="http://www.example.com/PO1"
        targetNamespace="http://www.example.com/PO1"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"&gt;

   &lt;element name="purchaseOrder" type="po:PurchaseOrderType"/&gt;
   &lt;element name="comment" type="string"/&gt;

   &lt;complexType name="PurchaseOrderType"&gt;
      &lt;sequence&gt;
         &lt;element name="shipTo" type="po:USAddress"/&gt;
         &lt;element name="billTo" type="po:USAddress"/&gt;
         &lt;element ref="po:comment" minOccurs="0"/&gt;
         &lt;!-- etc. --&gt;
      &lt;/sequence&gt;
      &lt;!-- etc. --&gt;
   &lt;/complexType&gt;

   &lt;complexType name="USAddress"&gt;
      &lt;sequence&gt;
         &lt;element name="name" type="string"/&gt;
         &lt;element name="street" type="string"/&gt;
         &lt;!-- etc. --&gt;
      &lt;/sequence&gt;
   &lt;/complexType&gt;

   &lt;!-- etc. --&gt;
&lt;/schema&gt;</pre></span></td></tr></table></td></tr></table><p></p>

        <p><span class="bodyGrey">Surprisingly, the schema isn't complete, so the example XML document 
           <tt>invalid-po1.xml</tt> is actually invalid.</span></p>
           
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
&lt;?xml version="1.0"?&gt;
&lt;apo:purchaseOrder
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.example.com/PO1 po1.xsd"
   xmlns:apo="http://www.example.com/PO1" 
   orderDate="1999-10-20"&gt;

   &lt;apo:shipTo country="US"&gt;
      &lt;apo:name&gt;Alice Smith&lt;/apo:name&gt;
      &lt;apo:street&gt;123 Maple Street&lt;/apo:street&gt;
      &lt;!-- etc. --&gt;
   &lt;/apo:shipTo&gt;

   &lt;apo:billTo country="US"&gt;
      &lt;apo:name&gt;Robert Smith&lt;/apo:name&gt;
      &lt;apo:street&gt;8 Oak Avenue&lt;/apo:street&gt;
      &lt;!-- etc. --&gt;
   &lt;/apo:billTo&gt;

   &lt;apo:comment&gt;Hurry, my lawn is going wild&lt;/apo:comment&gt;

   &lt;!-- etc. --&gt;
&lt;/apo:purchaseOrder&gt;</pre></span></td></tr></table></td></tr></table><p></p>

        <p><span class="bodyGrey">I then corrected the errors (removed the attributes that they didn't
           bother to define in their schema) and created <tt>valid-po1.xml</tt></span></p>
           
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
&lt;?xml version="1.0"?&gt;
&lt;apo:purchaseOrder
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.example.com/PO1 po1.xsd"
   xmlns:apo="http://www.example.com/PO1"&gt;

   &lt;apo:shipTo&gt;
      &lt;apo:name&gt;Alice Smith&lt;/apo:name&gt;
      &lt;apo:street&gt;123 Maple Street&lt;/apo:street&gt;
      &lt;!-- etc. --&gt;
   &lt;/apo:shipTo&gt;

   &lt;apo:billTo&gt;
      &lt;apo:name&gt;Robert Smith&lt;/apo:name&gt;
      &lt;apo:street&gt;8 Oak Avenue&lt;/apo:street&gt;
      &lt;!-- etc. --&gt;
   &lt;/apo:billTo&gt;

   &lt;apo:comment&gt;Hurry, my lawn is going wild&lt;/apo:comment&gt;

   &lt;!-- etc. --&gt;
&lt;/apo:purchaseOrder&gt;</pre></span></td></tr></table></td></tr></table><p></p>
                              
    <a name="Java-entities"><h2>Java entities</h2></a>
        
        <p><span class="bodyGrey">Now, to bring Castor into the mix, I created two Java classes, 
           <tt>PurchaseOrder</tt> and <tt>Address</tt>.</span></p>
           
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
public class PurchaseOrder {
   public Address shipTo;
   public Address billTo;
   public String comment;
}

public class Address {
   public String name;
   public String street;
}
        </pre></span></td></tr></table></td></tr></table><p></p>
    <a name="Mapping-file"><h2>Mapping file</h2></a>
        
        <p><span class="bodyGrey">And created a mapping file from the xml to the Java classes.</span></p>
        
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
&lt;?xml version="1.0"?&gt;
&lt;mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://castor.exolab.org/"
         xmlns:apo="http://www.example.com/PO1"
         xsi:schemaLocation="http://castor.exolab.org/ mapping.xsd"&gt;

   &lt;class name="PurchaseOrder"&gt;
      &lt;map-to xml="purchaseOrder" ns-uri="http://www.example.com/PO1"/&gt;
      &lt;field name="shipTo" type="Address" direct="true"&gt;
         &lt;bind-xml name="apo:shipTo" /&gt;
      &lt;/field&gt;
      &lt;field name="billTo" type="Address" direct="true"&gt;
         &lt;bind-xml name="apo:billTo" /&gt;
      &lt;/field&gt;
      &lt;field name="comment" type="string" direct="true"&gt;
        &lt;bind-xml name="apo:comment" /&gt;
      &lt;/field&gt;
   &lt;/class&gt;

   &lt;class name="Address"&gt;
      &lt;field name="name" type="string" direct="true"&gt;
         &lt;bind-xml name="apo:name" /&gt;
      &lt;/field&gt;
      &lt;field name="street" type="string" direct="true"&gt;
         &lt;bind-xml name="apo:street" /&gt;
      &lt;/field&gt;
   &lt;/class&gt;

&lt;/mapping&gt;</pre></span></td></tr></table></td></tr></table><p></p>

        <p><span class="bodyGrey">Note that the mapping file refers to <tt>mapping.xsd</tt>, which can be found 
           in the Castor JAR file, as the schema for the Castor namespace. I'm 
           also using relative paths for all the schemas, so the xml files and 
           the schemas must all reside in current working directory (the directory 
           from which you call java).</span></p>

        <p><span class="bodyGrey">Now for Castor to do validation, the correct castor.properties file must be 
           in the current working directory.</span></p>
           
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
org.exolab.castor.indent=true
org.exolab.castor.parser.namespaces=true
org.exolab.castor.sax.features=http://xml.org/sax/features/validation,\
  http://apache.org/xml/features/validation/schema,\
  http://apache.org/xml/features/validation/schema-full-checking
        </pre></span></td></tr></table></td></tr></table><p></p>
        
        <p><span class="bodyGrey">The indent property is just to make the output XML easy to read, and 
           because I'm using Xerces, the apache.org properties come into the 
           mix. Other XML parsers will probably have different flags that need to 
           be set.</span></p>
           
    <a name="Java-code-to-test-XML-validation"><h2>Java code to test XML validation</h2></a>
        
        <p><span class="bodyGrey">Finally, I created a driver class to run Castor:</span></p>
        
        <p></p><table bgcolor="#7270c2" cellpadding="1" cellspacing="1" border="0" width="100%"><tr><td><table bgcolor="#ededed" cellpadding="4" cellspacing="1" border="0" width="100%"><tr><td><span class="bodyBlack"><pre>
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;

public class ValidationDriver {

   public static void main( String[] args ) {
      String filename = args[0];

      try {
         Mapping myMap = new Mapping();
         myMap.loadMapping( "po1Map.xml" );

         Unmarshaller um1 = new Unmarshaller( myMap );
         PurchaseOrder po1 =
         (PurchaseOrder)um1.unmarshal(new FileReader(filename));

         StringWriter myWriter = new StringWriter();
         Marshaller m1 = new Marshaller( myWriter );
         m1.setMapping( myMap );
         m1.setNamespaceMapping("", "http://www.example.com/PO1");
         m1.setSchemaLocation("http://www.example.com/PO1 po1.xsd");
         m1.marshal( po1 );

         System.out.println( "Castor Output:" );
         System.out.println( myWriter.getBuffer().toString() );
         System.out.println( "" );

         StringReader myReader =
            new StringReader(myWriter.getBuffer().toString());
         PurchaseOrder po2 =
            (PurchaseOrder)um1.unmarshal( myReader );

         System.out.println( "Comment from reconstructed class:" );
         System.out.println( po2.comment );
      }
      catch( IOException e ) {
         e.printStackTrace();
      }
      catch( MarshalException e ) {
         e.printStackTrace();
      }
      catch( ValidationException e ) {
         e.printStackTrace();
      }
      catch( MappingException e ) {
         e.printStackTrace();
      }    
   }
}
        </pre></span></td></tr></table></td></tr></table><p></p>
        
        <p><span class="bodyGrey">With Castor, Xerces, and Commons-Logging in the classpath, one can run 
           this ValidationDriver and pass in an xml filename (valid-po1.xml or 
           invalid-po1.xml). The invalid file will print out an exception stack 
           trace that is due to a Xerces validation error. The valid xml should 
           produce the roundtrip xml (that's xml-&gt;Java-&gt;xml), and the comment 
           from the purchase order from the Java object (after it has gone 
           xml-&gt;Java-&gt;xml-&gt;Java). Note that the xml is being validated against 
           the schema each time it is going from xml-&gt;Java (though with this 
           example there is no validation going from Java-&gt;xml). The extra round 
           trips might seem excesive, but they helped me work out some kinks in 
           my mapping file when I had to do this the first time.</span></p>

    <a name="References"><h2>References</h2></a>

        <table cellspacing="2" cellpadding="2" border="0"><tr><td height="5" colspan="2"></td></tr><span class="bodyGrey">
            <tr><td width="10" valign="top" align="left">-</td><td valign="top" align="left"><span class="bodyGrey"><a href="http://xerces.apache.org/xerces2-j/">Apache Xerces</a></span></td></tr>
            <tr><td width="10" valign="top" align="left">-</td><td valign="top" align="left"><span class="bodyGrey"><a href="http://xerces.apache.org/xerces2-j/features.html">Apache Xerces features</a></span></td></tr>
        </span></table>
        
    </td></tr><tr height="5"><td align="left" valign="top" bgcolor="#7270c2" height="5" width="10">&nbsp;</td><td valign="top" bgcolor="#7270c2" height="5" width="150"><img border="0" height="15" width="1" src="images/dotTrans.gif"><br><img align="right" border="0" height="3" width="105" src="images/line_sm.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" height="5" width="7">&nbsp;</td><td align="left" valign="top" height="5" width="70">&nbsp;</td><td align="left" valign="top" height="5" width="120">&nbsp;</td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" height="5" width="10">&nbsp;</td><td align="left" valign="top" bgcolor="#7270c2" width="150"></td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="70"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="120">&nbsp;</td></tr><tr height="5"><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="10"><img border="0" height="125" width="10" src="images/stripes1.gif"></td><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="150"><img border="0" height="125" width="105" src="images/stripe105.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" height="100%" rowspan="2" width="7">&nbsp;</td><td align="left" valign="top" height="100%" width="70">&nbsp;</td><td align="left" valign="top" height="100%" width="120">&nbsp;</td></tr><tr height="5"><td align="left" valign="top" height="25" width="70">&nbsp;</td><td align="left" valign="bottom" height="25" width="400"><br><br><img height="3" width="400" border="0" src="images/line_light.gif"><br><p></p><span class="bodyGrey"><small><notice>
    Copyright &copy; 1999-2005 <a href="http://www.exolab.org">ExoLab Group</a>, Intalio Inc.,
    and Contributors.  All rights reserved.
  </notice><br>&nbsp;<br></small><small><notice>
    Java, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered
    trademarks of Sun Microsystems, Inc. in the United States and in other
    countries. XML, XML Schema, XSLT and related standards are trademarks or registered
    trademarks of MIT, INRIA, Keio or others, and a product of the World Wide Web
    Consortium. All other product names mentioned herein are trademarks of their respective
    owners.
  </notice><br>&nbsp;<br></small></span><p></p>
          &nbsp;
        </td><td align="left" valign="top" height="25" width="120">&nbsp;</td></tr></table><script type="text/javascript">
        var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
        document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
    </script><script type="text/javascript">
        var pageTracker = _gat._getTracker("UA-3544187-1");
        pageTracker._trackPageview();
    </script></body></html>