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);
                 }
 
             }

Reply via email to