1 29 30 package com.caucho.jaxb.skeleton; 31 import javax.xml.bind.JAXBException; 32 import javax.xml.bind.Marshaller; 33 import javax.xml.bind.Unmarshaller; 34 import javax.xml.bind.annotation.XmlElementWrapper; 35 import javax.xml.namespace.QName ; 36 import javax.xml.stream.XMLStreamException; 37 import javax.xml.stream.XMLStreamReader; 38 import javax.xml.stream.XMLStreamWriter; 39 import java.io.IOException ; 40 import java.lang.reflect.Array ; 41 import java.util.ArrayList ; 42 import java.util.Iterator ; 43 44 import com.caucho.util.L10N; 45 46 49 public class ObjectArrayProperty<T> extends ArrayProperty { 50 private static final L10N L = new L10N(ObjectArrayProperty.class); 51 52 private Class <T> _type; 53 54 public ObjectArrayProperty(Property componentProperty, Class <T> type) 55 { 56 super(componentProperty); 57 _type = type; 58 } 59 60 public Object read(Unmarshaller u, XMLStreamReader in, QName qname) 61 throws IOException , XMLStreamException, JAXBException 62 { 63 if (in.getEventType() != in.START_ELEMENT || ! qname.equals(in.getName())) 64 return (T[]) Array.newInstance(_type, 0); 66 67 ArrayList <T> ret = new ArrayList <T>(); 68 69 while (in.getEventType() == in.START_ELEMENT && qname.equals(in.getName())) 70 ret.add((T) _componentProperty.read(u, in, qname)); 71 72 T[] array = (T[]) Array.newInstance(_type, ret.size()); 73 ret.toArray(array); 74 75 return array; 76 } 77 78 public void write(Marshaller m, XMLStreamWriter out, Object obj, QName qname) 79 throws IOException , XMLStreamException, JAXBException 80 { 81 83 if (obj != null) { 84 T[] array = (T[]) obj; 85 86 for (int i = 0; i < array.length; i++) 87 _componentProperty.write(m, out, array[i], qname); 88 } 89 } 90 } 91 | Popular Tags |