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);