Keith,

> You are using one the static unmarshal methods, so your mapping file is
> going to be ignored.

No, I'm not.
The unmarshalling code looks like

        Unmarshaller unmarshaller = new Unmarshaller (mapping);
        unmarshaller.setValidation (debugMode);

        return unmarshaller.unmarshal (cls, isr);

Should be pretty equivalent to your code, shouldn't it?

Thanks,

Heiko Erhardt
skynamics AG
www.skynamics.com

> -----Original Message-----
> From: Keith Visco [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, May 16, 2002 8:32 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [castor-dev] Unmarshalling ints doesn't seem to work -
> Attachement
> 
> 
> 
> 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
> 

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to