Heiko,
You are using one the static unmarshal methods, so your mapping file is
going to be ignored.
Try changing to the following:
Unmarshaller unm = new Unmarshaller(cls);
unm.setMapping(...);
unm.unmarshal(isr);
--Keith
Heiko Erhardt wrote:
>
> Just found out that the mailing list doesn't like attachements (sorry!), so I'm
> resending this.
>
> As a test case for Castor, I'm trying to marshal and unmarshal again a simple bean.
> Works fine so far, however, an int value in the bean is not unmarshalled (the setter
> method isn't being called). Adding a set<Name> (Integer value) didn't help.
> Just tested with CVS version, same behavior.
> I attached the source files for further info.
> The XMLDriver class is just a generic wrapper for calling the
>marshaller/unmarshaller,
> the bean can be found in the test/data package.
> Would appreciate any help...
>
> Heiko Erhardt
> skynamics AG
> www.skynamics.com
>
> /*
> * File: TestXMLDriver.java
> * Product: Prisma
> *
> * Date Author Changes
> * Sep 01 00 Heiko Erhardt Created
> *
> * (c) 2000 skynamics AG All rights reserved.
> */
>
> package com.skynamics.prisma.core.util.xml.test;
>
> import java.io.IOException;
> import com.skynamics.prisma.core.util.xml.XMLDriver;
> import com.skynamics.prisma.core.util.xml.test.data.TestCompany;
>
> /**
> * Test class for the XML driver.
> */
> public class TestXMLDriver
> {
> //////////////////////////////////////////////////
> // @@ Construction
> //////////////////////////////////////////////////
>
> /**
> * Private constructor.
> */
> public TestXMLDriver ()
> {
> }
>
> //////////////////////////////////////////////////
> // @@ Main class
> //////////////////////////////////////////////////
>
> /** XML file name */
> public static final String FILENAME = "c:/Temp/TestCompany.xml";
>
> /**
> * Main class for test.
> * Serializes test objects to the file "c:/Temp/TestCompany.xml" and reads
>them back again.
> */
> public static void main (String [] args)
> {
> TestCompany tc = new TestCompany ();
> tc.setName ("skynamics AG");
> tc.setCity ("Munich");
> tc.setPhone (null);
> tc.setNrEmployees (8);
> tc.setRevenue (1000000.0);
>
> System.out.println ("***** Serializing *****");
> tc.dump ();
>
> XMLDriver driver = XMLDriver.getInstance ();
> String encoding = null;
> // String encoding = "ASCII";
> // String encoding = "UTF8";
> // String encoding = "UTF-16";
> // String encoding = "ISO8859_1";
> driver.setEncoding (encoding);
>
> // Serialize
> try
> {
> driver.serialize (tc, FILENAME);
> }
> catch (IOException ioe)
> {
> System.out.println ("Error serializing test class: ");
> System.out.println (ioe);
> System.exit (1);
> }
>
> // Deserialize
> try
> {
> TestCompany cNew = (TestCompany) driver.deserialize
>(TestCompany.class, FILENAME);
>
> System.out.println ("***** Deserializing *****");
> cNew.dump ();
> }
> catch (IOException ioe)
> {
> System.out.println ("Error deserializing test class: ");
> System.out.println (ioe);
> System.exit (1);
> }
> }
> }
>
> /*
> * File: TestXMLDriver.java
> * Product: Prisma
> *
> * Date Author Changes
> * Sep 01 00 Heiko Erhardt Created
> *
> * (c) 2000 skynamics AG All rights reserved.
> */
>
> package com.skynamics.prisma.core.util.xml.test.data;
>
> import com.skynamics.prisma.core.util.xml.XMLDriver;
>
> /**
> * Test class for the XML driver.
> */
> public class TestCompany
> {
> //////////////////////////////////////////////////
> // @@ Private data
> //////////////////////////////////////////////////
>
> /** Name */
> protected String name;
>
> /** City */
> protected String city;
>
> /** Phone */
> protected String phone;
>
> /** NrEmployees */
> protected int nrEmployees;
>
> /** Revenue */
> protected double revenue;
>
> //////////////////////////////////////////////////
> // @@ Construction
> //////////////////////////////////////////////////
>
> /**
> * Private constructor.
> */
> public TestCompany ()
> {
> }
>
> //////////////////////////////////////////////////
> // @@ Attributes
> //////////////////////////////////////////////////
>
> /**
> * Gets the name.
> * @nowarn
> */
> public String getName ()
> {
> return name;
> }
>
> /**
> * Sets the name.
> * @nowarn
> */
> public void setName (String name)
> {
> this.name = name;
> }
>
> /**
> * Gets the city.
> * @nowarn
> */
> public String getCity ()
> {
> return city;
> }
>
> /**
> * Sets the city.
> * @nowarn
> */
> public void setCity (String city)
> {
> this.city = city;
> }
>
> /**
> * Gets the phone.
> * @nowarn
> */
> public String getPhone ()
> {
> return phone;
> }
>
> /**
> * Sets the phone.
> * @nowarn
> */
> public void setPhone (String phone)
> {
> this.phone = phone;
> }
>
> /**
> * Gets the nrEmployees.
> * @nowarn
> */
> public int getNrEmployees ()
> {
> return nrEmployees;
> }
>
> /**
> * Sets the nrEmployees.
> * @nowarn
> */
> public void setNrEmployees (int nrEmployees)
> {
> this.nrEmployees = nrEmployees;
> }
>
> /**
> * Sets the nrEmployees.
> * @nowarn
> */
> public void setNrEmployees (Integer nrEmployees)
> {
> this.nrEmployees = nrEmployees.intValue ();
> }
>
> /**
> * Gets the revenue.
> * @nowarn
> */
> public double getRevenue ()
> {
> return revenue;
> }
>
> /**
> * Sets the revenue.
> * @nowarn
> */
> public void setRevenue (double revenue)
> {
> this.revenue = revenue;
> }
>
> //////////////////////////////////////////////////
> // @@ Dump
> //////////////////////////////////////////////////
>
> /**
> * Dumps the object to standard output.
> */
> public void dump ()
> {
> dump (null);
> }
>
> /**
> * Dumps the object to standard output.
> * @param indent Indent to prepend to the output or null
> */
> public void dump (String indent)
> {
> if (indent == null)
> indent = "";
> System.out.println (indent + "Class: '" + getClass ().getName ());
> System.out.println (indent + " Name: '" + name + "'");
> System.out.println (indent + " City: '" + city + "'");
> System.out.println (indent + " Phone: '" + phone + "'");
> System.out.println (indent + " NrEmployees: '" + nrEmployees +
>"'");
> System.out.println (indent + " Revenue: '" + revenue + "'");
> }
> }
>
> *********** File TestCompany.xml
>
> <?xml version="1.0"?>
> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN"
> "http://castor.exolab.org/mapping.dtd">
>
> <mapping>
>
> <class name="com.skynamics.prisma.core.util.xml.test.data.TestCompany">
>
> <map-to xml="company"/>
>
> <field name="Name"
> type="string">
> <bind-xml name="name" node="attribute"/>
> </field>
>
> <field name="City"
> type="string">
> <bind-xml name="city"/>
> </field>
>
> <field name="Phone"
> type="string">
> <bind-xml name="phone"/>
> </field>
>
> <field name="Revenue"
> type="double">
> <bind-xml name="revenue"/>
> </field>
>
> <field name="NrEmployees"
> type="integer">
> <bind-xml name="nr-of-employees"/>
> </field>
>
> </class>
>
> </mapping>
>
> /*
> * File: XMLDriver.java
> * Product: Prisma
> *
> * Date Author Changes
> * Sep 01 00 Heiko Erhardt Created
> *
> * (c) 2000 skynamics AG All rights reserved.
> */
>
> package com.skynamics.prisma.core.util.xml;
>
> import java.io.File;
> import java.io.FileNotFoundException;
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.io.OutputStreamWriter;
> import java.net.URL;
> import java.util.HashMap;
> import org.exolab.castor.mapping.Mapping;
> import org.exolab.castor.mapping.MappingException;
> import org.exolab.castor.xml.Marshaller;
> import org.exolab.castor.xml.MarshalException;
> import org.exolab.castor.xml.Unmarshaller;
> import org.exolab.castor.xml.ValidationException;
>
> /**
> * The XML driver class implements a generic driver for XML
>serialzation/deserialization.
> * It builds upon Castor XML/bean mapping support.
> *
> * @index XML
> */
> public class XMLDriver
> {
> //////////////////////////////////////////////////
> // @@ Private data
> //////////////////////////////////////////////////
>
> /**
> * Mapping indicator table.
> * Maps classes (Class objects) to an empty string to indicate that the
>class is
> * contained in the mapping table.
> */
> protected HashMap mappedClasses = new HashMap ();
>
> /** Castor mapping table */
> protected Mapping mapping;
>
> /** Encoding for XML I/O */
> protected String encoding;
>
> /** Debug mode flag. Performs object model validation. */
> protected boolean debugMode = true;
>
> /** Singleton instance */
> private static XMLDriver singletonInstance;
>
> //////////////////////////////////////////////////
> // @@ Construction
> //////////////////////////////////////////////////
>
> /**
> * Gets the singleton instance of this class.
> * @nowarn
> */
> public static XMLDriver getInstance ()
> {
> if (singletonInstance == null)
> {
> singletonInstance = new XMLDriver ();
> }
> return singletonInstance;
> }
>
> /**
> * Private constructor.
> */
> private XMLDriver ()
> {
> mapping = new Mapping (getClass ().getClassLoader ());
> }
>
> //////////////////////////////////////////////////
> // @@ Serialization
> //////////////////////////////////////////////////
>
> /**
> * Serializes an object to an output file.
> * @param o Object to serialize
> * @param fileName Output file name
> * @throws IOException On i/o or xml/marshalling error
> */
> public void serialize (Object o, String fileName)
> throws IOException
> {
> FileOutputStream out = null;
> try
> {
> out = new FileOutputStream (fileName);
> }
> catch (FileNotFoundException e)
> {
> throw new IOException ("Cannot create file '" + fileName +
>"': " + e.getMessage ());
> }
>
> try
> {
> serialize (o, out);
> }
> finally
> {
> out.close ();
> }
> }
>
> /**
> * Serializes an object to an output stream.
> * @param o Object to serialize
> * @param out Output stream
> * @throws IOException On i/o or xml/marshalling error
> */
> public void serialize (Object o, OutputStream out)
> throws IOException
> {
> Class cls = o.getClass ();
>
> // Make sure the mapping is loaded
> loadMapping (cls);
>
> // Marshal the object
> try
> {
> OutputStreamWriter osw;
> if (encoding != null)
> osw = new OutputStreamWriter (out, encoding);
> else
> osw = new OutputStreamWriter (out);
>
> Marshaller marshaller = new Marshaller (osw);
> marshaller.setMapping (mapping);
> marshaller.setValidation (debugMode);
>
> marshaller.marshal (o);
> }
> catch (MappingException mpx)
> {
> throw new IOException ("Error setting XML mapping for class
>'" + cls.getName () + "': " +
> mpx.getMessage ());
> }
> catch (MarshalException mx)
> {
> throw new IOException ("Error serializing an object of class
>'" + cls.getName () + "' to XML: " +
> mx.getMessage ());
> }
> catch (ValidationException vx)
> {
> throw new IOException ("Error validating XML serialization
>for an object of class '" +
> cls.getName () + "': " + vx.getMessage ());
> }
> }
>
> //////////////////////////////////////////////////
> // @@ Deserialization
> //////////////////////////////////////////////////
>
> /**
> * Deserializes an object from an output file.
> * @param cls Class of the object to deserialize
> * @param fileName Input file name
> * @return The deserialized object
> * @throws IOException On i/o or xml/marshalling error
> */
> public Object deserialize (Class cls, String fileName)
> throws IOException
> {
> FileInputStream in = null;
> try
> {
> in = new FileInputStream (fileName);
> }
> catch (FileNotFoundException e)
> {
> throw new IOException ("Cannot open file '" + fileName + "':
>" + e.getMessage ());
> }
>
> try
> {
> return deserialize (cls, in);
> }
> finally
> {
> in.close ();
> }
> }
>
> /**
> * Deserializes an object from an output stream.
> * @param cls Class of the object to deserialize
> * @param in Input stream
> * @return The deserialized object
> * @throws IOException On i/o or xml/marshalling error
> */
> public Object deserialize (Class cls, InputStream in)
> throws IOException
> {
> // Make sure the mapping is loaded
> loadMapping (cls);
>
> // Marshal the object
> try
> {
> InputStreamReader isr;
> if (encoding != null)
> isr = new InputStreamReader (in, encoding);
> else
> isr = new InputStreamReader (in);
>
> Unmarshaller unmarshaller = new Unmarshaller (mapping);
> unmarshaller.setValidation (debugMode);
>
> return unmarshaller.unmarshal (cls, isr);
> }
> catch (MappingException mpx)
> {
> throw new IOException ("Error setting XML mapping for class
>'" + cls.getName () + "': " +
> mpx.getMessage ());
> }
> catch (MarshalException mx)
> {
> throw new IOException ("Error serializing an object of class
>'" + cls.getName () + "' to XML: " +
> mx.getMessage ());
> }
> catch (ValidationException vx)
> {
> throw new IOException ("Error validating XML serialization
>for an object of class '" +
> cls.getName () + "': " + vx.getMessage ());
> }
> }
>
> //////////////////////////////////////////////////
> // @@ Properties
> //////////////////////////////////////////////////
>
> /**
> * Gets the encoding for XML.
> * @return enc The current encoding. Possible value are for example:\n
> * "ASCII" (regular ASCII characters)\n
> * "UTF8" (8 bit Unicode)\n
> * "UTF-16" (16 bit Unicode)\n
> * "ISO8859_1" (regular Windows character set)\n
> * or null for default encoding.\n
> * For further details, see the JDK specs.
> */
> public String getEncoding ()
> {
> return encoding;
> }
>
> /**
> * Sets the encoding for XML.
> * @param encoding The encoding. Possible value are for example:\n
> * "ASCII" (regular ASCII characters)\n
> * "UTF8" (8 bit Unicode)\n
> * "UTF-16" (16 bit Unicode)\n
> * "ISO8859_1" (regular Windows character set)\n
> * or null for default encoding.\n
> * For further details, see the JDK specs.
> */
> public void setEncoding (String encoding)
> {
> this.encoding = encoding;
> }
>
> //////////////////////////////////////////////////
> // @@ Helpers
> //////////////////////////////////////////////////
>
> /**
> * Loads the XML mapping for the specified class.
> * Checks the mapping table first. If no mapping is present yet, the method
>tries to read the
> mapping
> * from the Castor mapping file with the same name as the class in the same
>directory as the class.
> *
> * @param cls Class to get the mapping for
> * @throws IOException If no mapping file exists for this class
> */
> protected void loadMapping (Class cls)
> throws IOException
> {
> if (mappedClasses.get (cls) == null)
> {
> String className = cls.getName ();
> int index = className.lastIndexOf ('.');
> String mappingFileName = className.substring (index + 1);
> mappingFileName += ".xml";
>
> URL url = cls.getResource (mappingFileName);
> if (url == null)
> {
> throw new IOException ("Mapping resource not found
>for class '" + className + "'");
> }
>
> // Load the mapping from the resource
> try
> {
> mapping.loadMapping (url);
> }
> catch (MappingException mex)
> {
> throw new IOException ("Error loading mapping
>resource for class '" + className + "': " +
> mex.getMessage ());
> }
>
> // Set indicator that mapping was loaded
> mappedClasses.put (cls, "");
> }
> }
> }
>
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
> unsubscribe castor-dev
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev