maven Apache CXF 3.4.2 JDK 11 -Wsdl 2 Java时出现问题,无法加载扩展类org.apache.cxf.common.util.ASMHelperImpl

dwbf0jvd  于 2022-11-02  发布在  Maven
关注(0)|答案(4)|浏览(744)

我尝试使用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>
mjqavswn

mjqavswn1#

当您尝试在IDE中查找ASMHelper类时,您可以看到类如下所示:public class ASMHelpercxf-core:3.3.0/cxf-core:3.3.1/cxf-core:3.3.5)所以它确实不是一个接口,但是当你在cxf-core:3.4.4中查看ASMHelper时,你会看到public interface ASMHelper是可以实现的。
因此,问题是由旧版本的库引起的。

ff29svar

ff29svar2#

在我的例子中,这个问题是通过对齐所有CXF类型依赖3.4.4解决的。

roqulrg3

roqulrg33#

请从您的pom.xml中删除cxf-api依赖项。它已过时,并且具有要加载的类ASMHelper.java,而不是要加载的正确包cxf-core jar中的同名接口。无需单独声明cxf-core,它以可传递的方式作为cxf-rt-frontend-jaxws的一部分包含在内

6mw9ycah

6mw9ycah4#

将插件版本从:
3.3.0

3.4.2

相关问题