我正在编写代码以从文件中解组 XML。我事先不知道 XML 基于哪个模式,所以我尝试使用不同 Jaxb2Marshaller 实例形式的多个模式来解组它。
该方法需要:
尝试使用每个编组器解组 XML
如果成功,则返回结果对象
如果失败,请尝试下一个 marshaller
如果所有编组器都失败,则抛出带有最后一条错误消息的异常
这是当前代码:
private Object getObject(final byte[] data) throws MyException {
String lastErrorMessage = "";
for (final Jaxb2Marshaller marshaller : this.marshallers) {
try {
return marshaller.unmarshal(new StreamSource(new ByteArrayInputStream(data)));
} catch (final XmlMappingException e) {
LOGGER.warn("Invalid XML", e);
lastErrorMessage = e.getMessage();
}
}
throw new MyException(lastErrorMessage);
}
我觉得这种方法在不同的抽象层次上做了太多的事情:
迭代编组器
应用编组器
返回结果
捕捉异常
抛出异常
但我看不到简化它的方法。每个编组器都需要 try-catch 块(因为除了最后一个之外,我应该捕获并忽略这些 XmlMappingExceptions)。该块要么返回一个结果对象,要么返回 lastErrorMessage,在迭代下面需要它来抛出 MyException。
我能想到的唯一解决方案是创建一些人为的 Result 类,其中包含结果对象或错误消息,但感觉很笨拙。还有其他见解吗?
料青山看我应如是
精慕HU
相关分类