MOXY- Multiple XSDs import the same schema definition- error: 'element' is already defined

MOXY- Multiple XSDs import the same schema definition- error: 'element' is already defined

我有 3 个 XSD 链接在一起:

schema1.xsd
    imports namespace="x:y:z" schemaLocation= "schemaDefinitions.xsd"
    includes schema2.xsd
schema2.xsd
    imports namespace="x:y:z" schemaLocation= "schemaDefinitions.xsd"
    includes schema3.xsd
schema3.xsd
    imports namespace="x:y:z" schemaLocation= "schemaDefinitions.xsd"

这些 xsds 由外部来源提供,无法更改。

以前我的项目使用标准 JAXB,类 在编译时创建。我目前正在切换到 Dynamic JAXB MOXY(运行时),现在我的 DynamicJAXBContextFactory.createContextFromXSD() 行收到以下错误,该行使用 schema1.xsd 作为 FileInputStream:

Exception in thread "main" java.lang.ExceptionInInitializerError at 
    TestTool.JavaRoot.TestTools.MainTool.main(MainTool.java:55)
    Caused by: Exception [EclipseLink-50040] (Eclipse Persistence Services - 
    2.6.2.v20151217-774c696): 
    org.eclipse.persistence.exceptions.JAXBException
Exception Description: Error creating DynamicJAXBContext.
    Internal Exception: org.xml.sax.SAXParseException; systemId: 
    file:///public/SITE1/config/schema/SchemaDefinitions.xsd; lineNumber: 
    xyz; columnNumber: xyz; 'xyz' is already defined

我确定原因是所有三个模式都导入了 schemaDefinitions.xsd。如果我从 schema2 和 schema3 中删除 import 语句,错误就解决了。以前的 jaxb 实现不存在此错误,并且自从切换到 MOXY 后 xsds 没有改变。

问题:

  1. xsds以这种方式导入/包含是否合法/有效

  2. 由于我无法修改 XSD,有哪些可行的解决方法?也许修改绑定 xjb 文件?

另一位回答者可能能够在重复声明方面直接帮助任何 MOXy 配置支持,但纯粹是 XSD 级别:

  1. 不幸的是,W3C XSD 建议允许在多次导入 XSD 时发生依赖于实现的行为。 (请参阅 4.2.3 References to schema components across namespaces 中的最后一条注释)
  2. 根据构建 MOXy 的基础 XSD 处理器,您可以设置标志以 allow/disallow 多次导入。对于 Xerces,请参阅 honour-all-schemaLocations; for Saxon, see multipleSchemaImports1

另见


1 注意 pending improvement 关于 multipleSchemaImports 的语义。

通过将以下行放在 MyEntityResolver.java class:

中关闭错误检查解决了这个问题
System.setProperty("com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.noCorrectnessCheck", "true");

我之前在主 java class 中尝试过这个,显然那是错误的地方!