You can also create a "valueOf" method that takes a string value and
returns the proper enumeration instance, which is how Castor deals with
unmarshalling type-safe enumerations:

public static [object-type] valueOf(String enumValue) {

}

--Keith

-------- Original Message --------
   Subject: Re: [castor-dev] NotConstructable Exception and FieldHandler
      Date: Mon, 16 Dec 2002 11:55:54 -0800
      From: "Chris Bedford" <[EMAIL PROTECTED]>
  Reply-To: [EMAIL PROTECTED]
        To: [EMAIL PROTECTED]
References: <[EMAIL PROTECTED]>

Hi, Matthias: I'm no Castor expert,but I can tell you that
Class.newInstance() requires a no argument constructor be available on
theClass whose instance you are trying to construct. From the
Javadocs-> ****************

public Object newInstance()
                   throws InstantiationException,
                          IllegalAccessException

Creates a new instance of the class represented by this Class object.
The class is instantiatied as if by a new expression with an empty
argument list. The class is initialized if it has not already been
initialized. ****************  As a workaround you could create a
pass-through proxy that for CoordinateFormatEnum that knows how to
constructan instance of a CoordinateFormatEnum.   This proxy would
implement all methods of CoordinateFormatEnum and justdelegate the calls
to the embedded CoordinateFormatEnum instance. That's one way...   maybe
the Castor guys can suggest a better one..   I'd be interested in
finding out as well since I find creationof these proxies to be a
hassle.. but they get the job done. thanks    Chris

     ----- Original Message -----
     From: Matthias David
     To: [EMAIL PROTECTED]
     Sent: Monday, December 16, 2002 1:39 AM
     Subject: [castor-dev] NotConstructable Exception and
     FieldHandler
      Hi,

     I have written a FieldHandler for a class
     (CoordinateFormatEnum) that has no public constructor. When
     Unmarshalling I get the following exception:

     Nested error: org.exolab.castor.mapping.MappingException: The
     Java class CoordinateFormatEnum is not constructable -- it
     does not contain a default public constructor)

     The problem is that the class CoordinateFormatEnum is a
     tool-generated class, so I have no chance to make the
     constructor public. So How can this problem be solved? I
     thought that the Unmarshaller does not need to call the
     constructor of the class since the FieldHandler is responsible
     for that, e.g. using the method "newInstance".

     Here's the handler's code:

     public class CoordinateFormatEnumFieldHandler implements
     FieldHandler {

         public Object getValue(Object object)
                 throws IllegalStateException {
             return ((Coordinates)object).getFormat().getValue();
         }

         public void setValue(Object object, Object value)
                 throws IllegalStateException,
     IllegalArgumentException {

     ((Coordinates)object).setFormat(CoordinateFormatEnum.fromString((String)value));

         }

         public void resetValue(Object object)
                 throws IllegalStateException,
     IllegalArgumentException {
         }

         public void checkValidity(Object object)
                 throws ValidityException, IllegalStateException {
         }

         public Object newInstance(Object parent)
                 throws IllegalStateException {
             return CoordinateFormatEnum.Mercator;
         }
     }

     And here's the mapping:

         <class name="com.Coordinates" access="shared">
             <description>Default mapping for
     Coordinates</description>
             <map-to xml="Coordinates"/>
             <field name="format" type="com.CoordinateFormatEnum"
     handler="com.CoordinateFormatEnumFieldHandler">
                 <bind-xml name="Format" node="attribute"/>
             </field>
         </class>

     Any clues for that?

     Thanks,
      Matthias.

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

Reply via email to