Author: coheigea
Date: Wed Apr  2 13:26:27 2014
New Revision: 1584023

URL: http://svn.apache.org/r1584023
Log:
Making setting AudienceRestrictions more configurable


Conflicts:
        src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java
        
src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java
        
src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java
        src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java
        
ws-security-stax/src/test/java/org/apache/wss4j/stax/test/saml/SamlConditionsTest.java

Added:
    
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/AudienceRestrictionBean.java
Modified:
    
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java
    
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java
    
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java
    
webservices/wss4j/branches/1_6_x-fixes/src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java

Added: 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/AudienceRestrictionBean.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/AudienceRestrictionBean.java?rev=1584023&view=auto
==============================================================================
--- 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/AudienceRestrictionBean.java
 (added)
+++ 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/AudienceRestrictionBean.java
 Wed Apr  2 13:26:27 2014
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ws.security.saml.ext.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class AudienceRestrictionBean represents a SAML AudienceRestriction object
+ */
+public class AudienceRestrictionBean {
+    private final List<String> audienceURIs = new ArrayList<String>();
+
+    /**
+     * Constructor AudienceRestrictionBean creates a new 
AudienceRestrictionBean instance.
+     */
+    public AudienceRestrictionBean() {
+    }
+
+    /**
+     * Constructor AudienceRestrictionBean creates a new 
AudienceRestrictionBean instance.
+     *
+     * @param audienceURIs The audienceURI instances
+     */
+    public AudienceRestrictionBean(
+        List<String> audienceURIs
+    ) {
+        if (audienceURIs != null) {
+            this.audienceURIs.addAll(audienceURIs);
+        }
+    }
+    
+    /**
+     * Get the audienceURI instances
+     *
+     * @return the audienceURI instances
+     */
+    public List<String> getAudienceURIs() {
+        return audienceURIs;
+    }
+    
+    /**
+     * Set the audienceURI instance
+     *
+     * @param audienceURI the audienceURI instance to set
+     */
+    public void setAudienceURIs(List<String> audienceURIs) {
+        this.audienceURIs.clear();
+        this.audienceURIs.addAll(audienceURIs);
+    }
+    
+    /**
+     * Method equals ...
+     *
+     * @param o of type Object
+     * @return boolean
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof AudienceRestrictionBean)) return false;
+
+        AudienceRestrictionBean that = (AudienceRestrictionBean) o;
+
+        if (!audienceURIs.equals(that.audienceURIs)) {
+            return false; 
+        }
+        
+        return true;
+    }
+
+    /**
+     * @return the hashcode of this object
+     */
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + audienceURIs.hashCode();
+        return result;
+    }
+
+}

Modified: 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java?rev=1584023&r1=1584022&r2=1584023&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java
 (original)
+++ 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/bean/ConditionsBean.java
 Wed Apr  2 13:26:27 2014
@@ -19,6 +19,8 @@
 
 package org.apache.ws.security.saml.ext.bean;
 
+import java.util.List;
+
 import org.joda.time.DateTime;
 
 
@@ -33,6 +35,7 @@ public class ConditionsBean {
     private DateTime notAfter;
     private int tokenPeriodMinutes;
     private String audienceURI;
+    private List<AudienceRestrictionBean> audienceRestrictions;
     private boolean oneTimeUse;
     private ProxyRestrictionBean proxyRestriction;
 
@@ -126,6 +129,7 @@ public class ConditionsBean {
      *
      * @return the audienceURI instance
      */
+    @Deprecated
     public String getAudienceURI() {
         return audienceURI;
     }
@@ -135,9 +139,28 @@ public class ConditionsBean {
      *
      * @param audienceURI the audienceURI instance to set
      */
+    @Deprecated
     public void setAudienceURI(String audienceURI) {
         this.audienceURI = audienceURI;
     }
+    
+    /**
+     * Get the audienceRestrictions instances
+     *
+     * @return the audienceRestrictions instances
+     */
+    public List<AudienceRestrictionBean> getAudienceRestrictions() {
+        return audienceRestrictions;
+    }
+
+    /**
+     * Set the audienceRestrictions instance
+     *
+     * @param audienceRestrictions the audienceRestrictions instance to set
+     */
+    public void setAudienceRestrictions(List<AudienceRestrictionBean> 
audienceRestrictions) {
+        this.audienceRestrictions = audienceRestrictions;
+    }
 
     /**
      * Get whether to include a OneTimeUse Element or not. Only applies to 
SAML2.
@@ -196,6 +219,13 @@ public class ConditionsBean {
             return false; 
         }
         
+        if (audienceRestrictions == null && that.audienceRestrictions != null) 
{
+            return false;
+        } else if (audienceRestrictions != null 
+            && !audienceRestrictions.equals(that.audienceRestrictions)) {
+            return false; 
+        }
+        
         if (oneTimeUse != that.oneTimeUse) return false;
         
         if (proxyRestriction == null && that.proxyRestriction != null) {
@@ -223,6 +253,9 @@ public class ConditionsBean {
         if (audienceURI != null) {
             result = 31 * result + audienceURI.hashCode();
         }
+        if (audienceRestrictions != null) {
+            result = 31 * result + audienceRestrictions.hashCode();
+        }
         result = 31 * result + (oneTimeUse ? 1 : 0);
         if (proxyRestriction != null) {
             result = 31 * result + proxyRestriction.hashCode();

Modified: 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java?rev=1584023&r1=1584022&r2=1584023&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java
 (original)
+++ 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML1ComponentBuilder.java
 Wed Apr  2 13:26:27 2014
@@ -24,6 +24,7 @@ import org.apache.ws.security.saml.ext.O
 import org.apache.ws.security.saml.ext.bean.ActionBean;
 import org.apache.ws.security.saml.ext.bean.AttributeBean;
 import org.apache.ws.security.saml.ext.bean.AttributeStatementBean;
+import org.apache.ws.security.saml.ext.bean.AudienceRestrictionBean;
 import org.apache.ws.security.saml.ext.bean.AuthDecisionStatementBean;
 import org.apache.ws.security.saml.ext.bean.AuthenticationStatementBean;
 import org.apache.ws.security.saml.ext.bean.ConditionsBean;
@@ -31,12 +32,10 @@ import org.apache.ws.security.saml.ext.b
 import org.apache.ws.security.saml.ext.bean.SubjectBean;
 import org.apache.ws.security.saml.ext.bean.SubjectLocalityBean;
 import org.apache.ws.security.util.UUIDGenerator;
-
 import org.joda.time.DateTime;
 import org.opensaml.Configuration;
 import org.opensaml.common.SAMLObjectBuilder;
 import org.opensaml.common.SAMLVersion;
-
 import org.opensaml.saml1.core.Action;
 import org.opensaml.saml1.core.Assertion;
 import org.opensaml.saml1.core.Attribute;
@@ -54,7 +53,6 @@ import org.opensaml.saml1.core.NameIdent
 import org.opensaml.saml1.core.Subject;
 import org.opensaml.saml1.core.SubjectConfirmation;
 import org.opensaml.saml1.core.SubjectLocality;
-
 import org.opensaml.xml.XMLObject;
 import org.opensaml.xml.XMLObjectBuilderFactory;
 import org.opensaml.xml.schema.XSString;
@@ -64,6 +62,7 @@ import org.opensaml.xml.security.x509.X5
 import org.opensaml.xml.signature.KeyInfo;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -242,7 +241,7 @@ public final class SAML1ComponentBuilder
      * @param conditionsBean A ConditionsBean object
      * @return a Conditions object
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "deprecation" })
     public static Conditions createSamlv1Conditions(ConditionsBean 
conditionsBean) {
         if (conditionsV1Builder == null) {
             conditionsV1Builder = (SAMLObjectBuilder<Conditions>) 
@@ -285,6 +284,16 @@ public final class SAML1ComponentBuilder
             
conditions.getAudienceRestrictionConditions().add(audienceRestriction);
         }
         
+        if (conditionsBean.getAudienceRestrictions() != null 
+            && !conditionsBean.getAudienceRestrictions().isEmpty()) {
+            for (AudienceRestrictionBean audienceRestrictionBean 
+                : conditionsBean.getAudienceRestrictions()) {
+                AudienceRestrictionCondition audienceRestriction = 
+                        
createSamlv1AudienceRestriction(audienceRestrictionBean);
+                
conditions.getAudienceRestrictionConditions().add(audienceRestriction);
+            }
+        }
+
         return conditions;
     }
     
@@ -294,9 +303,23 @@ public final class SAML1ComponentBuilder
      * @param audienceURI of type String
      * @return an AudienceRestrictionCondition object
      */
-    @SuppressWarnings("unchecked")
+    @Deprecated
     public static AudienceRestrictionCondition 
     createSamlv1AudienceRestriction(String audienceURI) {
+        AudienceRestrictionBean audienceRestrictionBean = new 
AudienceRestrictionBean();
+        
audienceRestrictionBean.setAudienceURIs(Collections.singletonList(audienceURI));
+        return createSamlv1AudienceRestriction(audienceRestrictionBean);
+    }
+    
+    /**
+     * Create an AudienceRestrictionCondition object
+     *
+     * @param audienceRestrictionBean of type AudienceRestrictionBean
+     * @return an AudienceRestrictionCondition object
+     */
+    @SuppressWarnings("unchecked")
+    public static AudienceRestrictionCondition 
+    createSamlv1AudienceRestriction(AudienceRestrictionBean 
audienceRestrictionBean) {
         if (audienceRestrictionV1Builder == null) {
             audienceRestrictionV1Builder = 
(SAMLObjectBuilder<AudienceRestrictionCondition>) 
                 
builderFactory.getBuilder(AudienceRestrictionCondition.DEFAULT_ELEMENT_NAME);
@@ -308,9 +331,12 @@ public final class SAML1ComponentBuilder
        
         AudienceRestrictionCondition audienceRestriction = 
             audienceRestrictionV1Builder.buildObject();
-        Audience audience = audienceV1Builder.buildObject();
-        audience.setUri(audienceURI);
-        audienceRestriction.getAudiences().add(audience);
+        
+        for (String audienceURI : audienceRestrictionBean.getAudienceURIs()) {
+            Audience audience = audienceV1Builder.buildObject();
+            audience.setUri(audienceURI);
+            audienceRestriction.getAudiences().add(audience);
+        }
         return audienceRestriction;
     }
 

Modified: 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java?rev=1584023&r1=1584022&r2=1584023&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java
 (original)
+++ 
webservices/wss4j/branches/1_6_x-fixes/src/main/java/org/apache/ws/security/saml/ext/builder/SAML2ComponentBuilder.java
 Wed Apr  2 13:26:27 2014
@@ -23,6 +23,7 @@ import org.apache.ws.security.WSSecurity
 import org.apache.ws.security.saml.ext.bean.ActionBean;
 import org.apache.ws.security.saml.ext.bean.AttributeBean;
 import org.apache.ws.security.saml.ext.bean.AttributeStatementBean;
+import org.apache.ws.security.saml.ext.bean.AudienceRestrictionBean;
 import org.apache.ws.security.saml.ext.bean.AuthDecisionStatementBean;
 import org.apache.ws.security.saml.ext.bean.AuthenticationStatementBean;
 import org.apache.ws.security.saml.ext.bean.ConditionsBean;
@@ -32,7 +33,6 @@ import org.apache.ws.security.saml.ext.b
 import org.apache.ws.security.saml.ext.bean.SubjectConfirmationDataBean;
 import org.apache.ws.security.saml.ext.bean.SubjectLocalityBean;
 import org.apache.ws.security.util.UUIDGenerator;
-
 import org.joda.time.DateTime;
 import org.opensaml.Configuration;
 import org.opensaml.common.SAMLObjectBuilder;
@@ -67,6 +67,7 @@ import org.opensaml.xml.schema.impl.XSSt
 import org.opensaml.xml.signature.KeyInfo;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -176,7 +177,7 @@ public final class SAML2ComponentBuilder
      * @param conditionsBean A ConditionsBean object
      * @return a Conditions object
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "deprecation" })
     public static Conditions createConditions(ConditionsBean conditionsBean) {
         if (conditionsBuilder == null) {
             conditionsBuilder = (SAMLObjectBuilder<Conditions>) 
@@ -219,6 +220,16 @@ public final class SAML2ComponentBuilder
             conditions.getAudienceRestrictions().add(audienceRestriction);
         }
         
+        if (conditionsBean.getAudienceRestrictions() != null 
+            && !conditionsBean.getAudienceRestrictions().isEmpty()) {
+            for (AudienceRestrictionBean audienceRestrictionBean 
+                : conditionsBean.getAudienceRestrictions()) {
+                AudienceRestriction audienceRestriction = 
+                        createAudienceRestriction(audienceRestrictionBean);
+                conditions.getAudienceRestrictions().add(audienceRestriction);
+            }
+        }
+        
         if (conditionsBean.isOneTimeUse()) {
             conditions.getConditions().add(createOneTimeUse());
         }
@@ -235,8 +246,23 @@ public final class SAML2ComponentBuilder
      * @param audienceURI of type String
      * @return an AudienceRestriction object
      */
-    @SuppressWarnings("unchecked")
+    @Deprecated
     public static AudienceRestriction createAudienceRestriction(String 
audienceURI) {
+        AudienceRestrictionBean audienceRestrictionBean = new 
AudienceRestrictionBean();
+        
audienceRestrictionBean.setAudienceURIs(Collections.singletonList(audienceURI));
+        return createAudienceRestriction(audienceRestrictionBean);
+    }
+    
+    /**
+     * Create an AudienceRestriction object
+     *
+     * @param audienceRestrictionBean of type AudienceRestrictionBean
+     * @return an AudienceRestriction object
+     */
+    @SuppressWarnings("unchecked")
+    public static AudienceRestriction createAudienceRestriction(
+        AudienceRestrictionBean audienceRestrictionBean
+    ) {
         if (audienceRestrictionBuilder == null) {
             audienceRestrictionBuilder = 
(SAMLObjectBuilder<AudienceRestriction>) 
                 
builderFactory.getBuilder(AudienceRestriction.DEFAULT_ELEMENT_NAME);
@@ -247,9 +273,12 @@ public final class SAML2ComponentBuilder
         }
        
         AudienceRestriction audienceRestriction = 
audienceRestrictionBuilder.buildObject();
-        Audience audience = audienceBuilder.buildObject();
-        audience.setAudienceURI(audienceURI);
-        audienceRestriction.getAudiences().add(audience);
+        
+        for (String audienceURI : audienceRestrictionBean.getAudienceURIs()) {
+            Audience audience = audienceBuilder.buildObject();
+            audience.setAudienceURI(audienceURI);
+            audienceRestriction.getAudiences().add(audience);
+        }
         return audienceRestriction;
     }
     

Modified: 
webservices/wss4j/branches/1_6_x-fixes/src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/branches/1_6_x-fixes/src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java?rev=1584023&r1=1584022&r2=1584023&view=diff
==============================================================================
--- 
webservices/wss4j/branches/1_6_x-fixes/src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java
 (original)
+++ 
webservices/wss4j/branches/1_6_x-fixes/src/test/java/org/apache/ws/security/saml/SamlConditionsTest.java
 Wed Apr  2 13:26:27 2014
@@ -20,6 +20,7 @@
 package org.apache.ws.security.saml;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.ws.security.WSConstants;
@@ -35,6 +36,7 @@ import org.apache.ws.security.message.WS
 import org.apache.ws.security.message.WSSecSAMLToken;
 import org.apache.ws.security.saml.ext.AssertionWrapper;
 import org.apache.ws.security.saml.ext.SAMLParms;
+import org.apache.ws.security.saml.ext.bean.AudienceRestrictionBean;
 import org.apache.ws.security.saml.ext.bean.ConditionsBean;
 import org.apache.ws.security.saml.ext.bean.ProxyRestrictionBean;
 import org.apache.ws.security.util.WSSecurityUtil;
@@ -308,6 +310,138 @@ public class SamlConditionsTest extends 
     }
     
     /**
+     * Test that creates, sends and processes an unsigned SAML 2 
authentication assertion
+     * with an AudienceRestriction Element
+     */
+    @SuppressWarnings("deprecation")
+    @org.junit.Test
+    public void testSAML2AudienceRestrictionOldAPI() throws Exception {
+        SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler();
+        callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN);
+        callbackHandler.setIssuer("www.example.com");
+        
+        ConditionsBean conditions = new ConditionsBean();
+        conditions.setTokenPeriodMinutes(5);
+        
+        conditions.setAudienceURI("http://apache.org/one";);
+        
+        callbackHandler.setConditions(conditions);
+        
+        SAMLParms samlParms = new SAMLParms();
+        samlParms.setCallbackHandler(callbackHandler);
+        AssertionWrapper assertion = new AssertionWrapper(samlParms);
+
+        WSSecSAMLToken wsSign = new WSSecSAMLToken();
+
+        Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG);
+        WSSecHeader secHeader = new WSSecHeader();
+        secHeader.insertSecurityHeader(doc);
+        
+        Document unsignedDoc = wsSign.build(doc, assertion, secHeader);
+
+        String outputString = 
+            
org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(unsignedDoc);
+        assertTrue(outputString.contains("AudienceRestriction"));
+        if (LOG.isDebugEnabled()) {
+            LOG.debug(outputString);
+        }
+        
+        verify(unsignedDoc);
+    }
+    
+    /**
+     * Test that creates, sends and processes an unsigned SAML 2 
authentication assertion
+     * with an AudienceRestriction Element
+     */
+    @org.junit.Test
+    public void testSAML2AudienceRestriction() throws Exception {
+        SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler();
+        callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN);
+        callbackHandler.setIssuer("www.example.com");
+        
+        ConditionsBean conditions = new ConditionsBean();
+        conditions.setTokenPeriodMinutes(5);
+        List<String> audiences = new ArrayList<String>();
+        audiences.add("http://apache.org/one";);
+        audiences.add("http://apache.org/two";);
+        AudienceRestrictionBean audienceRestrictionBean = new 
AudienceRestrictionBean();
+        audienceRestrictionBean.setAudienceURIs(audiences);
+        
conditions.setAudienceRestrictions(Collections.singletonList(audienceRestrictionBean));
+        
+        callbackHandler.setConditions(conditions);
+        
+        SAMLParms samlParms = new SAMLParms();
+        samlParms.setCallbackHandler(callbackHandler);
+        AssertionWrapper assertion = new AssertionWrapper(samlParms);
+
+        WSSecSAMLToken wsSign = new WSSecSAMLToken();
+
+        Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG);
+        WSSecHeader secHeader = new WSSecHeader();
+        secHeader.insertSecurityHeader(doc);
+        
+        Document unsignedDoc = wsSign.build(doc, assertion, secHeader);
+
+        String outputString = 
+            
org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(unsignedDoc);
+        assertTrue(outputString.contains("AudienceRestriction"));
+        if (LOG.isDebugEnabled()) {
+            LOG.debug(outputString);
+        }
+        
+        verify(unsignedDoc);
+    }
+    
+    /**
+     * Test that creates, sends and processes an unsigned SAML 2 
authentication assertion
+     * with two AudienceRestriction Elements
+     */
+    @org.junit.Test
+    public void testSAML2AudienceRestrictionSeparateRestrictions() throws 
Exception {
+        SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler();
+        callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN);
+        callbackHandler.setIssuer("www.example.com");
+        
+        ConditionsBean conditions = new ConditionsBean();
+        conditions.setTokenPeriodMinutes(5);
+        
+        List<AudienceRestrictionBean> audiencesRestrictions = 
+            new ArrayList<AudienceRestrictionBean>();
+        AudienceRestrictionBean audienceRestrictionBean = new 
AudienceRestrictionBean();
+        
audienceRestrictionBean.setAudienceURIs(Collections.singletonList("http://apache.org/one";));
+        audiencesRestrictions.add(audienceRestrictionBean);
+
+        audienceRestrictionBean = new AudienceRestrictionBean();
+        
audienceRestrictionBean.setAudienceURIs(Collections.singletonList("http://apache.org/two";));
+        audiencesRestrictions.add(audienceRestrictionBean);
+
+        conditions.setAudienceRestrictions(audiencesRestrictions);
+        
+        callbackHandler.setConditions(conditions);
+        
+        SAMLParms samlParms = new SAMLParms();
+        samlParms.setCallbackHandler(callbackHandler);
+        AssertionWrapper assertion = new AssertionWrapper(samlParms);
+
+        WSSecSAMLToken wsSign = new WSSecSAMLToken();
+
+        Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG);
+        WSSecHeader secHeader = new WSSecHeader();
+        secHeader.insertSecurityHeader(doc);
+        
+        Document unsignedDoc = wsSign.build(doc, assertion, secHeader);
+
+        String outputString = 
+            
org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(unsignedDoc);
+        assertTrue(outputString.contains("AudienceRestriction"));
+        if (LOG.isDebugEnabled()) {
+            LOG.debug(outputString);
+        }
+        
+        verify(unsignedDoc);
+    }
+    
+    /**
      * Verifies the soap envelope
      * <p/>
      * 


Reply via email to