繁体   English   中英

使用绑定时 xjc 无法生成类

[英]xjc fails to generate classes when using bindings

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

java.lang.AssertionError: javax.xml.bind.JAXBException - 有链接异常:[com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 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 at com.sun.tools.xjc.reader.xmlschema.bindinfo.BIGlobalBinding]

从 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 项目现在从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>

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

假设您使用的是 Eclipse 或衍生产品(websphere studio、jDeveloper、Spring Tools Suite 等)。 如果没有,您可以使用 JDK 'xjc' 命令行工具,否则使用Maven 插件 JAXB2

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

在最近的 Eclipse 版本 (4.4+) 中,请遵循以下步骤:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM