我试图通过此调用加密我的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)
答案 0 :(得分:0)
这种错误总是由于您的类路径上有XMlCipher
的多个引用而引起的。它可能是一个重复的xmlsec.jar
或另一个jar中XMlCipher
的另一个实例。
您有几个选项可以调试问题:
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>
有关详细信息和类似问题,请参阅docs:Weblogic 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中排除或提供范围标记。)