You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2016/05/23 17:47:14 UTC

[01/11] cxf git commit: #CXF-6859: logging and exception handling improvement

Repository: cxf
Updated Branches:
  refs/heads/3.1.x-fixes 194f9cd98 -> a61399635


#CXF-6859: logging and exception handling improvement


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/70b32b7e
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/70b32b7e
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/70b32b7e

Branch: refs/heads/3.1.x-fixes
Commit: 70b32b7e8f672edfbcce459b4f6276efb1c56285
Parents: 194f9cd
Author: Andrei Shakirin <an...@gmail.com>
Authored: Wed Apr 6 20:59:26 2016 +0200
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:06:30 2016 -0400

----------------------------------------------------------------------
 .../cxf/ws/security/trust/STSSamlAssertionValidator.java       | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/70b32b7e/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
index 8805df1..33236e3 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
@@ -19,6 +19,10 @@
 
 package org.apache.cxf.ws.security.trust;
 
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.common.saml.SamlAssertionWrapper;
 import org.apache.wss4j.dom.handler.RequestData;
@@ -32,6 +36,7 @@ import org.apache.wss4j.dom.validate.SamlAssertionValidator;
  * for validation.
  */
 public class STSSamlAssertionValidator extends SamlAssertionValidator {
+    private static final Logger LOG = LogUtils.getL7dLogger(STSSamlAssertionValidator.class);
     
     private boolean trustVerificationSucceeded;
     
@@ -64,6 +69,7 @@ public class STSSamlAssertionValidator extends SamlAssertionValidator {
             trustVerificationSucceeded = true;
             return credential;
         } catch (WSSecurityException ex) {
+            LOG.log(Level.WARNING, "Trust verification of SAML assertion failed: " + ex.getMessage(), ex);
             trustVerificationSucceeded = false;
             return null;
         }


[02/11] cxf git commit: #CXF-6859: logging and exception handling improvement

Posted by dk...@apache.org.
#CXF-6859: logging and exception handling improvement


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/1f745e1d
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/1f745e1d
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/1f745e1d

Branch: refs/heads/3.1.x-fixes
Commit: 1f745e1de37c98a0ea2c117d5666847a08bbc6ff
Parents: 70b32b7
Author: Andrei Shakirin <an...@gmail.com>
Authored: Wed Apr 6 21:02:32 2016 +0200
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:06:38 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/1f745e1d/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java
index c9f0cbf..f8b3976 100644
--- a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java
+++ b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java
@@ -127,6 +127,7 @@ public abstract class AbstractSamlInHandler implements ContainerRequestFilter {
     protected void validateToken(Message message, SamlAssertionWrapper assertion) {
         try {
             RequestData data = new RequestData();
+            data.setMsgContext(message);
             
             // Add Audience Restrictions for SAML
             configureAudienceRestriction(message, data);


[03/11] cxf git commit: #CXF-6859: improved logging message

Posted by dk...@apache.org.
#CXF-6859: improved logging message


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/ab0393e1
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/ab0393e1
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/ab0393e1

Branch: refs/heads/3.1.x-fixes
Commit: ab0393e171b256c41043f192eb7c2c13928be670
Parents: 1f745e1
Author: Andrei Shakirin <an...@gmail.com>
Authored: Tue Apr 12 21:19:50 2016 +0200
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:07:00 2016 -0400

----------------------------------------------------------------------
 .../apache/cxf/ws/security/trust/STSSamlAssertionValidator.java   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/ab0393e1/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
index 33236e3..da107be 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSSamlAssertionValidator.java
@@ -69,7 +69,8 @@ public class STSSamlAssertionValidator extends SamlAssertionValidator {
             trustVerificationSucceeded = true;
             return credential;
         } catch (WSSecurityException ex) {
-            LOG.log(Level.WARNING, "Trust verification of SAML assertion failed: " + ex.getMessage(), ex);
+            LOG.log(Level.WARNING, "Local trust verification of SAML assertion failed: " + ex.getMessage(),
+                    ex);
             trustVerificationSucceeded = false;
             return null;
         }


[06/11] cxf git commit: Don't create one big byte[] for the wrapper, use multi streams

Posted by dk...@apache.org.
Don't create one big byte[] for the wrapper, use multi streams


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/7b4044e5
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7b4044e5
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7b4044e5

Branch: refs/heads/3.1.x-fixes
Commit: 7b4044e537c7f19fc3a8c4aa23e3534bf7638592
Parents: a78e2e4
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri May 20 13:26:40 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:19 2016 -0400

----------------------------------------------------------------------
 .../cxf/ws/security/wss4j/StaxSerializer.java   | 57 +++++++++++++++++++-
 1 file changed, 55 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/7b4044e5/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
index f3f47f8..3b28754 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
@@ -20,9 +20,15 @@ package org.apache.cxf.ws.security.wss4j;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.SequenceInputStream;
 import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Vector;
 
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.soap.SOAPElement;
@@ -44,6 +50,7 @@ import org.xml.sax.InputSource;
 
 
 import org.apache.cxf.binding.soap.saaj.SAAJStreamWriter;
+import org.apache.cxf.helpers.LoadingByteArrayOutputStream;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.xml.security.encryption.AbstractSerializer;
 import org.apache.xml.security.encryption.XMLEncryptionException;
@@ -129,8 +136,54 @@ public class StaxSerializer extends AbstractSerializer {
         if (reader != null) {
             return deserialize(ctx, reader, false);            
         }
-        byte[] fragment = createContext(source, ctx);
-        return deserialize(ctx, new InputSource(new ByteArrayInputStream(fragment)));
+        return deserialize(ctx, new InputSource(createStreamContext(source, ctx)));
+    }
+    
+    InputStream createStreamContext(byte[] source, Node ctx) throws XMLEncryptionException {
+        Vector<InputStream> v = new Vector<>(2);
+
+        LoadingByteArrayOutputStream byteArrayOutputStream = new LoadingByteArrayOutputStream();
+        try {
+            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(byteArrayOutputStream, "UTF-8");
+            outputStreamWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummy");
+
+            // Run through each node up to the document node and find any xmlns: nodes
+            Map<String, String> storedNamespaces = new HashMap<String, String>();
+            Node wk = ctx;
+            while (wk != null) {
+                NamedNodeMap atts = wk.getAttributes();
+                if (atts != null) {
+                    for (int i = 0; i < atts.getLength(); ++i) {
+                        Node att = atts.item(i);
+                        String nodeName = att.getNodeName();
+                        if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
+                                && !storedNamespaces.containsKey(att.getNodeName())) {
+                            outputStreamWriter.write(" ");
+                            outputStreamWriter.write(nodeName);
+                            outputStreamWriter.write("=\"");
+                            outputStreamWriter.write(att.getNodeValue());
+                            outputStreamWriter.write("\"");
+                            storedNamespaces.put(nodeName, att.getNodeValue());
+                        }
+                    }
+                }
+                wk = wk.getParentNode();
+            }
+            outputStreamWriter.write(">");
+            outputStreamWriter.close();
+            v.add(byteArrayOutputStream.createInputStream());
+            v.addElement(new ByteArrayInputStream(source));
+            byteArrayOutputStream = new LoadingByteArrayOutputStream();
+            outputStreamWriter = new OutputStreamWriter(byteArrayOutputStream, "UTF-8");
+            outputStreamWriter.write("</dummy>");
+            outputStreamWriter.close();
+            v.add(byteArrayOutputStream.createInputStream());
+        } catch (UnsupportedEncodingException e) {
+            throw new XMLEncryptionException(e);
+        } catch (IOException e) {
+            throw new XMLEncryptionException(e);
+        }
+        return new SequenceInputStream(v.elements());
     }
 
     /**


[04/11] cxf git commit: Updates to get the transformation stuff to workaround all the bugs/junk in SAAJ for the faults

Posted by dk...@apache.org.
Updates to get the transformation stuff to workaround all the bugs/junk in SAAJ for the faults


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/b9d69e71
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/b9d69e71
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/b9d69e71

Branch: refs/heads/3.1.x-fixes
Commit: b9d69e71057537863700ee5be870f36c2f2e3188
Parents: ab0393e
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri May 20 11:31:00 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:11 2016 -0400

----------------------------------------------------------------------
 .../staxutils/OverlayW3CDOMStreamWriter.java    |  6 ++
 .../cxf/staxutils/W3CDOMStreamWriter.java       |  4 +
 .../cxf/binding/soap/saaj/SAAJStreamWriter.java | 78 ++++++++++++++------
 .../cxf/ws/security/wss4j/StaxSerializer.java   | 60 +++++++++++----
 .../ws/security/wss4j/WSS4JInInterceptor.java   |  2 +-
 .../ws/security/wss4j/WSS4JFaultCodeTest.java   |  2 +
 6 files changed, 115 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/core/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java b/core/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java
index d30bf4f..475973a 100644
--- a/core/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java
+++ b/core/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java
@@ -25,6 +25,7 @@ import java.util.List;
 import javax.xml.stream.XMLStreamException;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.Text;
@@ -53,6 +54,11 @@ public class OverlayW3CDOMStreamWriter extends W3CDOMStreamWriter {
     public OverlayW3CDOMStreamWriter(Document doc, Element e) {
         super(doc, e);
     }
+    public OverlayW3CDOMStreamWriter(Document doc, DocumentFragment frag) {
+        super(doc, frag);
+        isOverlaid = false;
+    }
+
 
     @Override
     protected void createAndAddElement(String prefix, String local, String namespace) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/core/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java b/core/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
index 6903c4c..353da70 100644
--- a/core/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
+++ b/core/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
@@ -60,6 +60,10 @@ public class W3CDOMStreamWriter implements XMLStreamWriter {
         this.document = frag.getOwnerDocument();
         currentNode = frag;
     }
+    public W3CDOMStreamWriter(Document document, DocumentFragment frag) {
+        this.document = document;
+        currentNode = frag;
+    }
 
     public W3CDOMStreamWriter(Element e) {
         this.document = e.getOwnerDocument();

http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
----------------------------------------------------------------------
diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
index 393a553..185079b 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
@@ -21,11 +21,13 @@ package org.apache.cxf.binding.soap.saaj;
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFault;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPPart;
 
+import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
@@ -36,7 +38,10 @@ import static org.apache.cxf.binding.soap.saaj.SAAJUtils.adjustPrefix;
 
 public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter {
     private final SOAPPart part;
-
+    private final SOAPEnvelope envelope;
+    private String uri;
+    
+    
     public SAAJStreamWriter(SOAPPart part) {
         super(part);
         this.part = part;
@@ -44,20 +49,47 @@ public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter {
         if (nd == null) {
             isOverlaid = false;
         }
+        envelope = null;
     }
     public SAAJStreamWriter(SOAPPart part, Element current) {
         super(part, current);
         this.part = part;
+        envelope = null;
     }
-
+    public SAAJStreamWriter(SOAPEnvelope env, DocumentFragment frag) {
+        super(env.getOwnerDocument(), frag);
+        this.part = null;
+        this.envelope = env;
+        isOverlaid = false;
+    }
+    public SAAJStreamWriter(SOAPEnvelope env, Element cur) {
+        super(env.getOwnerDocument(), cur);
+        this.part = null;
+        this.envelope = env;
+        isOverlaid = false;
+    }
+    
+    private String getEnvelopeURI() throws SOAPException {
+        if (uri == null) {
+            uri = getEnvelope().getElementName().getURI();
+        }
+        return uri;
+    }
+    private SOAPEnvelope getEnvelope() throws SOAPException {
+        if (envelope == null) {
+            return part.getEnvelope();
+        }
+        return envelope;
+    }
+    
     protected void adjustOverlaidNode(Node nd2, String pfx) {
         String namespace = nd2.getNamespaceURI();
         try {
             if (namespace != null 
-                && namespace.equals(part.getEnvelope().getElementName().getURI())) {
+                && namespace.equals(getEnvelopeURI())) {
                 adjustPrefix((SOAPElement)nd2, pfx);
                 if ("Envelope".equals(nd2.getLocalName())) {
-                    adjustPrefix(part.getEnvelope().getHeader(), pfx);
+                    adjustPrefix(getEnvelope().getHeader(), pfx);
                 }
             }
         } catch (SOAPException e) {
@@ -67,37 +99,41 @@ public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter {
     }
     
     protected void createAndAddElement(String prefix, String local, String namespace) {
+        if (part == null) {
+            super.createAndAddElement(prefix, local, namespace);
+            return;
+        }
         try {
             if (namespace != null 
-                && namespace.equals(part.getEnvelope().getElementName().getURI())) {
+                && namespace.equals(getEnvelopeURI())) {
                 if ("Envelope".equals(local)) {
-                    setChild(adjustPrefix(part.getEnvelope(), prefix), false);
-                    adjustPrefix(part.getEnvelope().getHeader(), prefix);
-                    adjustPrefix(part.getEnvelope().getBody(), prefix);
-                    part.getEnvelope().removeChild(part.getEnvelope().getHeader());
-                    part.getEnvelope().removeChild(part.getEnvelope().getBody());
+                    setChild(adjustPrefix(getEnvelope(), prefix), false);
+                    adjustPrefix(getEnvelope().getHeader(), prefix);
+                    adjustPrefix(getEnvelope().getBody(), prefix);
+                    getEnvelope().removeChild(getEnvelope().getHeader());
+                    getEnvelope().removeChild(getEnvelope().getBody());
                     return;
                 } else if ("Body".equals(local)) {
-                    if (part.getEnvelope().getBody() == null) {
-                        part.getEnvelope().addBody();
+                    if (getEnvelope().getBody() == null) {
+                        getEnvelope().addBody();
                     }
-                    setChild(adjustPrefix(part.getEnvelope().getBody(), prefix), false);
+                    setChild(adjustPrefix(getEnvelope().getBody(), prefix), false);
                     return;
                 } else if ("Header".equals(local)) {
-                    if (part.getEnvelope().getHeader() == null) {
-                        part.getEnvelope().addHeader();
+                    if (getEnvelope().getHeader() == null) {
+                        getEnvelope().addHeader();
                     }
-                    setChild(adjustPrefix(part.getEnvelope().getHeader(), prefix), false);
+                    setChild(adjustPrefix(getEnvelope().getHeader(), prefix), false);
                     return;
                 } else if ("Fault".equals(local)) {
-                    SOAPFault f = part.getEnvelope().getBody().getFault();
+                    SOAPFault f = getEnvelope().getBody().getFault();
                     if (f == null) {
-                        Element el = part.createElementNS(namespace, 
+                        Element el = getDocument().createElementNS(namespace, 
                                              StringUtils.isEmpty(prefix) ? local : prefix + ":" + local);
-                        part.getEnvelope().getBody().appendChild(el);
-                        f = part.getEnvelope().getBody().getFault();
+                        getEnvelope().getBody().appendChild(el);
+                        f = getEnvelope().getBody().getFault();
                         if (f == null) {
-                            f = part.getEnvelope().getBody().addFault();
+                            f = getEnvelope().getBody().addFault();
                         }
                     }
                     setChild(adjustPrefix(f, prefix), false);

http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
index cc9045b..cf74c01 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
@@ -22,6 +22,8 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.StringReader;
 
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
@@ -35,6 +37,7 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+import org.apache.cxf.binding.soap.saaj.SAAJStreamWriter;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.xml.security.encryption.AbstractSerializer;
 import org.apache.xml.security.encryption.XMLEncryptionException;
@@ -105,26 +108,53 @@ public class StaxSerializer extends AbstractSerializer {
         
         XMLStreamReader reader = StaxUtils.createXMLStreamReader(inputSource);
         
-        // Import to a dummy fragment
-        DocumentFragment dummyFragment = contextDocument.createDocumentFragment();
-        XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(new DOMResult(dummyFragment));
-        
+        XMLStreamWriter writer = null;
         try {
+            if (ctx instanceof SOAPElement) {
+                SOAPElement el = (SOAPElement)ctx;
+                while (el != null && !(el instanceof SOAPEnvelope)) {
+                    el = el.getParentElement();
+                }
+                //cannot load into fragment due to a ClassCastException iwthin SAAJ addChildElement 
+                //which only checks for Document as parent, not DocumentFragment
+                Element element = ctx.getOwnerDocument().createElementNS("dummy", "dummy");
+                writer = new SAAJStreamWriter((SOAPEnvelope)el, element);
+                StaxUtils.copy(reader, writer);
+                
+                DocumentFragment result = contextDocument.createDocumentFragment();
+                Node child = element.getFirstChild().getFirstChild();
+                if (child != null && child.getNextSibling() == null) {
+                    return child;
+                }
+                while (child != null) {
+                    Node nextChild = child.getNextSibling();
+                    result.appendChild(child);
+                    child = nextChild;
+                }
+                
+                return result;
+            }
+            // Import to a dummy fragment
+            DocumentFragment dummyFragment = contextDocument.createDocumentFragment();
+            writer = StaxUtils.createXMLStreamWriter(new DOMResult(dummyFragment));
             StaxUtils.copy(reader, writer);
+            
+            // Remove the "dummy" wrapper
+            DocumentFragment result = contextDocument.createDocumentFragment();
+            Node child = dummyFragment.getFirstChild().getFirstChild();
+            if (child != null && child.getNextSibling() == null) {
+                return child;
+            }
+            while (child != null) {
+                Node nextChild = child.getNextSibling();
+                result.appendChild(child);
+                child = nextChild;
+            }
+            
+            return result;
         } catch (XMLStreamException ex) {
             throw new XMLEncryptionException(ex);
         }
-        
-        // Remove the "dummy" wrapper
-        DocumentFragment result = contextDocument.createDocumentFragment();
-        Node child = dummyFragment.getFirstChild().getFirstChild();
-        while (child != null) {
-            Node nextChild = child.getNextSibling();
-            result.appendChild(child);
-            child = nextChild;
-        }
-        
-        return result;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/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 b506853..bd90c04 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
@@ -196,7 +196,7 @@ public class WSS4JInInterceptor extends AbstractWSS4JInterceptor {
             config = engine.getWssConfig();
         }
         reqData.setWssConfig(config);
-        // reqData.setEncryptionSerializer(new StaxSerializer());
+        reqData.setEncryptionSerializer(new StaxSerializer());
         
         // Add Audience Restrictions for SAML
         configureAudienceRestriction(msg, reqData);

http://git-wip-us.apache.org/repos/asf/cxf/blob/b9d69e71/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JFaultCodeTest.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JFaultCodeTest.java b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JFaultCodeTest.java
index 1393ef8..9414679 100644
--- a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JFaultCodeTest.java
+++ b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JFaultCodeTest.java
@@ -265,6 +265,8 @@ public class WSS4JFaultCodeTest extends AbstractSecurityTest {
         
         try {
             inHandler.handleMessage(inmsg);
+            StaxUtils.print(saajMsg.getSOAPPart());
+            
             fail("Expected failure on a SOAP Fault");
         } catch (SoapFault fault) {
             fault.printStackTrace();


[10/11] cxf git commit: [CXF-6900, CXF-6908] More fixes for namespace issues with decrypted faults and adding faults to SAAJ envelopes

Posted by dk...@apache.org.
[CXF-6900, CXF-6908] More fixes for namespace issues with decrypted faults and adding faults to SAAJ envelopes


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/78222f96
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/78222f96
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/78222f96

Branch: refs/heads/3.1.x-fixes
Commit: 78222f96802e321dab8a6c53373f8cda77be6f0e
Parents: ba6c3d4
Author: Daniel Kulp <dk...@apache.org>
Authored: Mon May 23 12:21:56 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:37 2016 -0400

----------------------------------------------------------------------
 .../cxf/binding/soap/saaj/SAAJStreamWriter.java | 24 ++++++++++++++++++++
 rt/ws/security/pom.xml                          |  5 ++++
 .../cxf/ws/security/wss4j/StaxSerializer.java   |  2 +-
 .../systest/ws/security/SecurityPolicyTest.java |  2 --
 4 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/78222f96/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
----------------------------------------------------------------------
diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
index 185079b..8c13b1e 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cxf.binding.soap.saaj;
 
+import java.util.Iterator;
+
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPElement;
@@ -26,6 +28,7 @@ import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFault;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPPart;
+import javax.xml.stream.XMLStreamException;
 
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
@@ -33,9 +36,11 @@ import org.w3c.dom.Node;
 
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter;
+import org.apache.cxf.staxutils.W3CNamespaceContext;
 
 import static org.apache.cxf.binding.soap.saaj.SAAJUtils.adjustPrefix;
 
+
 public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter {
     private final SOAPPart part;
     private final SOAPEnvelope envelope;
@@ -69,6 +74,25 @@ public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter {
         isOverlaid = false;
     }
     
+    @Override
+    public String getPrefix(String nsuri) throws XMLStreamException {
+        if (isOverlaid && part != null && getCurrentNode() == null) {
+            Node nd = part.getFirstChild();
+            while (nd != null) {
+                if (nd instanceof Element) {
+                    Iterator<String> it = new W3CNamespaceContext((Element)nd).getPrefixes(nsuri);
+                    if (it.hasNext()) {
+                        return it.next();
+                    } else {
+                        nd = null;
+                    }
+                } else {
+                    nd = nd.getNextSibling();
+                }
+            }
+        }
+        return super.getPrefix(nsuri);
+    }
     private String getEnvelopeURI() throws SOAPException {
         if (uri == null) {
             uri = getEnvelope().getElementName().getURI();

http://git-wip-us.apache.org/repos/asf/cxf/blob/78222f96/rt/ws/security/pom.xml
----------------------------------------------------------------------
diff --git a/rt/ws/security/pom.xml b/rt/ws/security/pom.xml
index 990fbf4..7172d4d 100644
--- a/rt/ws/security/pom.xml
+++ b/rt/ws/security/pom.xml
@@ -79,6 +79,11 @@
             <optional>true</optional>
         </dependency>
         <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
             <groupId>net.sf.ehcache</groupId>
             <artifactId>ehcache</artifactId>
             <version>${cxf.ehcache.version}</version>

http://git-wip-us.apache.org/repos/asf/cxf/blob/78222f96/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
index 3acb598..6927500 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
@@ -95,7 +95,7 @@ public class StaxSerializer extends AbstractSerializer {
             }
             return true;
         } catch (Throwable t) {
-            t.printStackTrace();
+            //ignore, not much we can do but hope the decrypted XML is stand alone ok 
         }
         return false;
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/78222f96/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
----------------------------------------------------------------------
diff --git a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
index 4cd7b66..fb0eea0 100644
--- a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
+++ b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
@@ -68,7 +68,6 @@ import org.example.contract.doubleit.DoubleItPortTypeHeader;
 import org.example.schema.doubleit.DoubleIt;
 
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
@@ -702,7 +701,6 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
     }
     
     @Test
-    @Ignore("CXF-6908")
     public void testFault() throws Exception {
         SpringBusFactory bf = new SpringBusFactory();
 


[09/11] cxf git commit: [CXF-6908] Excluding test for still open issue

Posted by dk...@apache.org.
[CXF-6908] Excluding test for still open issue


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/ba6c3d48
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/ba6c3d48
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/ba6c3d48

Branch: refs/heads/3.1.x-fixes
Commit: ba6c3d4806597d682458a9bad781afd7727b8259
Parents: 464cb10
Author: Alessio Soldano <as...@redhat.com>
Authored: Fri May 20 21:45:48 2016 +0200
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:28 2016 -0400

----------------------------------------------------------------------
 .../org/apache/cxf/systest/ws/security/SecurityPolicyTest.java     | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/ba6c3d48/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
----------------------------------------------------------------------
diff --git a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
index fb0eea0..4cd7b66 100644
--- a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
+++ b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
@@ -68,6 +68,7 @@ import org.example.contract.doubleit.DoubleItPortTypeHeader;
 import org.example.schema.doubleit.DoubleIt;
 
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
@@ -701,6 +702,7 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
     }
     
     @Test
+    @Ignore("CXF-6908")
     public void testFault() throws Exception {
         SpringBusFactory bf = new SpringBusFactory();
 


[05/11] cxf git commit: Updates to not create the dummy wrapper if we're using woodstox

Posted by dk...@apache.org.
Updates to not create the dummy wrapper if we're using woodstox


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a78e2e4d
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a78e2e4d
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a78e2e4d

Branch: refs/heads/3.1.x-fixes
Commit: a78e2e4d67628577ee9418412e8f89fe0c3c243b
Parents: b9d69e7
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri May 20 13:10:48 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:15 2016 -0400

----------------------------------------------------------------------
 .../cxf/ws/security/wss4j/StaxSerializer.java   | 116 ++++++++++++++++---
 1 file changed, 99 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/a78e2e4d/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
index cf74c01..f3f47f8 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
@@ -21,9 +21,13 @@ package org.apache.cxf.ws.security.wss4j;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.soap.SOAPElement;
 import javax.xml.soap.SOAPEnvelope;
+import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
@@ -33,10 +37,12 @@ import javax.xml.transform.dom.DOMSource;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+
 import org.apache.cxf.binding.soap.saaj.SAAJStreamWriter;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.xml.security.encryption.AbstractSerializer;
@@ -46,7 +52,72 @@ import org.apache.xml.security.encryption.XMLEncryptionException;
  * Converts <code>String</code>s into <code>Node</code>s and visa versa using CXF's StaxUtils
  */
 public class StaxSerializer extends AbstractSerializer {
-
+    XMLInputFactory factory;
+    boolean validFactory;
+    
+    boolean addNamespaces(XMLStreamReader reader, Node ctx) {
+        try {
+            NamespaceContext nsctx = reader.getNamespaceContext();
+            if (nsctx instanceof com.ctc.wstx.sr.InputElementStack) {
+                com.ctc.wstx.sr.InputElementStack ies = (com.ctc.wstx.sr.InputElementStack)nsctx;
+                com.ctc.wstx.util.InternCache ic = com.ctc.wstx.util.InternCache.getInstance();
+                
+                Map<String, String> storedNamespaces = new HashMap<String, String>();
+                Node wk = ctx;
+                while (wk != null) {
+                    NamedNodeMap atts = wk.getAttributes();
+                    if (atts != null) {
+                        for (int i = 0; i < atts.getLength(); ++i) {
+                            Node att = atts.item(i);
+                            String nodeName = att.getNodeName();
+                            if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
+                                && !storedNamespaces.containsKey(att.getNodeName())) {
+                                
+                                String prefix = att.getLocalName();
+                                if (prefix.equals("xmlns")) {
+                                    prefix = "";
+                                }
+                                prefix = ic.intern(prefix);
+                                ies.addNsBinding(prefix, att.getNodeValue());
+                                storedNamespaces.put(nodeName, att.getNodeValue());
+                            }
+                        }
+                    }
+                    wk = wk.getParentNode();
+                }
+            }
+            return true;
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+        return false;
+    }
+    
+    private XMLStreamReader createWstxReader(byte[] source, Node ctx) throws XMLEncryptionException {
+        try {
+            if (factory == null) {
+                factory = StaxUtils.createXMLInputFactory(true);
+                try {
+                    factory.setProperty("com.ctc.wstx.fragmentMode",
+                                        com.ctc.wstx.api.WstxInputProperties.PARSING_MODE_FRAGMENT);
+                    factory.setProperty(org.codehaus.stax2.XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, Boolean.TRUE);
+                    validFactory = true;
+                } catch (Throwable t) {
+                    //ignore
+                    validFactory = false;
+                }
+            }
+            if (validFactory) {
+                XMLStreamReader reader = factory.createXMLStreamReader(new ByteArrayInputStream(source));
+                if (addNamespaces(reader, ctx)) {
+                    return reader;
+                }
+            }
+        } catch (Throwable e) {
+            //ignore
+        }
+        return null;
+    }
     /**
      * @param source
      * @param ctx
@@ -54,6 +125,10 @@ public class StaxSerializer extends AbstractSerializer {
      * @throws XMLEncryptionException
      */
     public Node deserialize(byte[] source, Node ctx) throws XMLEncryptionException {
+        XMLStreamReader reader = createWstxReader(source, ctx);
+        if (reader != null) {
+            return deserialize(ctx, reader, false);            
+        }
         byte[] fragment = createContext(source, ctx);
         return deserialize(ctx, new InputSource(new ByteArrayInputStream(fragment)));
     }
@@ -98,16 +173,17 @@ public class StaxSerializer extends AbstractSerializer {
      * @throws XMLEncryptionException
      */
     private Node deserialize(Node ctx, InputSource inputSource) throws XMLEncryptionException {
-        
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(inputSource);
+        return deserialize(ctx, reader, true);
+    }
+    private Node deserialize(Node ctx, XMLStreamReader reader, boolean wrapped) throws XMLEncryptionException {
         Document contextDocument = null;
         if (Node.DOCUMENT_NODE == ctx.getNodeType()) {
             contextDocument = (Document)ctx;
         } else {
             contextDocument = ctx.getOwnerDocument();
         }
-        
-        XMLStreamReader reader = StaxUtils.createXMLStreamReader(inputSource);
-        
+
         XMLStreamWriter writer = null;
         try {
             if (ctx instanceof SOAPElement) {
@@ -122,7 +198,10 @@ public class StaxSerializer extends AbstractSerializer {
                 StaxUtils.copy(reader, writer);
                 
                 DocumentFragment result = contextDocument.createDocumentFragment();
-                Node child = element.getFirstChild().getFirstChild();
+                Node child = element.getFirstChild();
+                if (wrapped) {
+                    child = child.getFirstChild();
+                }
                 if (child != null && child.getNextSibling() == null) {
                     return child;
                 }
@@ -140,18 +219,21 @@ public class StaxSerializer extends AbstractSerializer {
             StaxUtils.copy(reader, writer);
             
             // Remove the "dummy" wrapper
-            DocumentFragment result = contextDocument.createDocumentFragment();
-            Node child = dummyFragment.getFirstChild().getFirstChild();
-            if (child != null && child.getNextSibling() == null) {
-                return child;
-            }
-            while (child != null) {
-                Node nextChild = child.getNextSibling();
-                result.appendChild(child);
-                child = nextChild;
-            }
             
-            return result;
+            if (wrapped) {
+                DocumentFragment result = contextDocument.createDocumentFragment();
+                Node child = dummyFragment.getFirstChild().getFirstChild();
+                if (child != null && child.getNextSibling() == null) {
+                    return child;
+                }
+                while (child != null) {
+                    Node nextChild = child.getNextSibling();
+                    result.appendChild(child);
+                    child = nextChild;
+                }
+                dummyFragment = result;
+            }
+            return dummyFragment;
         } catch (XMLStreamException ex) {
             throw new XMLEncryptionException(ex);
         }


[08/11] cxf git commit: [CXF-6908] Adding testcase

Posted by dk...@apache.org.
[CXF-6908] Adding testcase


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/464cb102
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/464cb102
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/464cb102

Branch: refs/heads/3.1.x-fixes
Commit: 464cb102e85d09b9c473c5eab60d53b579e24c87
Parents: f39ad3b
Author: Alessio Soldano <as...@redhat.com>
Authored: Fri May 20 21:36:40 2016 +0200
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:25 2016 -0400

----------------------------------------------------------------------
 .../systest/ws/security/SecurityPolicyTest.java | 68 ++++++++++++++++++++
 .../cxf/systest/ws/security/DoubleIt.wsdl       |  3 +
 2 files changed, 71 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/464cb102/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
----------------------------------------------------------------------
diff --git a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
index 4ab13d7..fb0eea0 100644
--- a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
+++ b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
@@ -29,6 +29,8 @@ import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.xml.namespace.QName;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPMessage;
 import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 import javax.xml.ws.BindingProvider;
@@ -39,6 +41,7 @@ import javax.xml.ws.Service;
 import javax.xml.ws.Service.Mode;
 import javax.xml.ws.ServiceMode;
 import javax.xml.ws.WebServiceProvider;
+import javax.xml.ws.soap.SOAPFaultException;
 import javax.xml.xpath.XPathConstants;
 
 import org.w3c.dom.Document;
@@ -79,6 +82,8 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
             + PORT + "/SecPolTestSignThenEncrypt";
     public static final String POLICY_SIGNENC_PROVIDER_ADDRESS 
         = "http://localhost:" + PORT + "/SecPolTestSignThenEncryptProvider";
+    public static final String POLICY_FAULT_SIGNENC_PROVIDER_ADDRESS 
+    = "http://localhost:" + PORT + "/SecPolTestFaultSignThenEncryptProvider";
     public static final String POLICY_SIGN_ADDRESS = "http://localhost:" + PORT + "/SecPolTestSign";
     public static final String POLICY_XPATH_ADDRESS = "http://localhost:" + PORT + "/SecPolTestXPath";
     public static final String POLICY_SIGNONLY_ADDRESS = "http://localhost:" + PORT + "/SecPolTestSignedOnly";
@@ -164,6 +169,12 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
         ei = ep.getServer().getEndpoint().getEndpointInfo(); 
         setCryptoProperties(ei, "bob.properties", "alice.properties");
         
+        ep = (EndpointImpl)Endpoint.publish(POLICY_FAULT_SIGNENC_PROVIDER_ADDRESS,
+                                            new DoubleItFaultProvider());
+        
+        ei = ep.getServer().getEndpoint().getEndpointInfo(); 
+        setCryptoProperties(ei, "bob.properties", "alice.properties");
+        
         ep = (EndpointImpl)Endpoint.create(new DoubleItImpl());
         ep.setEndpointName(new QName("http://www.example.org/contract/DoubleIt", "DoubleItPortSignedOnly"));
         ep.setWsdlLocation(wsdl.getPath());
@@ -468,6 +479,28 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
         
     }
     
+    @WebServiceProvider(targetNamespace = "http://www.example.org/contract/DoubleIt",
+                        portName = "DoubleItFaultPortSignThenEncrypt",
+                        serviceName = "DoubleItService",
+                        wsdlLocation = "classpath:/org/apache/cxf/systest/ws/security/DoubleIt.wsdl")
+    @ServiceMode(value = Mode.MESSAGE)
+    public static class DoubleItFaultProvider implements Provider<SOAPMessage> {
+
+        public SOAPMessage invoke(SOAPMessage request) {
+            try {
+                MessageFactory messageFactory = MessageFactory.newInstance();
+                SOAPMessage msg = messageFactory.createMessage();
+                msg.getSOAPBody().addFault(new QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"),
+                                           "Foo");
+                return msg;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+    }
+
     @Test
     public void testCXF3041() throws Exception {
         SpringBusFactory bf = new SpringBusFactory();
@@ -666,4 +699,39 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase  {
         epBus.shutdown(true);
         bus.shutdown(true);
     }
+    
+    @Test
+    public void testFault() throws Exception {
+        SpringBusFactory bf = new SpringBusFactory();
+
+        URL busFile = SecurityPolicyTest.class.getResource("https_config_client.xml");
+        Bus bus = bf.createBus(busFile.toString());
+        SpringBusFactory.setDefaultBus(bus);
+        SpringBusFactory.setThreadDefaultBus(bus);
+        
+        URL wsdl = SecurityPolicyTest.class.getResource("DoubleIt.wsdl");
+        Service service = Service.create(wsdl, SERVICE_QNAME);
+        
+        QName portQName = new QName(NAMESPACE, "DoubleItFaultPortSignThenEncrypt");
+        DoubleItPortType pt = service.getPort(portQName, DoubleItPortType.class);
+        updateAddressPort(pt, PORT);
+        ((BindingProvider)pt).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, 
+                                                      new KeystorePasswordCallback());
+        ((BindingProvider)pt).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES,
+                                                      "alice.properties");
+        ((BindingProvider)pt).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, 
+                                                      "bob.properties");
+        
+        // DOM
+        try {
+            pt.doubleIt(5);
+            fail("SOAPFaultException expected!");
+        } catch (SOAPFaultException e) {
+            assertEquals("Foo", e.getFault().getFaultString());
+        } finally {
+            ((java.io.Closeable)pt).close();
+            bus.shutdown(true);
+        }
+    }
+    
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/464cb102/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/DoubleIt.wsdl
----------------------------------------------------------------------
diff --git a/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/DoubleIt.wsdl b/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/DoubleIt.wsdl
index f478fa6..20f2f2e 100644
--- a/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/DoubleIt.wsdl
+++ b/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/security/DoubleIt.wsdl
@@ -246,6 +246,9 @@
         <wsdl:port name="DoubleItPortSignThenEncrypt" binding="tns:DoubleItBindingSignThenEncrypt">
             <soap:address location="http://localhost:9010/SecPolTestSignThenEncrypt"/>
         </wsdl:port>
+        <wsdl:port name="DoubleItFaultPortSignThenEncrypt" binding="tns:DoubleItBindingSignThenEncrypt">
+            <soap:address location="http://localhost:9010/SecPolTestFaultSignThenEncryptProvider"/>
+        </wsdl:port>
         <wsdl:port name="DoubleItPortSign" binding="tns:DoubleItBindingSign">
             <soap:address location="http://localhost:9010/SecPolTestSign"/>
         </wsdl:port>


[11/11] cxf git commit: Recording .gitmergeinfo Changes

Posted by dk...@apache.org.
Recording .gitmergeinfo Changes


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a6139963
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a6139963
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a6139963

Branch: refs/heads/3.1.x-fixes
Commit: a613996359845cfdb9a62b5e25d30a5c08406bee
Parents: 78222f9
Author: Daniel Kulp <dk...@apache.org>
Authored: Mon May 23 13:09:37 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:37 2016 -0400

----------------------------------------------------------------------
 .gitmergeinfo | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/a6139963/.gitmergeinfo
----------------------------------------------------------------------
diff --git a/.gitmergeinfo b/.gitmergeinfo
index d93b361..2b78b4e 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -2,56 +2,83 @@ origin/master
 B 0234c09c11c0f89bd17f9b82695daa12af1fad09
 B 02d826d7ad223c75ad706c7b5443bd06ee6e2589
 B 0336a2399b1980e04372c651368f8718f75a4f14
+B 04d072e8494cb223c8f7b288776640dea68339d6
 B 0d4cd0bbcaa6a4f80552d6b38f2a5e721ab20de9
 B 0dfaf8d72574511ad9027c663707f9e30b945fbc
 B 111d52fd4b92d0222af9bf1c22156145ea01ed01
 B 22755d26ec2f6255004f57deec711ee68ce11d6c
 B 248c8f0458ce938a65c35006d484c6a4610cde1b
+B 2fb1ccf60f1ba4e9d70f8c2a6329fa1a65e6a352
 B 304c62a11b8dbe000cdfb5de857619703bca79f7
+B 30a0754ebe160d75867bc2558612d555b88c8595
 B 343d06d94838cd26f682f7afbcea0e422aa1597d
 B 39851b83af116611ce0efe70c4b9a32ee8491523
 B 3b2f2ed2db01f05fa9b648693ce33978ccc8ede8
+B 4149e50e39a8d4ffb71924d42def376b634ef64a
+B 447f2dac6e160b5cd495558ca8855ed481396c63
+B 4786e832573f1fcc07ed190ab21fdb2820348e4d
 B 47a431412dbd7669d89a70d6fed49053e70dfed1
 B 4b37844e9c15812d1855d0babded79880d2cd6fb
+B 4ddf74b1acd8f65b685c8e11b809a06807799f84
 B 4f1afbf76d3e525163663b71104ce2adb9cb7a85
+B 519a67dfa240471bb585929f263cd85051a9eb06
 B 53a46205871434d8c47ed45822e078e5ad6d2c60
+B 54910695917fb63a11982a8dc96a3b4d088963c5
 B 59b8615053ddcad353fbebcd9a5b1109ae0897a1
 B 65e1e07fdb810ec9de135530ca3e3d23821836a3
+B 66447a377f0b2cafc2f337456b5fd41f832556e0
+B 671b1cfce0c423a1e9e8392fdd1750697fa968df
 B 68f110e5bcfe26d050bd05988ecd9c863e6e8742
+B 699f4c03de1acb1cf9eb95ad2db792dba5a56ead
+B 6c324421a358919b4ecb3cfdd8a2e0e16ff81724
 B 6e7b79f6a8b6523b2248937275d92918e5682aa2
 B 77c3f51dcb1f02c8799f4e09676c0697e76a0756
 B 7b7629682d15345518e66d46e575bf1ac334cf00
 B 7fc957efa3a193a5f2ae178b8a608717ce4c5b26
+B 7fcd84b1f82a203917a5269a2c0c10a0d5b6f877
 B 85c397f853c6b7ca0ed6d924445d6173962e1ec4
 B 8a4e85b24d6d5b438ceb28257c53773d46b5816d
 B 8b92fe57dd9a661dab382da7d556b1972f513a93
 B 8f98be8e72d4dbe18347a7efab91f4b008d8385f
+B 94b837228a1d9c706aa235bfe23b827eb04da63c
+B 9505a3c7c82691da2bad94459702a665b14420fa
 B 9b6666816a21d8b85cc051be59a8ab6e968c5d0d
+B a05d75086453fa18ca4f4733f7cc8819693c786b
 B a219766354d6aee53c7f7a4da91f434af552b437
 B a261507ebd3104b1a00298801ec9815ed1e7a728
 B a7362dfaf2141cb4f303f81bbb94c6df81be75cb
 B ab05d4ee361670d3c251712f5819a0f0b7e114d6
+B aed1b1d45ea12b1b1a7f083f756c27ed914ad9b7
+B b2c10cc6c18a6e6589d258436303c46b3f682f7e
+B b3ec59efcd10cf64a1bb8a399082071905f5baa9
 B bceee342b32f3704ca75176d06067f90c6d3fbdc
 B befeb0484cb195cbcd6163f65c54a94ba26d8335
 B c1eaf69cb16583f672ddef646dcd7a52cfa23b5d
+B c2ccecb23ba23497c95be89f9b37f38c69faba7a
 B c63f06f3782148373912c1e4dc86de0d0c312229
 B ced98c6e937bd93f92dac9043fa0406c696bfd84
 B cf9ab27a843df4532d9bd78209aebcafee2ffffc
 B d151322220de948dea0539d5077354c988db80fb
+B d226c07d4db15fa9244a2f011df801839a880f68
 B d26570e26de80d0e0c6870ae5d959bfc8c0d19e4
 B dfc84b0fac84e001069800b32f01529d50339cdb
+B e14d803ff84be7c59dd7c2321f1090231967d45c
 B e1c60863ac10b56d423613c7d3d2f45c7ce18e14
 B e61a83d4ac18fc760fc5d4bc8fb19d6072aaac52
 B e6f0722615190861192972a51b3986b34efd1f0e
+B ebce4a65b15a1a99f18c1ea0111affafc447ce7e
 B ec3103f88b20fc05e92994b6a06b65b4a91dd75a
+B ee6ceea0d493b1b2dc6d83ca6923c3baed81885e
 B ee6e9e7d037de08ebc4a017ca7525d3ca67d2adb
 B efb1f0830f5441777198737fb26e9305ab969f66
 B f0e08b7bea2660542e18294d490e68c7b14aaa4b
 B f1b56150d6520e73d2ade2296c3b2f13839e63e5
+B f2845b37c6e7042470f869edc2ce9138f83d616f
 B f2f8b95ad823b38aa68e7a2071eac0b5b637b2aa
 B f94e1dd9b2a8d27ec5a27bfb7c026e3ae2350e39
 B f98785bd8490c4717353f1a9688cae3e7a823ec2
 B fb30f8bffc85fcc3208fcc0e1eda4b54a89b5d37
+M 01d06cee06203b0ba616ca1924f1878aecc1a791
 M 0222768baf6b60742c4a8332308edf2be0f4a2e4
 M 0578e16146527b0782530c40ba2db17531756d96
 M 0e5fd5a54cb271ba494e7e30b45d4228b33364a9
@@ -59,10 +86,13 @@ M 1184e08f0d1c40c754e39fd5d6340d1057fbdd17
 M 1afeea8bdc0ef96df1d52ea343957dc396723f8c
 M 2538ae42fb0c774023deed5264291b2fe6658cb8
 M 26edcd457ea507075a4c82e2787f11f11a432876
+M 2b1607831ccf97909122eae9247116d9a075c7cf
 M 2e8219cf3d047abc3a7e2611bf284aadbc20b7d6
+M 2f8a1f7645c30cb40d4f080ce4b4099964028751
 M 386805560479b35276d88605c5acf805e3004aa5
 M 39c772a0764b323f98ab58e00345f4fca924c425
 M 4799fef822a96f5d1b2827d5cc42ab886fd4e673
+M 6242c682dfce4a2ba4869978c28b14f1472484c1
 M 63a1088a9253da0452497440e900d35a5415c3c9
 M 7304dfbd8f3044d8d46981abf2058c6cb732d219
 M 746914a5084f5db8d0c0f052802c7ef2217b9b6b
@@ -77,9 +107,14 @@ M 9a9e0a8a37608195c4ef6fbf386728d13d025d2d
 M 9b6666816a21d8b85cc051be59a8ab6e968c5d0d
 M 9ecea375930d1a217f35da65e0d6073f7a80bf7d
 M a1710bdd783afcd667d9e72ccb031480d3806850
+M a89ca98653b95bcd2ab5cadbe9a419a4cec4893a
+M a9fe8470ce9522f08c298e58f76636c48d57b7a4
 M abcc137cb9b27e0da0b4270a18ac2a32df1e9990
 M b2b6f0137cd9f1bafff5d487e8383453692a2ff0
 M b2e5fb6583d64deeb8a42d2eeb6935c5f33dc0c6
+M c01c68ddda10ec6db492b86d818498bec0bf4228
 M cf8ac102e728b8745da265ec969f7b5160829fdb
+M e92e57c1f14de911cd2315a907443c79e91a94de
+M f9a42a528f4edfa7bcc62d5885eebaeb25224cec
 M fa973bd7ab43099151f83beea351b80c7140eaab
 M fe89bf0fb8379428667f66312e6942e906142d6f


[07/11] cxf git commit: Fix pmd errors

Posted by dk...@apache.org.
Fix pmd errors


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/f39ad3bb
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f39ad3bb
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f39ad3bb

Branch: refs/heads/3.1.x-fixes
Commit: f39ad3bbac2367149f0683bb2025b1df48beb11b
Parents: 7b4044e
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri May 20 15:16:10 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon May 23 13:09:22 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/f39ad3bb/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
index 3b28754..3acb598 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/StaxSerializer.java
@@ -77,11 +77,11 @@ public class StaxSerializer extends AbstractSerializer {
                         for (int i = 0; i < atts.getLength(); ++i) {
                             Node att = atts.item(i);
                             String nodeName = att.getNodeName();
-                            if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
+                            if (("xmlns".equals(nodeName) || nodeName.startsWith("xmlns:"))
                                 && !storedNamespaces.containsKey(att.getNodeName())) {
                                 
                                 String prefix = att.getLocalName();
-                                if (prefix.equals("xmlns")) {
+                                if ("xmlns".equals(prefix)) {
                                     prefix = "";
                                 }
                                 prefix = ic.intern(prefix);
@@ -156,7 +156,7 @@ public class StaxSerializer extends AbstractSerializer {
                     for (int i = 0; i < atts.getLength(); ++i) {
                         Node att = atts.item(i);
                         String nodeName = att.getNodeName();
-                        if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
+                        if (("xmlns".equals(nodeName) || nodeName.startsWith("xmlns:"))
                                 && !storedNamespaces.containsKey(att.getNodeName())) {
                             outputStreamWriter.write(" ");
                             outputStreamWriter.write(nodeName);