CXF 3.0.2在weblogic10.3

时间:2016-02-24 12:10:23

标签: weblogic cxf

我们正在尝试使用涉及CXF的CXF框架进行web服务调用 - ws安全性和部署在weblogic 10.3中的应用程序,但是接收到以下异常并且看起来像是获取了weblogic特定的jar,尽管xercesimpl jar存在在/ WEB-INF / lib中的应用程序中。

尝试了选项,但没有帮助:

  1. 使用设置weblogic容器描述符 web-inf偏好
  2. 是的。

    1. 将JVM参数或系统属性设置为 -
    2. -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

      1. 将xercesimpl jar添加到maven pom。

        异常

        ]] ServletException的根本原因。 java.lang.AssertionError:UNIMPLEMENTED         在weblogic.xml.domimpl.NodeImpl.setTextContent(NodeImpl.java:216)         at org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.writeAttribute(XmlWriterToTree.java:137)         at org.apache.jcp.xml.dsig.internal.dom.XmlWriterToTree.writeNamespace(XmlWriterToTree.java:114)         at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.marshal(DOMXMLSignature.java:211)         at 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)         at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.access $ 100(WSS4JOutInterceptor.java:54)         at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor $ WSS4JOutInterceptorInternal.handleMessageInternal(WSS4JOutInterceptor.java:282)         at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor $ WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:154)         at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor $ WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:141)         在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)         at 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

1 个答案:

答案 0 :(得分:2)

我终于在没有修改任何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。

同样的问题也导致了问题中的UNIMPLEMENTED错误

所以我的解决方案是 1)将saaj-impl放在classpath中。如果您使用的是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>

3)通过节点管理器重新启动服务器,并且右侧的CXF WS-Security应该正常工作

希望它有所帮助!