Apache CXF + WSS4JOutInterceptor

时间:2018-03-19 04:12:14

标签: java apache cxf wss4j

我必须将WS-Security(UsernameToken)添加到SOAP请求标头中。如Apache CXF docs中所述,使用了WSS4JOutInterceptor。

Apache CXF版本:3.2.2

如果在maven依赖项下删除了SOAP请求/响应交换。

<dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.0</version>
</dependency>

如果存在上述依赖关系,则会出现以下错误

        org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
            at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(Unknown Source)
            at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(Unknown Source)
            at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(Unknown Source)
            at org.apache.wss4j.dom.util.WSSecurityUtil.prependChildElement(WSSecurityUtil.java:314)
            at org.apache.wss4j.dom.util.WSSecurityUtil.findWsseSecurityHeaderBlock(WSSecurityUtil.java:435)
            at org.apache.wss4j.dom.message.WSSecHeader.insertSecurityHeader(WSSecHeader.java:165)
            at org.apache.wss4j.dom.handler.WSHandler.doSenderAction(WSHandler.java:117)
            at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.access$100(WSS4JOutInterceptor.java:56)
            at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessageInternal(WSS4JOutInterceptor.java:265)
            at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:137)
            at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:124)
            at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
            at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533)
            at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:442)
            at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343)
            at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:296)
            at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
            at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139)
            at com.sun.proxy.$Proxy127.getSubscriberPlus(Unknown Source)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
            at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
            at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
            at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:243)

有没有办法让它与上面提到的依赖关系一起工作?

0 个答案:

没有答案