Repository: cxf Updated Branches: refs/heads/master 88d03f562 -> b9191338f
[CXF-7411]ensure all tests passed with java9 EA kit(9-ea+174) Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/b9191338 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/b9191338 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/b9191338 Branch: refs/heads/master Commit: b9191338ff4c00d36251adc352677212b0d6d7d0 Parents: 88d03f5 Author: Freeman Fang <[email protected]> Authored: Wed Jun 21 10:45:41 2017 +0800 Committer: Freeman Fang <[email protected]> Committed: Wed Jun 21 10:45:41 2017 +0800 ---------------------------------------------------------------------- .../ws/security/wss4j/WSS4JInInterceptor.java | 37 ++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/b9191338/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java ---------------------------------------------------------------------- diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java index 471a885..1d1c27f 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java @@ -66,6 +66,7 @@ import org.apache.wss4j.common.crypto.Crypto; import org.apache.wss4j.common.crypto.ThreadLocalSecurityProvider; import org.apache.wss4j.common.ext.WSSecurityException; import org.apache.wss4j.dom.WSConstants; +import org.apache.wss4j.dom.WSDataRef; import org.apache.wss4j.dom.engine.WSSConfig; import org.apache.wss4j.dom.engine.WSSecurityEngine; import org.apache.wss4j.dom.engine.WSSecurityEngineResult; @@ -279,7 +280,7 @@ public class WSS4JInInterceptor extends AbstractWSS4JInterceptor { originalNode = elem.cloneNode(true); } WSHandlerResult wsResult = engine.processSecurityHeader(elem, reqData); - importNewDomToSAAJ(doc, elem, originalNode); + importNewDomToSAAJ(doc, elem, originalNode, wsResult); Element header = SAAJUtils.getHeader(doc); Element body = SAAJUtils.getBody(doc); header = (Element)DOMUtils.getDomElement(header); @@ -343,7 +344,8 @@ public class WSS4JInInterceptor extends AbstractWSS4JInterceptor { reqData = null; } } - private void importNewDomToSAAJ(SOAPMessage doc, Element elem, Node originalNode) throws SOAPException { + private void importNewDomToSAAJ(SOAPMessage doc, Element elem, + Node originalNode, WSHandlerResult wsResult) throws SOAPException { if (DOMUtils.isJava9SAAJ() && originalNode != null && !originalNode.isEqualNode(elem)) { //ensure the new decrypted dom element could be imported into the SAAJ @@ -372,8 +374,39 @@ public class WSS4JInInterceptor extends AbstractWSS4JInterceptor { } elem.getOwnerDocument().getDocumentElement().getFirstChild(). getNextSibling().replaceChild(newNode, node); + List<WSSecurityEngineResult> encryptResults = wsResult.getActionResults().get(WSConstants.ENCR); + if (encryptResults != null) { + for (WSSecurityEngineResult result : wsResult.getActionResults().get(WSConstants.ENCR)) { + for (WSDataRef dataRef + : (List<WSDataRef>)result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS)) { + if (dataRef.getProtectedElement() == node) { + dataRef.setProtectedElement((Element)newNode); + } + } + } + } + + List<WSSecurityEngineResult> signedResults = new ArrayList<>(); + if (wsResult.getActionResults().containsKey(WSConstants.SIGN)) { + signedResults.addAll(wsResult.getActionResults().get(WSConstants.SIGN)); + } + if (wsResult.getActionResults().containsKey(WSConstants.UT_SIGN)) { + signedResults.addAll(wsResult.getActionResults().get(WSConstants.UT_SIGN)); + } + if (wsResult.getActionResults().containsKey(WSConstants.ST_SIGNED)) { + signedResults.addAll(wsResult.getActionResults().get(WSConstants.ST_SIGNED)); + } + for (WSSecurityEngineResult result : signedResults) { + for (WSDataRef dataRef + : (List<WSDataRef>)result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS)) { + if (dataRef.getProtectedElement() == node) { + dataRef.setProtectedElement((Element)newNode); + } + } + } } catch (Exception ex) { //just to the best try + LOG.log(Level.FINE, "Something wrong during importNewDomToSAAJ", ex); } }
