Index: . =================================================================== --- . (revision 1762) +++ . (working copy) @@ -94,6 +94,9 @@ for (Iterator itr = list.iterator(); itr.hasNext();) { + Object obj = itr.next(); + type = getComponentType(obj.getClass()); + String ns = null; if (type.isAbstract()) ns = getSchemaType().getNamespaceURI(); @@ -100,10 +103,19 @@ else ns = type.getSchemaType().getNamespaceURI(); - MessageWriter cwriter = writer - .getElementWriter(type.getSchemaType().getLocalPart(), ns); - - type.writeObject(itr.next(), cwriter, context); + MessageWriter cwriter = null; + + Class clz = type.getTypeClass().getSuperclass(); + if (!(clz.isAssignableFrom(Object.class))) + { + cwriter = writer.getElementWriter(getComponentType(clz).getSchemaType().getLocalPart(), ns); + } + else + { + cwriter = writer.getElementWriter(type.getSchemaType().getLocalPart(), ns); + } + + type.writeObject(obj, cwriter, context); cwriter.close(); } } @@ -125,4 +137,17 @@ return type; } + + public Type getComponentType(Class clazz) + { + Type type = getTypeMapping().getType(clazz); + + if (type == null) + { + type = getTypeMapping().getTypeCreator().createType(clazz); + getTypeMapping().register(type); + } + + return type; + } } \ No newline at end of file