use of javax.xml.bind.ValidationEvent in project opennms by OpenNMS.
the class XmlTest method validateJaxbXmlAgainstSchema.
@Test
public void validateJaxbXmlAgainstSchema() throws Exception {
final String schemaFile = getSchemaFile();
if (schemaFile == null) {
LOG.warn("Skipping validation.");
return;
}
LOG.debug("Validating against XSD: {}", schemaFile);
javax.xml.bind.Unmarshaller unmarshaller = JaxbUtils.getUnmarshallerFor(getSampleClass(), null, true);
final SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
final Schema schema = factory.newSchema(new StreamSource(schemaFile));
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(final ValidationEvent event) {
LOG.warn("Received validation event: {}", event, event.getLinkedException());
return false;
}
});
try {
final InputSource inputSource = new InputSource(getSampleXmlInputStream());
final XMLFilter filter = JaxbUtils.getXMLFilterForClass(getSampleClass());
final SAXSource source = new SAXSource(filter, inputSource);
@SuppressWarnings("unchecked") T obj = (T) unmarshaller.unmarshal(source);
assertNotNull(obj);
} finally {
unmarshaller.setSchema(null);
}
}
use of javax.xml.bind.ValidationEvent in project camel by apache.
the class JaxbDataFormat method createMarshaller.
protected Marshaller createMarshaller() throws JAXBException, SAXException, FileNotFoundException, MalformedURLException {
Marshaller marshaller = getContext().createMarshaller();
if (schema != null) {
marshaller.setSchema(cachedSchema);
marshaller.setEventHandler(new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event) {
// stop marshalling if the event is an ERROR or FATAL ERROR
return event.getSeverity() == ValidationEvent.WARNING;
}
});
}
return marshaller;
}
use of javax.xml.bind.ValidationEvent in project ddf by codice.
the class TestXmlParserConfigurator method setup.
@Before
public void setup() {
pc = new XmlParserConfigurator();
testHandler = new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent event) {
return false;
}
};
testAdapter = new XmlAdapter() {
@Override
public Object unmarshal(Object v) throws Exception {
return null;
}
@Override
public Object marshal(Object v) throws Exception {
return null;
}
};
}
use of javax.xml.bind.ValidationEvent in project cxf by apache.
the class DataWriterImpl method createMarshaller.
public Marshaller createMarshaller(Object elValue, MessagePartInfo part) {
Class<?> cls = null;
if (part != null) {
cls = part.getTypeClass();
}
if (cls == null) {
cls = null != elValue ? elValue.getClass() : null;
}
if (cls != null && cls.isArray() && elValue instanceof Collection) {
Collection<?> col = (Collection<?>) elValue;
elValue = col.toArray((Object[]) Array.newInstance(cls.getComponentType(), col.size()));
}
Marshaller marshaller;
try {
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, StandardCharsets.UTF_8.name());
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
marshaller.setListener(databinding.getMarshallerListener());
databinding.applyEscapeHandler(!noEscape, eh -> JAXBUtils.setEscapeHandler(marshaller, eh));
if (setEventHandler) {
ValidationEventHandler h = veventHandler;
if (veventHandler == null) {
h = new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event) {
// continue on warnings only
return event.getSeverity() == ValidationEvent.WARNING;
}
};
}
marshaller.setEventHandler(h);
}
final Map<String, String> nspref = databinding.getDeclaredNamespaceMappings();
final Map<String, String> nsctxt = databinding.getContextualNamespaceMap();
// set the prefix mapper if either of the prefix map is configured
if (nspref != null || nsctxt != null) {
Object mapper = JAXBUtils.setNamespaceMapper(nspref != null ? nspref : nsctxt, marshaller);
if (nsctxt != null) {
setContextualNamespaceDecls(mapper, nsctxt);
}
}
if (databinding.getMarshallerProperties() != null) {
for (Map.Entry<String, Object> propEntry : databinding.getMarshallerProperties().entrySet()) {
try {
marshaller.setProperty(propEntry.getKey(), propEntry.getValue());
} catch (PropertyException pe) {
LOG.log(Level.INFO, "PropertyException setting Marshaller properties", pe);
}
}
}
marshaller.setSchema(schema);
AttachmentMarshaller atmarsh = getAttachmentMarshaller();
marshaller.setAttachmentMarshaller(atmarsh);
if (schema != null && atmarsh instanceof JAXBAttachmentMarshaller) {
// we need a special even handler for XOP attachments
marshaller.setEventHandler(new MtomValidationHandler(marshaller.getEventHandler(), (JAXBAttachmentMarshaller) atmarsh));
}
} catch (JAXBException ex) {
if (ex instanceof javax.xml.bind.MarshalException) {
javax.xml.bind.MarshalException marshalEx = (javax.xml.bind.MarshalException) ex;
Message faultMessage = new Message("MARSHAL_ERROR", LOG, marshalEx.getLinkedException().getMessage());
throw new Fault(faultMessage, ex);
}
throw new Fault(new Message("MARSHAL_ERROR", LOG, ex.getMessage()), ex);
}
for (XmlAdapter<?, ?> adapter : databinding.getConfiguredXmlAdapters()) {
marshaller.setAdapter(adapter);
}
return marshaller;
}
use of javax.xml.bind.ValidationEvent in project tomee by apache.
the class JaxbJavaee method unmarshal.
/**
* Read in a T from the input stream.
*
* @param type Class of object to be read in
* @param in input stream to read
* @param validate whether to validate the input.
* @param <T> class of object to be returned
* @return a T read from the input stream
* @throws ParserConfigurationException is the SAX parser can not be configured
* @throws SAXException if there is an xml problem
* @throws JAXBException if the xml cannot be marshalled into a T.
*/
public static <T> Object unmarshal(final Class<T> type, final InputStream in, final boolean validate) throws ParserConfigurationException, SAXException, JAXBException {
final InputSource inputSource = new InputSource(in);
final SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(validate);
final SAXParser parser = factory.newSAXParser();
final JAXBContext ctx = JaxbJavaee.getContext(type);
final Unmarshaller unmarshaller = ctx.createUnmarshaller();
unmarshaller.setEventHandler(new ValidationEventHandler() {
public boolean handleEvent(final ValidationEvent validationEvent) {
System.out.println(validationEvent);
return false;
}
});
final JaxbJavaee.NoSourceFilter xmlFilter = new JaxbJavaee.NoSourceFilter(parser.getXMLReader());
xmlFilter.setContentHandler(unmarshaller.getUnmarshallerHandler());
final SAXSource source = new SAXSource(xmlFilter, inputSource);
currentPublicId.set(new TreeSet<String>());
try {
return unmarshaller.unmarshal(source);
} finally {
currentPublicId.set(null);
}
}
Aggregations