Xml MOXY-多个XSD导入相同的模式定义-错误:';元素';已定义

Xml MOXY-多个XSD导入相同的模式定义-错误:';元素';已定义,xml,xsd,jaxb,eclipselink,moxy,Xml,Xsd,Jaxb,Eclipselink,Moxy,我有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 import

我有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"
这些XSD由外部源提供,不能更改

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

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实现中不存在,并且XSD在切换到MOXY后没有改变

问题:

  • XSD以这种方式导入/包含是否合法/有效

  • 既然我不能修改XSD,可能的解决办法是什么?可能是对绑定xjb文件的修改


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

  • 不幸的是,W3CXSD建议允许在多次导入XSD时发生依赖于实现的行为。(见中的最后一个注释)
  • 根据构建MOXy的底层XSD处理器,您可以设置一个标志来允许/禁止多次导入。有关Xerces的信息,请参阅;有关撒克逊,请参见
  • 另请参见



    1注意
    multipleSchemaImports

    的语义通过在MyEntityResolver.java类中放置以下行关闭错误检查来解决问题:

    System.setProperty("com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.noCorrectnessCheck", "true");
    

    我以前在我的主java类中尝试过这一点,显然这是一个错误的地方

    谢谢,这给了我一些东西要研究。不幸的是,莫西似乎没有很多追随者来帮助。也许我会在我的灵魂里插上这面撒克逊旗?我在莫西身上找到的例子似乎没有涵盖这个问题。我还使用了noCorrectnessCheck标志(显示在:),但这似乎没有多大帮助
    遵守所有模式
    多模式导入
    通常通过解析器配置文件、命令行开关或可能的API参数进行设置。嗯,我不确定如何将其应用于MOXY术语,所有这些东西对我来说都是新的。在这一点上,我半临时读取文件,并删除手动导入行。但这太老套了,我可能无法自食其力,看看能不能帮上忙。如果没有,很抱歉,但是您必须深入了解JAXB/MOXy帮助的更深层来源。祝你好运。很高兴你能解决你的问题。如果您确定了仍然允许进行验证的解决方案,请更新您的答案。谢谢