- Я написал несколько классов Java и аннотировал их аннотациями JAXB.
- После этого я использовал schemagen для генерации xsd.
- Затем я строю граф объектов и упорядочиваю егов файл xml.
- Я изменил файл xml так, чтобы он больше не действовал.
Я хотел использовать xsd в надежде, что демонтирование JAXB завершится неудачно.Но это не так.Почему?
JAXB читает схему (если XML схемы неверен, JAXB выдает исключение), но кажется, что JAXB игнорирует схему во время чтения.
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);
Запускается написанный XMLвот так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:customer xmlns:ns2="http://bla.com/">
Даже подключенный ValidationEventCollector не дал никакой информации:
unmarshaller.setEventHandler(new JAXBEventCollector());
JAXBEventCollector:
class JAXBEventCollector extends ValidationEventCollector
{
@Override
public boolean handleEvent(ValidationEvent event)
{
System.out.println(event.getLocator());
return true;
}
}