- Escribí algunas clases de Java y las anoté con las anotaciones de JAXB.
- Después de eso utilicé schemagen para generar un xsd.
- Luego construyo un gráfico de objetos y lo organizo en un archivo xml.
- Modifiqué el archivo xml para que ya no fuera válido.
Quería usar el xsd con la esperanza de que el unmarshalling de JAXB falle. Pero no es así ¿Por qué?¿Por qué JAXB no quiere validar
JAXB está leyendo un esquema (si el XML del esquema es incorrecto, JAXB da una excepción), pero parece que JAXB está ignorando el esquema durante la lectura.
SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(getClass().getResource("/schema1.xsd"));
JAXBContext context = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);
Customer c = JAXB.unmarshal(file, Customer.class);
El XML escrito comienza así:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:customer xmlns:ns2="http://bla.com/">
Incluso el ValidationEventCollector adjunta no dio ninguna información:
unmarshaller.setEventHandler(new JAXBEventCollector());
JAXBEventCollector es:
class JAXBEventCollector extends ValidationEventCollector
{
@Override
public boolean handleEvent(ValidationEvent event)
{
System.out.println(event.getLocator());
return true;
}
}
duplicado: http://stackoverflow.com/questions/805989/can -one-validate-marshalled-xml-with-jaxb-2-0 – lexicore
Por supuesto que no. Por favor tómese el tiempo y lea ambas preguntas cuidadosamente. –
según lexicore dupe exacto - votado para cerrar –