Author: coheigea
Date: Fri Jan 24 16:17:34 2014
New Revision: 1561051

URL: http://svn.apache.org/r1561051
Log:
Reject duplicate actions

Modified:
    
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/WSSec.java
    
webservices/wss4j/trunk/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/MultipleActionTest.java

Modified: 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/WSSec.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/WSSec.java?rev=1561051&r1=1561050&r2=1561051&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/WSSec.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-stax/src/main/java/org/apache/wss4j/stax/WSSec.java
 Fri Jan 24 16:17:34 2014
@@ -19,6 +19,7 @@
 package org.apache.wss4j.stax;
 
 import java.net.URISyntaxException;
+import java.util.HashSet;
 
 import org.apache.wss4j.common.crypto.WSProviderConfig;
 import org.apache.wss4j.common.ext.WSSecurityException;
@@ -102,6 +103,12 @@ public class WSSec {
         if (securityProperties.getActions() == null) {
             throw new 
WSSConfigurationException(WSSConfigurationException.ErrorCode.FAILURE, 
"noOutputAction");
         }
+        
+        // Check for duplicate actions
+        if (new 
HashSet<XMLSecurityConstants.Action>(securityProperties.getActions()).size() 
+            != securityProperties.getActions().size()) {
+            throw new 
WSSConfigurationException(WSSConfigurationException.ErrorCode.FAILURE, 
"stax.duplicateActions");
+        }
 
         for (XMLSecurityConstants.Action action : 
securityProperties.getActions()) {
             if (WSSConstants.TIMESTAMP.equals(action)) {

Modified: 
webservices/wss4j/trunk/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/MultipleActionTest.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/MultipleActionTest.java?rev=1561051&r1=1561050&r2=1561051&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/MultipleActionTest.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-stax/src/test/java/org/apache/wss4j/stax/test/MultipleActionTest.java
 Fri Jan 24 16:17:34 2014
@@ -26,11 +26,13 @@ import java.util.List;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.stax.WSSec;
 import org.apache.wss4j.stax.ext.OutboundWSSec;
 import org.apache.wss4j.stax.ext.WSSConstants;
 import org.apache.wss4j.stax.ext.WSSSecurityProperties;
 import org.apache.wss4j.stax.test.utils.XmlReaderToWriter;
+import org.apache.xml.security.stax.ext.XMLSecurityConstants;
 import org.apache.xml.security.stax.securityEvent.SecurityEvent;
 import org.junit.Assert;
 import org.junit.Test;
@@ -108,4 +110,28 @@ public class MultipleActionTest extends 
         }
     }
     
+    @Test
+    public void testDuplicateActions() throws Exception {
+        WSSSecurityProperties properties = new WSSSecurityProperties();
+        List<XMLSecurityConstants.Action> actions = new 
ArrayList<XMLSecurityConstants.Action>();
+        actions.add(XMLSecurityConstants.SIGNATURE);
+        
properties.loadSignatureKeyStore(this.getClass().getClassLoader().getResource("transmitter.jks"),
 "default".toCharArray());
+        properties.setSignatureUser("transmitter");
+        properties.setCallbackHandler(new CallbackHandlerImpl());
+        properties.setActions(actions);
+        
+        // Should work
+        WSSec.getOutboundWSSec(properties);
+        
+        // Should throw an error on a duplicate Action
+        actions.add(XMLSecurityConstants.SIGNATURE);
+        properties.setActions(actions);
+        
+        try {
+            WSSec.getOutboundWSSec(properties);
+            Assert.fail();
+        } catch (WSSecurityException ex) {
+            Assert.assertTrue(ex.getMessage().contains("Duplicate Actions are 
not allowed"));
+        }
+    }
 }


Reply via email to