我们正在尝试使用CXF框架进行web服务调用,涉及CXF-ws安全性和部署在weblogic 10.3中的应用程序,但是接收到以下异常并且看起来像是获取了weblogic特定的jar,尽管应用程序中存在xercesimpl jar在/ WEB-INF/lib中.
选项尝试,但没有帮助:
是的.
-Djavax.xml.soap.MessageFactory = com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl -Djavax.xml.soap.SOAPFactory = com.sun.xml.internal.messaging.saaj.soap.ver1_1 .SOAPFactory1_1Impl -Djavax.xml.soap.SOAPConnectionFactory = weblogic.wsee.saaj.SOAPConnectionFactoryImpl
将xercesimpl jar添加到maven pom.
例外
]] ServletException的根本原因.java.lang.AssertionError:在weblogic.xml.domimpl.NodeImpl.setTextContent(NodeImpl.java:216)在org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.writeAttribute(XmlWriterToTree.java:137)未实现在org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.writeNamespace(XmlWriterToTree.java:114)在org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.marshal(DOMXMLSignature.java:211)在org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:329)在org.apache.wss4j.dom.message.WSSecSignature.computeSignature(WSSecSignature.java:578)在org.apache. wss4j.dom.action.SignatureAction.execute(SignatureAction.java:151)在org.apache.wss4j.dom.handler.WSHandler.doSenderAction(WSHandler.java:226)在org.apache.cxf.ws.security.wss4j.位于org.apache.cxf.ws.security.wss4j.WSS4JOu的org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor $ WSS4JOutInterceptorInternal.handleMessageInternal(WSS4JOutInterceptor.java:282)中的WSS4JOutInterceptor.access $ 100(WSS4JOutInterceptor.java:54)位于org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor $ WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:141)的tInterceptor $ WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:154)org.apache.cxf.phase.PhaseInterceptorChain.doIntercept( PhaseInterceptorChain.java:307)enter code here
在org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423)在org.apache.cxf .endpoint.ClientImpl.invoke(ClientImpl.java:326)在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279)在org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:98 )org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:138)
谢谢,Soumya
我终于在不修改任何weblogic启动脚本的情况下找到了答案(在CXF 2.7.0和weblogic 10.3.6上测试)
出现此问题的原因是 CXF 与 SAAJ 的 weblogic 实现不兼容。http://cxf.apache.org/docs/application-server-specific-configuration-guide.html
1. 问:我遇到此错误:javax.xml.ws.WebServiceException:无法创建 SAAJ 工厂实例。答:请确保类路径中有 saaj-impl-1.3.jar,并确保您的应用程序选择此文件而不是 weblogic 文件。
同样的问题也导致问题中出现未实现的错误
所以我的解决方案是1)将saaj-impl放在类路径中。如果使用maven,请将依赖放在pom.xml中
2)在weblogic.xml(在您的资源文件夹中)中放置
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>com.sun.xml.messaging.saaj.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
Run Code Online (Sandbox Code Playgroud)
3) 通过节点管理器重新启动服务器,CXF WS-Security 应该可以正常工作
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |