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 2012/12/20 20:11:42 UTC

svn commit: r1424642 - in /cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers: AbstractBindingBuilder.java TransportBindingHandler.java

Author: dkulp
Date: Thu Dec 20 19:11:41 2012
New Revision: 1424642

URL: http://svn.apache.org/viewvc?rev=1424642&view=rev
Log:
[CXF-4715] If an element is being looked up for encryption only, don't put a wsu-Id on it.

Modified:
    cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
    cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java

Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java?rev=1424642&r1=1424641&r2=1424642&view=diff
==============================================================================
--- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java (original)
+++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java Thu Dec 20 19:11:41 2012
@@ -1244,7 +1244,7 @@ public abstract class AbstractBindingBui
         
         // Handle sign/enc elements
         try {
-            result.addAll(this.getElements("Element", xpaths, namespaces, found));
+            result.addAll(this.getElements("Element", xpaths, namespaces, found, sign));
         } catch (XPathExpressionException e) {
             LOG.log(Level.FINE, e.getMessage(), e);
             // REVISIT
@@ -1252,7 +1252,7 @@ public abstract class AbstractBindingBui
         
         // Handle content encrypted elements
         try {
-            result.addAll(this.getElements("Content", contentXpaths, cnamespaces, found));
+            result.addAll(this.getElements("Content", contentXpaths, cnamespaces, found, sign));
         } catch (XPathExpressionException e) {
             LOG.log(Level.FINE, e.getMessage(), e);
             // REVISIT
@@ -1355,6 +1355,8 @@ public abstract class AbstractBindingBui
      *            signing/encryption. Populated with additional matches found by
      *            this method and used to prevent including the same element
      *            twice under the same operation.
+     * @param forceId 
+     *         force adding a wsu:Id onto the elements.  Recommended for signatures.
      * @return a configured list of {@code WSEncryptionPart}s suitable for
      *         processing by WSS4J
      * @throws XPathExpressionException
@@ -1365,7 +1367,8 @@ public abstract class AbstractBindingBui
      */
     protected List<WSEncryptionPart> getElements(String encryptionModifier,
             List<String> xpaths, Map<String, String> namespaces,
-            List<Element> found) throws XPathExpressionException, SOAPException {
+            List<Element> found,
+            boolean forceId) throws XPathExpressionException, SOAPException {
         
         List<WSEncryptionPart> result = new ArrayList<WSEncryptionPart>();
         
@@ -1383,8 +1386,21 @@ public abstract class AbstractBindingBui
                     Element el = (Element)list.item(x);
                     
                     if (!found.contains(el)) {
-                        final String id = this.addWsuIdToElement(el);
-                        
+                        String id = null;
+                        if (forceId) {
+                            id = this.addWsuIdToElement(el);
+                        } else {
+                            //not forcing an ID on this.  Use one if there is one 
+                            //there already, but don't force one
+                            Attr idAttr = el.getAttributeNode("Id");
+                            if (idAttr == null) {
+                                //then try the wsu:Id value
+                                idAttr = el.getAttributeNodeNS(PolicyConstants.WSU_NAMESPACE_URI, "Id");
+                            }
+                            if (idAttr != null) {
+                                id = idAttr.getValue();
+                            }
+                        }
                         WSEncryptionPart part = 
                             new WSEncryptionPart(id, encryptionModifier);
                         part.setElement(el);

Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java?rev=1424642&r1=1424641&r2=1424642&view=diff
==============================================================================
--- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java (original)
+++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java Thu Dec 20 19:11:41 2012
@@ -591,7 +591,7 @@ public class TransportBindingHandler ext
                 result.addAll(
                     this.getElements(
                         "Element", signedElements.getXPathExpressions(), 
-                        signedElements.getDeclaredNamespaces(), found
+                        signedElements.getDeclaredNamespaces(), found, true
                     )
                 );
             } catch (XPathExpressionException e) {