- Ho scritto alcune classi Java e le ho annotate con le annotazioni JAXB.
- Dopo che ho usato schemagen per generare un XSD.
- Poi ho costruire un oggetto grafico e radunate in un file XML.
- ho modificato il file XML in modo che non era più valido.
Volevo usare xsd nella speranza che l'unmarshalling di JAXB fallisse. Ma non è così. Perché?Perché JAXB non vuole convalidare
JAXB sta leggendo uno schema (se lo schema XML è errato, JAXB fornisce un'eccezione) ma giustamente JAXB ignora lo schema durante la lettura.
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);
L'XML scritto inizia così:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:customer xmlns:ns2="http://bla.com/">
Anche il ValidationEventCollector allegato non ha dato alcuna informazione:
unmarshaller.setEventHandler(new JAXBEventCollector());
JAXBEventCollector è:
class JAXBEventCollector extends ValidationEventCollector
{
@Override
public boolean handleEvent(ValidationEvent event)
{
System.out.println(event.getLocator());
return true;
}
}
Duplicate: http://stackoverflow.com/questions/805989/can -one-validate-marshalled-xml-with-jaxb-2-0 – lexicore
Ovviamente no. Si prega di prendere il tempo e leggere attentamente entrambe le domande. –
come da duplice errore lessicale - votato per chiudere –