[java-opensaml COMMIT] in /trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml: saml1/profile/impl/AddStatusToRe...

noreply at shibboleth.net noreply at shibboleth.net
Thu Apr 10 13:43:26 EDT 2014


Author: scantor
Date: Thu Apr 10 13:43:26 2014
New Revision: 3778

URL: http://svn.shibboleth.net/view/java-opensaml?rev=3778&view=rev
Log:
Support indirect population of status codes.

Modified:
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java

Modified: trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java?rev=3778&r1=3777&r2=3778&view=diff
==============================================================================
--- trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java (original)
+++ trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java Thu Apr 10 13:43:26 2014
@@ -82,11 +82,14 @@
     /** Predicate determining whether detailed error information is permitted. */
     @Nonnull private Predicate<ProfileRequestContext> detailedErrorsCondition;
 
+    /** Optional method to obtain status codes. */
+    @Nullable private Function<ProfileRequestContext,List<QName>> statusCodesLookupStrategy;
+
     /** Optional method to obtain a status message. */
     @Nullable private Function<ProfileRequestContext,String> statusMessageLookupStrategy;
     
-    /** One or more status codes to insert. */
-    @Nonnull @NonnullElements private List<QName> statusCodes;
+    /** One or more default status codes to insert. */
+    @Nonnull @NonnullElements private List<QName> defaultStatusCodes;
     
     /** A default status message to include. */
     @Nullable private String statusMessage;
@@ -102,7 +105,7 @@
         responseLookupStrategy =
                 Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
         detailedErrorsCondition = Predicates.alwaysFalse();
-        statusCodes = Collections.emptyList();
+        defaultStatusCodes = Collections.emptyList();
         detailedErrors = false;
     }
 
@@ -119,12 +122,24 @@
     }
 
     /**
+     * Set the optional strategy used to obtain status codes to include.
+     * 
+     * @param strategy strategy used to obtain status codes
+     */
+    public synchronized void setStatusCodesLookupStrategy(
+            @Nullable final Function<ProfileRequestContext,List<QName>> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+        statusCodesLookupStrategy = strategy;
+    }
+    
+    /**
      * Set the optional strategy used to obtain a status message to include.
      * 
      * @param strategy strategy used to obtain a status message
      */
     public synchronized void setStatusMessageLookupStrategy(
-            @Nullable final Function<ProfileRequestContext, String> strategy) {
+            @Nullable final Function<ProfileRequestContext,String> strategy) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         statusMessageLookupStrategy = strategy;
@@ -136,14 +151,14 @@
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public synchronized void setResponseLookupStrategy(
-            @Nonnull final Function<ProfileRequestContext, Response> strategy) {
+            @Nonnull final Function<ProfileRequestContext,Response> strategy) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
     /**
-     * Set the list of status code values to insert, ordered such that the top level code is first
+     * Set the default list of status code values to insert, ordered such that the top level code is first
      * and every other code will be nested inside the previous one.
      * 
      * @param codes list of status code values to insert
@@ -152,7 +167,7 @@
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
         Constraint.isNotNull(codes, "Status code list cannot be null");
-        statusCodes = Lists.newArrayList(Collections2.filter(codes, Predicates.notNull()));
+        defaultStatusCodes = Lists.newArrayList(Collections2.filter(codes, Predicates.notNull()));
     }
     
     /**
@@ -198,7 +213,17 @@
 
         final Status status = statusBuilder.buildObject();
         response.setStatus(status);
-        buildStatusCode(status);
+        
+        if (statusCodesLookupStrategy != null) {
+            final List<QName> codes = statusCodesLookupStrategy.apply(profileRequestContext);
+            if (codes == null || codes.isEmpty()) {
+                buildStatusCode(status, defaultStatusCodes);
+            } else {
+                buildStatusCode(status, codes);
+            }
+        } else {
+            buildStatusCode(status, defaultStatusCodes);

[... 138 lines stripped ...]


More information about the commits mailing list