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

Chr*_*ris 12 xml maven-jaxb2-plugin jaxb2-maven-plugin jaxws-maven-plugin

我浪费了很多天的时间试图弄清楚,看起来非常简单的事情(从 WSDL/XSD 生成代码)怎么会如此极其复杂。有什么办法吗?我觉得我已经尝试过所有这些,在不同的版本中使用不同的 jaxb 绑定和不同版本的实现

我尝试使用以下插件:

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
Run Code Online (Sandbox Code Playgroud)
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
Run Code Online (Sandbox Code Playgroud)
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>

Run Code Online (Sandbox Code Playgroud)

没有插件能够输出 jakarta 注释并且总是失败,因为某些 javax.xml 注释或 com.sun.* 类丢失。此时我正在考虑自己编写一个插件,因为这很荒谬,我只需要一个简单的 POJO 和一些注释,并且不想在 xsd 或 wsdl 更改时自己编写它们。

你们在 Jakarta 4 中使用过哪些方法?

小智 21

试试这个:

<?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>
Run Code Online (Sandbox Code Playgroud)

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