【问题标题】:xjc fails to generate classes when using bindingsxjc 使用绑定时无法生成类
【发布时间】:2014-03-26 19:03:38
【问题描述】:

这曾经适用于所有以前版本的 JAXB。我已经升级到 JAXB 2.2.7 版,现在xjc 抛出以下内容:

java.lang.AssertionError: javax.xml.bind.JAXBException - 带有链接异常: [com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 IllegalAnnotationExceptions 的计数
com.sun.xml.bind.api.impl.NameConverter 是一个接口,而 JAXB 无法处理接口。 此问题与以下位置有关: 在 com.sun.xml.bind.api.impl.NameConverter 在公共 com.sun.xml.bind.api.impl.NameConverter com.sun.tools.xjc.reader.xmlschema.bindinfo.BIGlobalBinding.nameConverter 在 com.sun.tools.xjc.reader.xmlschema.bindinfo.BIGlobalBinding ]

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    由于整个 JAXB 项目现在从 https://github.com/javaee/jaxb-v2 移动到 https://github.com/eclipse-ee4j/jaxb-ri,包括 Maven 依赖项,我从

    更新了我的 pom.xml
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>${jaxb-xjc.version}</version>
        </dependency>
    
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>${jaxb.version}</version>
        </dependency>
    

        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>${jaxb-xjc.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>${jaxb.version}</version>
        </dependency>
    

    这至少帮助我解决了类似的问题。

    【讨论】:

      【解决方案2】:

      从 jaxb 2.2.7 开始,他们将 jaxb 库拆分为多个组件。 xjc 现在与任何特定的 jaxb 运行时分离。要解决此问题,请确保在执行 xjc 时在类路径上提供 jaxb 运行时。详细信息可以在他们的发行说明中找到:https://jaxb.java.net/nonav/2.2.7/docs/release-documentation.html#a-2-2-7

      参考实现可以在maven central上找到,坐标如下: com.sun.xml.bind:jaxb-impl:2.2.7

      【讨论】:

      • 链接已损坏,重定向指向 jaxb-v2 的简单实现,并且答案没有提供关于什么的线索?错过配置了吗?
      【解决方案3】:

      假设您使用的是 Eclipse 或衍生产品(websphere studio、jDeveloper、Spring Tools Suite,...)。如果没有,您可以使用 JDK 'xjc' command line tool,否则使用 Maven Plug-in JAXB2)

      您必须为项目显式配置 JAXB(不同的项目可能具有不同的配置以使事情变得简单!)

      在最新的 Eclipse 版本 (4.4+) 中,请执行以下步骤:

      • 确保在 Eclipse 中安装了 Eclipse Web Tools platform
      • 将 JAXB facet 应用于包含 .xsd 模式的 Eclipse 项目以转换为 jaxb 类;右键单击项目 > 属性 > 项目构面 > JAXB;可以进行进一步的配置,并允许您选择哪个库提供 JAXB 实现(最近的 JRE 有)以及 JAXB 版本。 > 确定 > 应用。
      • 选择 .xsd 文件,右键单击 > 生成 > JAXB 类 ...至少提供一个包名(例如,从 XSD 命名空间中绘制)> 完成
      • Eclipse 控制台视图提供有关生成文件的反馈

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        相关资源
        最近更新 更多