public void marshal(Object obj, Result result) throws JAXBException { // XMLSerializable so = Util.toXMLSerializable(obj); XMLSerializable so = context.getGrammarInfo().castToXMLSerializable(obj); if (so == null) throw new MarshalException(Messages.format(Messages.NOT_MARSHALLABLE)); if (result instanceof SAXResult) { write(so, ((SAXResult) result).getHandler()); return; } if (result instanceof DOMResult) { Node node = ((DOMResult) result).getNode(); if (node == null) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); ((DOMResult) result).setNode(doc); write(so, new SAX2DOMEx(doc)); } catch (ParserConfigurationException pce) { throw new JAXBAssertionError(pce); } } else { write(so, new SAX2DOMEx(node)); } return; } if (result instanceof StreamResult) { StreamResult sr = (StreamResult) result; XMLWriter w = null; if (sr.getWriter() != null) w = createWriter(sr.getWriter()); else if (sr.getOutputStream() != null) w = createWriter(sr.getOutputStream()); else if (sr.getSystemId() != null) { String fileURL = sr.getSystemId(); if (fileURL.startsWith("file:///")) { if (fileURL.substring(8).indexOf(":") > 0) fileURL = fileURL.substring(8); else fileURL = fileURL.substring(7); } // otherwise assume that it's a file name try { w = createWriter(new FileOutputStream(fileURL)); } catch (IOException e) { throw new MarshalException(e); } } if (w == null) throw new IllegalArgumentException(); write(so, w); return; } // unsupported parameter type throw new MarshalException(Messages.format(Messages.UNSUPPORTED_RESULT)); }
public XMLWriter createWriter(OutputStream os, String encoding) throws JAXBException { try { return createWriter(new OutputStreamWriter(os, getJavaEncoding(encoding)), encoding); } catch (UnsupportedEncodingException e) { throw new MarshalException(Messages.format(Messages.UNSUPPORTED_ENCODING, encoding), e); } }
public String onIDREF(IdentifiableObject obj) throws SAXException { idReferencedObjects.add(obj); String id = obj.____jaxb____getId(); if (id == null) { reportError( new NotIdentifiableEventImpl( ValidationEvent.ERROR, Messages.format(Messages.ERR_NOT_IDENTIFIABLE), new ValidationEventLocatorImpl(obj))); } return id; }
void reconcileID() throws AbortSerializationException { // find objects that were not a part of the object graph idReferencedObjects.removeAll(objectsWithId); for (Iterator itr = idReferencedObjects.iterator(); itr.hasNext(); ) { IdentifiableObject o = (IdentifiableObject) itr.next(); reportError( new NotIdentifiableEventImpl( ValidationEvent.ERROR, Messages.format(Messages.ERR_DANGLING_IDREF, o.____jaxb____getId()), new ValidationEventLocatorImpl(o))); } // clear the garbage idReferencedObjects.clear(); objectsWithId.clear(); }