Attached is the patch I am maintaining for Castor which generates get/set methods
which using Java2 Collections rather than Array [].  This patch can be applied
to the HEAD of CVS for castor.

Regards,

Glenn

----------------------------------------------------------------------
Glenn Nielsen             [EMAIL PROTECTED] | /* Spelin donut madder    |
MOREnet System Programming               |  * if iz ina coment.      |
Missouri Research and Education Network  |  */                       |
----------------------------------------------------------------------
Index: src/main/org/exolab/castor/builder/CollectionInfoJ2.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/builder/CollectionInfoJ2.java,v
retrieving revision 1.18
diff -u -r1.18 CollectionInfoJ2.java
--- src/main/org/exolab/castor/builder/CollectionInfoJ2.java    24 Jan 2002 08:18:14 
-0000      1.18
+++ src/main/org/exolab/castor/builder/CollectionInfoJ2.java    9 Feb 2002 22:19:09 
+-0000
@@ -129,8 +129,8 @@
         method.addParameter(new JParameter(JType.Int, "index"));
         createGetByIndexMethod(method);
 
-        //-- {type}[] get{Name}
-        method = new JMethod(jType.createArray(), "get"+cName);
+        //-- ArrayList get{Name}
+        method = new JMethod(getSchemaType().getJType(), "get"+cName);
         jClass.addMethod(method);
         createGetMethod(method);
 
@@ -276,7 +276,7 @@
     } //-- createEnumerateMethod
 
     /**
-     * Creates implementation of object[] get() method.
+     * Creates implementation of ArrayList get() method.
      *
      * @param method the JMethod in which to create the source
      * code.
@@ -286,40 +286,9 @@
         JSourceCode jsc = method.getSourceCode();
         JType jType = method.getReturnType();
 
-        jsc.add("int size = ");
+        jsc.add("return ");
         jsc.append(getName());
-        jsc.append(".size();");
-
-        String variableName = getName()+".get(index)";
-
-        JType compType = jType.getComponentType();
-
-        jsc.add(compType.toString());
-        jsc.append("[] mArray = new ");
-        jsc.append(compType.toString());
-        jsc.append("[size]");
-        //-- if component is an array, we must add [] after setting
-        //-- size
-        if (compType.isArray()) jsc.append("[]");
-        jsc.append(";");
-
-        jsc.add("for (int index = 0; index < size; index++) {");
-        jsc.indent();
-        jsc.add("mArray[index] = ");
-        if (getContentType().getType() == XSType.CLASS) {
-            jsc.append("(");
-            jsc.append(jType.getLocalName());
-            jsc.append(") ");
-            jsc.append(variableName);
-        }
-        else {
-            jsc.append(getContentType()
-                       .createFromJavaObjectCode(variableName));
-        }
         jsc.append(";");
-        jsc.unindent();
-        jsc.add("}");
-        jsc.add("return mArray;");
     } //-- createGetMethod
 
     /**
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.92
diff -u -r1.92 Marshaller.java
--- src/main/org/exolab/castor/xml/Marshaller.java      9 Feb 2002 02:04:09 -0000      
 1.92
+++ src/main/org/exolab/castor/xml/Marshaller.java      9 Feb 2002 22:19:43 -0000
@@ -71,8 +71,10 @@
 import java.io.Serializable;
 import java.io.Writer;
 import java.lang.reflect.*;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.Vector;
 
 /**
@@ -774,6 +776,9 @@
         if (saveType && (descriptor.getHandler() instanceof DateFieldHandler))
             saveType = false;
         //-- XXXX end Date fix
+        //-- Suppress 'xsi:type' attributes when object is an ArrayList
+        if (saveType && object instanceof ArrayList)
+            saveType = false;
 
         if (saveType) {
 
@@ -1093,6 +1098,15 @@
                     if (item != null)
                        marshal(item, elemDescriptor, handler);
                 }
+            }
+            //-- handle ArrayList
+            else if (obj instanceof java.util.ArrayList) {
+                Iterator it = ((ArrayList)obj).iterator();
+                while (it.hasNext()) {            
+                    Object item = it.next();
+                    if (item != null)                
+                       marshal(item, elemDescriptor, handler);
+                }                                             
             }
 
             else marshal(obj, elemDescriptor, handler);

Reply via email to