так что прямо сейчас, когда я проверяю XML файл с помощью схемы XML, я могу только узнать, сбой или пропуск, и если я хочу знать, почему это не удается, мне нужно посмотреть сообщение об ошибке, например
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'City'. One of '{Address1}' is expected.]
В приведенном выше примере он терпит неудачу, потому что мне не хватает тега Address1
. Мой вопрос: Когда проверка завершена, могу ли я узнать, какой тег вызывает сбой? Это потому, что мне нужно обрабатывать эти ошибки по-разному для каждого важного отсутствующего тега. Прямо сейчас моя мысль
FileInputStream inputStream = null;
try{
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(config.getXmlSchema()));
JAXBContext context = JAXBContext.newInstance(PackageLabel.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);
inputStream = new FileInputStream(xmlFile);
pl = (PackageLabel) unmarshaller.unmarshal(inputStream);
} catch (JAXBException e) {
if(pl.getAddress1() == null){
System.out.println("Invalid Mailing Address");
}
//EDIT: CANNOT DO THIS, SINCE pl IS NULL AT THIS POINT
//Some more logics on how to handle important missing-tags
...
}finally{
if(inputStream != null) inputStream.close();
}
Однако, я не думаю, что написать логику внутри catch clause
правильно. Любой совет?
ИЗМЕНИТЬ
Я последовал за идеей Balaise, а ниже - это событие, которое я получил, когда XML отсутствовал Address1
EVENT
SEVERITY: 2
MESSAGE: cvc-complex-type.2.4.a: Invalid content was found starting with element 'City'. One of '{Address1}' is expected.
LINKED EXCEPTION: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'City'. One of '{Address1}' is expected.
LOCATOR
LINE NUMBER: 4
COLUMN NUMBER: 11
OFFSET: -1
OBJECT: null
NODE: null
URL: null
Однако, как NODE
, так и OBJECT
являются нулевыми, я не могу продолжить исследование того, что вызывает исключение, если я не разобрал исключение, из которого я первоначально спросил.