如何使用命令行使用 wsdl2java 3.3.X 版本的 Apache cxf java 11

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

我们使用带有 apache 2.7.0 的 Java 8 将 wsdl 转换为 java,并且工作正常。现在我们想升级到 java 11 然后收到错误消息。

如何使用命令行将 wsdl2java Apache cxf 3.3.X 版本与 java 11 一起使用。

尝试过的步骤。

Apache 3.3.0 或 Apache 3.3.1 或 Apache 3.3.2

尝试使用以下命令进行转换时

wsdl2java -client -autoNameResolution C:\SAMPLE.wsdl

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/Service
        at org.apache.cxf.tools.wsdlto.frontend.jaxws.JAXWSContainer.isJaxws22(JAXWSContainer.java:64)
        at org.apache.cxf.tools.wsdlto.frontend.jaxws.JAXWSContainer.getServiceTarget(JAXWSContainer.java:61)
        at org.apache.cxf.tools.wsdlto.frontend.jaxws.JAXWSContainer.validate(JAXWSContainer.java:68)
        at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:172)
        at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
        at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
        at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105)
        at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
        at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
        at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:185)
Caused by: java.lang.ClassNotFoundException: javax.xml.ws.Service
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 10 more

还尝试将外部 jar 文件添加到 CFX lib 文件夹。

<!-- API, java.xml.bind module -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.2</version>
</dependency>
    
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.2</version>
</dependency>

或者也试试这个

<dependencies>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

Java版

openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment Temurin-11.0.16+8 (build 11.0.16+8)
OpenJDK 64-Bit Server VM Temurin-11.0.16+8 (build 11.0.16+8, mixed mode)

它不适用于命令行,相反我尝试在 pom.xml 中使用 cxf-codegen-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>src/main/resources/GIMA2Java.wsdl</wsdl>
                                <faultSerialVersionUID>1</faultSerialVersionUID>
                                <extraargs>
                                    <extraarg>-autoNameResolution</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.3.0</version>
    </dependency>
</dependencies>
java wsdl2java
1个回答
0
投票

不同版本的 Apache CFX 3.3.x 不包含所有必需的库。

注意: Apache 不支持这些版本。我没有比较所有版本的库。这些版本可能需要一些其他库。

Apache CXF 3.3.0 中缺少库

  • javax.xml.soap-api.1.4.0
  • jakarta.xml.ws-api.2.3.3

Apache CXF 3.3.2 中缺少库

  • jakarta.xml.ws-api.2.3.3

javax.*
命名空间上最新版本的 Apache CXF 是
3.5.5
.

命令行

强烈推荐将CXF版本升级到

3.5.5
。 如果不可能,请在
./lib
文件夹下下载提到的罐子。

Maven 用法

升级

cxf-codegen-plugin
3.3.5

另外将此依赖项添加到

pom.xml

<dependency>
    <groupId>jakarta.xml.ws</groupId>
    <artifactId>jakarta.xml.ws-api</artifactId>
    <version>${jakarta.xml.ws-api.version}</version>
</dependency>

选择一个合适的

${jakarta.xml.ws-api.version}
这种依赖关系很重要,因为有关命名空间(包)的重大变化。

  1. 对于
    javax.*
    命名空间使用
    2.3.3
    (基于堆栈跟踪,在这种情况下这是正确的选择)
  2. jakarta.*
    命名空间使用
    3.x
    4.0.0
© www.soinside.com 2019 - 2024. All rights reserved.