java.lang.NoSuchMethodError:org.apache.xml.security.encryption.XMLCipher.martial(Document; ReferenceList;)

时间:2014-12-02 12:52:38

标签: weblogic xmlsec

我试图通过此调用加密我的XMl:

XMlCipher.martial(Document context,ReferenceList referenceList)

为此,Project引用了xmlsec-1.5.3.jar

我能够在weblogic服务器上成功构建和部署代码,但是在执行后我在日志中收到以下错误。

Caused by: java.lang.NoSuchMethodError: 
org.apache.xml.security.encryption.XMLCipher.martial(Lorg/w3c/dom/Document;Lorg/apache/xml/security/encryption/ReferenceList;)Lorg/w3c/dom/Element;
at com.ally.util.encryption.EncryptionUtil.generateEncryptedXML(EncryptionUtil.java:381)
at com.ally.util.encryption.EncryptionUtil.getEnryptedXMLDocument(EncryptionUtil.java:443)
at com.ally.partner.fis.acctinq.FISSoapHandler.getFISEncryptedHeader(FISSoapHandler.java:154)

2 个答案:

答案 0 :(得分:0)

这种错误总是由于您的类路径上有XMlCipher的多个引用而引起的。它可能是一个重复的xmlsec.jar或另一个jar中XMlCipher的另一个实例。

您有几个选项可以调试问题:

  • 编辑war文件以删除重复的jar和/或XMlCipher
  • 的不同版本
  • 使用jconsole连接到您的weblogic托管服务器并查看类路径。看看你是否注意到包含xmlsec.jar的另一个实例

您可能需要通过在weblogic.xml中指定以下内容来告诉weblogic更喜欢.war / .ear文件中的类实例:

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

<wls:container-descriptor>
     <wls:prefer-application-packages>
         <wls:package-name>org.apache.xml.security.*</wls:package-name>
     </wls:prefer-application-packages>
</wls:container-descriptor>

有关详细信息和类似问题,请参阅docsWeblogic 10.3.1.0 is using com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar... I want to use commons-net-2.0.jar from my code

答案 1 :(得分:0)

我意识到你没有提到Maven或SoapUI的使用,但我在尝试使用soapui-maven-plugin并希望发布我的解决方案以获得希望帮助时收到类似的异常(java.lang.NoSuchMethodError: org.apache.xml.security.encryption.XMLCipher.setSecureValidation

我的修复是将xml-security依赖项添加到pom.xml中的soapui-maven-plugin,如下所示:

<!-- To run, enter this command from the module directory:  mvn soapui:test -->
<build>
 <plugins>
    <plugin>
        <groupId>com.smartbear.soapui</groupId>
        <artifactId>soapui-maven-plugin</artifactId>
        <version>5.1.1</version>
        <dependencies>
            <dependency>
                <groupId>org.apache.santuario</groupId>
                <artifactId>xmlsec</artifactId>
                <version>1.5.2</version>
            </dependency>
        </dependencies>
        <configuration>
            <projectFile>src/test/soap-ui/your-soapui-xml-file.xml</projectFile>
        </configuration>
    </plugin>
</plugins>

在我的情况下,我在项目的其他任何地方都没有xml安全依赖项。

在其他情况下,似乎有些人可能会遇到此错误,因为在整个项目中存在多个xml安全依赖项(并且它们是冲突的,就像一个答案已经暗示的那样)。因此,如果上述修复在这种情况下对您不起作用,您可能需要查看项目中的哪些依赖项包括xml安全性,并决定要包含哪个依赖项以及要排除哪个依赖项(例如,使用Maven的在给定的pom中排除或提供范围标记。)