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



我们使用Java 8和apache 2.7.0来将wsdl转换为Java,它工作得很好。现在我们要升级到java 11,然后得到错误消息。

如何使用wsdl2java Apache cxf 3.3。

步骤尝试。

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>

不同版本的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

Apache CXF onjavax.*namespace的最新版本是3.5.5.

命令行

强烈建议升级CXF版本到3.5.5。如果不可能,那么在./lib文件夹下下载上述jar文件。

Maven使用

升级cxf-codegen-plugin3.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.x4.0.0

相关内容

  • 没有找到相关文章

最新更新