我在websphere 8.5中使用spring / wss4j来实现Web服务安全性。 Wss4j需要xmlsec.jar,我在WEB-INF / lib / xmlsec-2.0.4.jar下包含了xmlsec.jar。但是websphere类加载器无法找到DOMXMLSignatureFactory。
Caused by: java.lang.ClassNotFoundException: org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:599) ~[na:1.7.0]
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204) ~[bootstrap.jar:WAS855.SERV1 [cf011339.02]]
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:760) ~[na:1.7.0]
at java.lang.ClassLoader.loadClass(ClassLoader.java:737) ~[na:1.7.0]
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) ~[bootstrap.jar:WAS855.SERV1 [cf011339.02]]
at java.lang.ClassLoader.loadClass(ClassLoader.java:707) ~[na:1.7.0]
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf011339.02]]
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf011339.02]]
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:616) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf011339.02]]
at java.lang.ClassLoader.loadClass(ClassLoader.java:707) ~[na:1.7.0]
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:616) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf011339.02]]
at java.lang.ClassLoader.loadClass(ClassLoader.java:707) ~[na:1.7.0]
at javax.xml.crypto.dsig.XMLDSigSecurity.doGetImpl(XMLDSigSecurity.java:181) ~[na:na]
... 98 common frames omitted
我为APPLICATION和MODULE设置了PARENT_LAST。 Xmlsec-2.0.4.jar显示在"类加载器查看器"下。我已经检查了所有的lib,没有重复的DOMXMLSignatureFactory类。有人能帮助我吗?
答案 0 :(得分:1)
将xmlsec.jar添加为独立的共享库并将其与您的应用程序相关联,您可能会取得更大的成功。
答案 1 :(得分:1)
问题的根本原因是旧版本的xmlsec jars有javax类。我们使用了xmlsec-2.0.0 jar并且它有效。 我们从Santuario xmlsec jar问题https://issues.apache.org/jira/browse/SANTUARIO-358得到了提示。我还注意到最新的CXF 3.1.6版包含xmlsec-2.0.6.jar,它不包含javax包,这是解决这个问题的真正方法。
请使用最新的cxf包(> 3.0)。