private boolean validate(Object o, boolean validateId) throws ValidationException { try { // ValidatableObject vo = Util.toValidatableObject(o); ValidatableObject vo = jaxbContext.getGrammarInfo().castToValidatableObject(o); if (vo == null) throw new ValidationException(Messages.format(Messages.NOT_VALIDATABLE)); EventInterceptor ei = new EventInterceptor(eventHandler); ValidationContext context = new ValidationContext(jaxbContext, ei, validateId); context.validate(vo); context.reconcileIDs(); return !ei.hadError(); } catch (SAXException e) { // we need a consistent mechanism to convert SAXException into JAXBException Exception nested = e.getException(); if (nested != null) { throw new ValidationException(nested); } else { throw new ValidationException(e); } // return false; } }
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)); }