поэтому сейчас, когда я проверяю 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
является правильным. Любой совет?
EDIT
Я следовал идее Balaise, и ниже приведено событие, которое я получил, когда в XML отсутствовал адрес1
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
равны нулю, я не могу дополнительно выяснить, что вызвало исключение, если я не проанализирую исключение, как я и просил изначально.