首页 > 解决方案 > NoSuchMethodError:我需要什么版本的 Apache Xml Security?

问题描述

我得到了这个例外

java.lang.NoSuchMethodError: org.apache.xml.security.utils.XMLUtils.decode

然后我更新了我的依赖项并转移到另一个类似的异常,我有一段时间无法解决:

当我的模块在调用此方法时收到请求时,我收到 NoSuchMethodError

WebServiceTemplate client = ...;
client.marshalSendAndReceive(req, new ActionCallback("http://samples/RequestOrder"));

它抛出

java.lang.NoSuchMethodError: org.apache.xml.security.encryption.AbstractSerializer: method <init>()V not found
    at org.apache.cxf.ws.security.wss4j.StaxSerializer.<init>(StaxSerializer.java:62)

我的依赖项的(至少我认为)相关部分

        <dependency>
            <groupId>org.apache.ws.security</groupId>
            <artifactId>wss4j</artifactId>
            <version>1.6.15</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-security</artifactId>
            <version>3.0.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-security</artifactId>
            <version>3.3.6</version>
        </dependency>

我正在查看多个版本,org.apache.xml.security.encryption看起来这些版本中的任何一个都没有这种方法。知道什么是正确的版本组合吗?

作为旁注,我还发现了这个库并认为这会有所帮助,但它似乎与上述有所不同<groupId>org.apache.ws.security</groupId>

<dependency>
    <groupId>org.apache.wss4j</groupId>
    <artifactId>wss4j</artifactId>
    <version>2.3.0</version>
    <type>pom</type>
</dependency>

标签: javawss4j

解决方案


我有类似的问题,并在网上尝试了可能的解决方案,但无济于事。一些文件建议依赖与其他依赖不匹配是关键,就像这里

关于这个确切报告的错误,我不断更改以下依赖项的版本,最终达到了这个,这是发布此答案时的最新版本。

<dependency>
    <groupId>org.apache.santuario</groupId>
    <artifactId>xmlsec</artifactId>
    <version>2.1.4</version>
</dependency>

但请记住确保如果您有以下依赖项,请排除 xmlsec 的依赖项:

<dependency>
    <groupId>org.springframework.ws</groupId>
    <artifactId>spring-ws-security</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.santuario</groupId>
            <artifactId>xmlsec</artifactId>
        </exclusion>
    </exclusions>
</dependency>

推荐阅读