使用绑定时,xjc无法生成类

时间:2014-03-26 19:03:38

标签: jaxb jaxb2

这曾经用于所有以前版本的jaxb,我已经升级到jaxb的2.2.7版本,现在xjc引发了以下内容:

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

3 个答案:

答案 0 :(得分:4)

从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

答案 1 :(得分:0)

假设您使用的是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方面应用于包含.xsd模式的Eclipse项目,以转换为jaxb类;右键单击项目>属性>项目方面> JAXB;可以使用进一步的配置,并允许您选择哪个库提供JAXB实现(最近JRE具有它)以及JAXB版本。 >好的>应用。
  • 选择所涉及的.xsd文件,右键单击>生成> JAXB类...至少提供包名称(例如从XSD名称空间中提取)>完成
  • Eclipse控制台视图提供有关生成文件的反馈

答案 2 :(得分:0)

随着整个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>

这至少在类似问题上对我有帮助。