1 29 30 package com.caucho.jaxb.skeleton; 31 32 import javax.xml.bind.JAXBException; 33 import javax.xml.bind.Marshaller; 34 import javax.xml.bind.Unmarshaller; 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 40 import java.io.IOException ; 41 42 import com.caucho.util.L10N; 43 44 47 public abstract class CDataProperty extends Property { 48 private static final L10N L = new L10N(CDataProperty.class); 49 50 protected boolean _isNillable = true; 51 52 protected abstract Object read(String in) 53 throws IOException , XMLStreamException, JAXBException; 54 55 public Object read(Unmarshaller u, XMLStreamReader in, QName qname) 56 throws IOException , XMLStreamException, JAXBException 57 { 58 if (in.getEventType() != in.START_ELEMENT) { 59 if (_isNillable) 60 return null; 61 else 62 throw new IOException (L.l("Expected <{0}>", qname.toString())); 63 } 64 else if (! in.getName().equals(qname)) { 65 if (_isNillable) 66 return null; 67 else 68 throw new IOException (L.l("Expected <{0}>, not <{1}>", 69 qname.toString(), in.getName().toString())); 70 } 71 72 in.next(); 73 74 Object ret = null; 75 76 if (in.getEventType() == in.CHARACTERS) 77 ret = read(in.getText()); 78 else 79 ret = read(""); 81 while (in.getEventType() != in.END_ELEMENT) 82 in.nextTag(); 83 84 if (! in.getName().equals(qname)) 85 throw new IOException (L.l("Expected </{0}>, not </{1}>", 86 qname.getLocalPart(), in.getLocalName())); 87 88 in.nextTag(); 89 90 return ret; 91 } 92 93 protected abstract String write(Object in) 94 throws IOException , XMLStreamException; 95 96 public void write(Marshaller m, XMLStreamWriter out, Object obj, QName qname) 97 throws IOException , XMLStreamException, JAXBException 98 { 99 if (obj != null) { 100 writeQNameStartElement(out, qname); 101 out.writeCharacters(write(obj)); 102 writeQNameEndElement(out, qname); 103 } 104 } 105 } 106 | Popular Tags |