我尝试使用apache cxf 3.4.2和JDK 11从wsdl生成Java代码。出现以下异常
在线程“main”中出现异常。org.apache.cxf.bus.extension.ExtensionException:无法加载扩展类org.apache.cxf.common.util.ASMHelperImpl不兼容类更改错误:类org.apache.cxf.common.util.ASMHelperImpl无法实现org.apache.cxf.common.util.ASMHelper,因为它不是接口(org.apache.cxf.common.util.ASMHelper位于加载程序“app”的未命名模块中)
以下是pom.xml的片段
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
<version>2.7.18</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>3.4.2</version>
</dependency>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.3.0</version>
<dependencies>
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.basedir}/src/main/generated</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/test.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/test.wsdl</wsdlLocation>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-verbose</extraarg>
<extraarg>-autoNameResolution</extraarg>
<extraarg>-p</extraarg>
<extraarg>com.cxf</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
4条答案
按热度按时间mjqavswn1#
当您尝试在IDE中查找
ASMHelper
类时,您可以看到类如下所示:public class ASMHelper
(cxf-core:3.3.0
/cxf-core:3.3.1
/cxf-core:3.3.5
)所以它确实不是一个接口,但是当你在cxf-core:3.4.4
中查看ASMHelper
时,你会看到public interface ASMHelper
是可以实现的。因此,问题是由旧版本的库引起的。
ff29svar2#
在我的例子中,这个问题是通过对齐所有CXF类型依赖3.4.4解决的。
roqulrg33#
请从您的pom.xml中删除
cxf-api
依赖项。它已过时,并且具有要加载的类ASMHelper.java
,而不是要加载的正确包cxf-core
jar中的同名接口。无需单独声明cxf-core
,它以可传递的方式作为cxf-rt-frontend-jaxws
的一部分包含在内6mw9ycah4#
将插件版本从:
3.3.0
至
3.4.2