2
我的問題是:如果驗證與JAXB
檢查XML文檔的結構良好的對於它的架構。
特別是,我希望能夠使用「驗證程序」返回NULL在任何錯誤的情況下(問題minOccurs/maxOccurs,缺乏標籤等)。
如何擴展/修復我的代碼以實現我的請求?
UDInfo temp = new UDInfo();
try {
File fileXML = new File(pathXML);
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(pathXSD));
JAXBContext jaxbContext = JAXBContext.newInstance(UDInfo.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
jaxbUnmarshaller.setSchema(schema);
jaxbUnmarshaller.setEventHandler(new MyValidationEventHandler());
// if (validation is Ok) temp = (UDInfo) jaxbUnmarshaller.unmarshal(fileXML);
// else temp = null;
} catch (SAXException e) {
e.printStackTrace();
} catch (JAXBException ex) {
Logger.getLogger(unMarsh.class.getName()).log(Level.SEVERE, null, ex);
}
MyValidationEventHandler是:
public class MyValidationEventHandler implements ValidationEventHandler {
public boolean handleEvent(ValidationEvent event) {
System.out.println("\nEVENT");
System.out.println("SEVERITY: " + event.getSeverity());
System.out.println("MESSAGE: " + event.getMessage());
System.out.println("LINKED EXCEPTION: " + event.getLinkedException());
return true;
} }
商店的事件?驗證發生在調用'unmarshal'的時候。您將不得不將結果存儲在臨時變量中,然後檢查驗證處理程序的內容以查看是否找到錯誤。 –
我知道,但我希望我可以避免使用全局變量並以更「乾淨」的方式管理所有內容(例外,參數傳遞等)。 – Zany
您不需要全局變量。狀態可以在'MyValidationEventHandler'的實例中保存,並在解組操作之後進行檢查。 –