使用 Java 和 Maven 导入 WSDL,而不使用已弃用的库

问题描述 投票:0回答:2

我正在尝试更新 Java 项目的 Java 版本(使用 intellij 作为 IDE)。

所以,我安装了 JDK 17,发现 wsimport 被删除了。但是是否有任何未弃用的解决方案/替代方案,以便我可以导入和生成 java 类?

我还发现我仍然可以使用 wsimport (仅当我设置为 java 路径 Java 8 时)并使用 maven jaxws-rt 运行代码,但是 2022 年的包看起来也已经被弃用了,因为我只能使用2.x版本。

<dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.5</version>
    </dependency>

已经有“3.0.2”版本,但是如果我更新它,当我执行“mvn clean install”时,我会收到编译错误: 包 javax.jws 不存在

以及当我尝试使用该服务时出现运行时错误: javax.xml.ws.WebServiceException:未找到提供程序 com.sun.xml.internal.ws.spi.ProviderImpl 在 javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61) ~[jaxws-api-2.3.1.jar:?]

这是我的 pom.xml 文件:

<properties>
    <log4j.version>2.17.0</log4j.version>
</properties>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>rm.ccr.JCCUI</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <!-- Copy project dependency -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <!-- exclude junit, we need runtime dependency only -->
                        <includeScope>runtime</includeScope>
                        <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/resources</directory>
            <includes>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>
<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.jgoodies/jgoodies-common -->
    <dependency>
        <groupId>com.jgoodies</groupId>
        <artifactId>jgoodies-common</artifactId>
        <version>1.8.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.5.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>javax.media</groupId>
        <artifactId>jai_core</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.5</version>
    </dependency>

<!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>rt</artifactId>
        <version>3.0.1</version>
    </dependency>

    <dependency>
        <groupId>com.sun.media</groupId>
        <artifactId>jai_imageio</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>com.jgoodies</groupId>
        <artifactId>jgoodies-forms</artifactId>
        <version>1.9.0</version>
    </dependency>
    <dependency>

所以,这实际上是两个问题:

1-如何仅使用 jdk17 和未弃用的库生成 wsdl java 类。

2- 如何在 Java 中使用 SOAP 服务而不使用已弃用的库?

java soap wsdl
2个回答
1
投票

我也遇到过同样的问题。因此,我使用 cfx 插件从 WSDL 生成类文件。之后我使用 maven-replacer-plugin 将 javax.xml.bind 导入替换为 jakarta.xml.bind。

            <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>1.4.1</version>
            <executions>
                <execution>
                    <id>replace-for-jakarta</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                    <configuration>
                        <filesToInclude>target/generated-sources/**/*.java</filesToInclude>
                        <preserveDir>true</preserveDir>
                        <replacements>
                            <replacement>
                                <token>javax.xml.bind</token>
                                <value>jakarta.xml.bind</value>
                            </replacement>
                            <replacement>
                                <token>javax.xml.ws</token>
                                <value>jakarta.xml.ws</value>
                            </replacement>
                            <replacement>
                                <token>javax.jws</token>
                                <value>jakarta.jws</value>
                            </replacement>
                        </replacements>
                    </configuration>
                </execution>
            </executions>
        </plugin>

0
投票

我尝试过这种方法,但没有任何作用。它不会替换文件中的任何内容。你把这个插件配置放在哪里了?

© www.soinside.com 2019 - 2024. All rights reserved.