Hi Glenn,
We can't use your patch. Castor XML is maintaining JDK 1.1
compatability. The Marshaller cannot include JDK 1.2+ collections.
Thanks,
--Keith
Glenn Nielsen wrote:
>
> 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);
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev