? src/runant.cmd Index: src/main/org/exolab/castor/xml/Introspector.java =================================================================== RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/Introspector.java,v retrieving revision 1.16 diff -b -u -r1.16 Introspector.java --- src/main/org/exolab/castor/xml/Introspector.java 1 Oct 2004 13:25:13 -0000 1.16 +++ src/main/org/exolab/castor/xml/Introspector.java 14 Jan 2005 06:55:09 -0000 @@ -1219,7 +1219,9 @@ if ((type == Boolean.class) || (type == Character.class)) return true; - return (type.getSuperclass() == Number.class); + if (type.getSuperclass() == Number.class) return true; + + return type.getSuperclass().getName().equals("java.lang.Enum"); } //-- isPrimitive Index: src/main/org/exolab/castor/xml/MarshalFramework.java =================================================================== RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/MarshalFramework.java,v retrieving revision 1.11 diff -b -u -r1.11 MarshalFramework.java --- src/main/org/exolab/castor/xml/MarshalFramework.java 17 Dec 2004 07:29:52 -0000 1.11 +++ src/main/org/exolab/castor/xml/MarshalFramework.java 14 Jan 2005 07:03:51 -0000 @@ -200,7 +200,9 @@ if ((type == Boolean.class) || (type == Character.class)) return true; - return (type.getSuperclass() == Number.class); + if (type.getSuperclass() == Number.class) return true; + + return type.getSuperclass().getName().equals("java.lang.Enum"); } //-- isPrimitive /** Index: src/main/org/exolab/castor/xml/Marshaller.java =================================================================== RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/Marshaller.java,v retrieving revision 1.21 diff -b -u -r1.21 Marshaller.java --- src/main/org/exolab/castor/xml/Marshaller.java 17 Dec 2004 07:30:34 -0000 1.21 +++ src/main/org/exolab/castor/xml/Marshaller.java 14 Jan 2005 06:47:19 -0000 @@ -1533,12 +1533,25 @@ /* special case for Strings and primitives */ else if (isPrimitive(_class)) { - char[] chars = object.toString().toCharArray(); + char[] chars; try { + if (object.getClass().getName().equals("java.lang.Enum")) + chars = object.getClass().getMethod("name",null).invoke(object,null).toString().toCharArray(); + else + chars = object.toString().toCharArray(); handler.characters(chars,0,chars.length); } catch(org.xml.sax.SAXException sx) { throw new MarshalException(sx); + } catch (NoSuchMethodException e) + { + throw new MarshalException("Could not marshal Java5 Enum",e); + } catch (IllegalAccessException e) + { + throw new MarshalException("Could not marshal Java5 Enum",e); + } catch (java.lang.reflect.InvocationTargetException e) + { + throw new MarshalException("Could not marshal Java5 Enum",e); } } } Index: src/main/org/exolab/castor/xml/UnmarshalHandler.java =================================================================== RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/UnmarshalHandler.java,v retrieving revision 1.40 diff -b -u -r1.40 UnmarshalHandler.java --- src/main/org/exolab/castor/xml/UnmarshalHandler.java 17 Dec 2004 05:42:46 -0000 1.40 +++ src/main/org/exolab/castor/xml/UnmarshalHandler.java 14 Jan 2005 06:41:48 -0000 @@ -3530,6 +3530,29 @@ primitive = java.math.BigInteger.valueOf(0); else primitive = new java.math.BigInteger(value); } + else if (type.getSuperclass().getName().equals("java.lang.Enum")) + { + if (isNull) + primitive = null; + else + try + { + primitive = type.getMethod("valueOf",new Class[]{String.class}).invoke(null,new Object[]{value}); + } catch (IllegalAccessException e) + { + throw new IllegalStateException(e.toString()); + } catch (InvocationTargetException e) + { + if (e.getTargetException() instanceof RuntimeException); + throw (RuntimeException)e.getTargetException(); + } catch (NoSuchMethodException e) + { + String err = type.getName() + + " does not contain the required method: public static " + + type.getName() + " valueOf(String);"; + throw new IllegalArgumentException(err); + } + } return primitive; } //-- toPrimitiveObject