使用Maven插件从XSD/WSDL生成Jakarta 4.0.0的Java代码

10

我已经浪费了多天的时间来尝试解决这个问题,为什么从WSDL/XSD生成代码这样看似简单的事情会变得如此复杂。有没有什么方法?我感觉我已经尝试过所有可能的方法,使用不同版本的jaxb绑定和实现。

我尝试使用以下插件:

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>

没有任何插件能够输出Jakarta Annotations,因为一些javax.xml Annotation或com.sun.* Class缺失而总是失败。此时我正在考虑自己编写一个插件,因为这太荒谬了,我只需要一个带有一些注释的简单POJO,在xsd或wsdl更改时不想自己编写它们。

你们有没有使用过适用于Jakarta 4的方法?

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
17

试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        *
    </parent>

    <artifactId>*</artifactId>

    <properties>
        <service.package>com.company</service.package>

        <jakarta.xml.ws-api.version>4.0.0</jakarta.xml.ws-api.version>
        <jaxws-rt.version>4.0.0</jaxws-rt.version>
        <jaxws-ri.version>4.0.0</jaxws-ri.version>
        <jaxws-maven-plugin.version>3.0.0</jaxws-maven-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.xml.ws</groupId>
            <artifactId>jakarta.xml.ws-api</artifactId>
            <version>${jakarta.xml.ws-api.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>${jaxws-rt.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-ri</artifactId>
            <version>${jaxws-ri.version}</version>
            <type>pom</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.sun.xml.ws</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>${jaxws-maven-plugin.version}</version>
                <configuration>
                    <wsdlDirectory>${basedir}/src/main/resources</wsdlDirectory>
                    <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                    <extension>true</extension>
                </configuration>
                <executions>
                    <execution>
                        <id>USER_INFO</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>user_info.xml.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>${service.package}.userinfo</packageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

现在所有的依赖都是jakarta.xml而不是javax.xml。


如何使用上述代码为集合类型参数生成setter方法。在从javax迁移到jakarta之前,我使用的是org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1和org.codehaus.mojo:jaxws-maven-plugin,但这似乎无法与com.sun.xml.ws插件一起使用。 - Chamila Wijayarathna
起作用得很好,实际上生成了奇怪的集合setter(就像其他任何xml ws插件一样) - Максим Цюпко
工作得很好,实际上为集合生成了奇怪的setter(就像其他任何xml ws插件一样)。 - undefined

0
我知道这个问题很久了,但是为了参考,以下插件今年已经进行了许多更新和改变。
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
仓库的URL已更新:https://github.com/highsource/jaxb-tools 现在它包含了所有与org.jvnet.jaxb相关的工具,包括maven-plugin和jaxb2-basics xjc-plugins。 您可以按照迁移指南升级到0.x版本到2.x版本(JAXB 2.3 javax)、3.x版本(JAXB 3 jakarta)或4.x版本(JAXB 4 jakarta,jdk11)。 例如,v4中的插件现在位于以下位置:
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb-maven-plugin</artifactId>
现在,jaxb2-basics已经准备好用于生成了。
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb-plugins</artifactId>
为了jaxb-plugins的运行时依赖:
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb-plugins-runtime</artifactId>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,