解组前如何了解架构

| 场景: 我正在尝试重构代码,该代码要求用户选择一个xml文件,该文件应该遵守2个给定架构中的任何一个。现在,该代码正尝试使用
Schema A Unmarshaller
解组。如果失败,它将尝试使用ѭ1解组。万一两者均失败,它将通过向用户显示正确的消息来拒绝文件。 问题: 这里的程序流程取决于
unmarshal()
抛出的
Exception
。 题: 有什么方法可以知道我们应该尝试通过哪个
unmarshaller
来解析文件,因此我们马上就寻求正确的解组器了吗?此外,这还将帮助我们拒绝所有不符合任何一个架构的不相关XML文件。     
已邀请:
有几种不同的选择: 选项#1-在多个域模型上创建JAXBContext 如果两个模式的模型兼容(完全独立或共享以相同方式注释的类型),则只需在所有域对象上创建JAXBContext,而不是每个模式都具有一个。 http://bdoughan.blogspot.com/2010/08/using-xmlanyelement-to-build-generic.html 选项#2-StAX输入 如果具有不同的XML模式意味着具有不同的根元素,那么我将创建一个StAX XMLStreamReader来查看根元素,然后选择要使用的编组器。然后解组该XMLStreamReader。 选项#3-首先验证XML文档 您可以使用javax.xml.validation API首先验证文档,然后根据结果选择解组器。     
也许您应该考虑使用SAX解析器,并在一个处理程序中手动处理两种结构。另一种可能性是创建一个允许两个选项的新模式。 如果我对模式有完全的控制权,那么我将考虑第二个选项。如果响应模式很简单和/或共享类似的结构,我将考虑使用SAX。     

要回复问题请先登录注册