【问题标题】:How can one make use of classes generated by the cxf-xjc-plugin in Java 11?如何使用 Java 11 中的 cxf-xjc-plugin 生成的类?
【发布时间】:2020-11-07 17:51:10
【问题描述】:

使用带有 Java 11 的 Apache cxf-xjc-plugin 可以正常工作,我能够从 xsd 文件生成 Java 源代码。尝试通过 JAXB 使用这些 Java 类时会出现问题:Java 11 的 JAXB 的可用实现是 org.glassfish.jaxb:jaxb-runtimeorg.eclipse.persistence:org.eclipse.persistence.moxy,它们都将包中的所有类 javax.xml.bind 移动到 jakarta.xml.bind。这是一个问题,因为 cxf-xjc-plugin 生成的 Java 类是使用包 javax.xml.bind 中的注释进行注释的。

我认为有两种可能的解决方案:

  • 是否有使用原始 javax.xml.bind 包的 JAXB(针对 Java 11)的实现?
  • 有没有办法配置 cxf-xjc-plugin 使用包 jakarta.xml.bind 生成类注释?

【问题讨论】:

  • 当前解决方法如下所示:find . -name '*.java' -print0 | xargs -0 perl -pi -e 's|\Qjavax.xml.bind\E|jakarta.xml.bind|g',使用 maven exec 插件运行。不太好

标签: java maven jaxb xjc cxf-xjc-plugin


【解决方案1】:

您可以在生成的文件中使用maven-antrun-pluginjavax.xml.bind 替换为jakarta.xml.bind

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>fix-sources</id>
            <phase>process-sources</phase>
            <configuration>
                <target>
                    <replace token="javax.xml.bind." value="jakarta.xml.bind."dir="${project.build.directory}/generated/src/main/java/path/to/sources">
                        <include name="**/*.java"/>
                    </replace>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2012-03-31
    • 2019-08-18
    • 2020-02-27
    相关资源
    最近更新 更多