You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2017/06/21 02:45:54 UTC

cxf git commit: [CXF-7411]ensure all tests passed with java9 EA kit(9-ea+174)

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 <fr...@gmail.com>
Authored: Wed Jun 21 10:45:41 2017 +0800
Committer: Freeman Fang <fr...@gmail.com>
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);
                 }
 
             }