[java-opensaml] branch main updated: IDP-2069 - Null Handling Task

Scott Cantor cantor.2 at osu.edu
Mon Apr 17 15:10:18 UTC 2023


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=2bd5abcd91344a3ad026b7b12704bbfa5929ad46

The following commit(s) were added to refs/heads/main by this push:
     new 2bd5abcd9 IDP-2069 - Null Handling Task
2bd5abcd9 is described below

commit 2bd5abcd91344a3ad026b7b12704bbfa5929ad46
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Apr 17 11:10:14 2023 -0400

    IDP-2069 - Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Clean up SAML 1 profile actions.
---
 .../opensaml/messaging/context/MessageContext.java | 16 ++++
 .../impl/AddDoNotCacheConditionToAssertions.java   | 14 +++-
 .../profile/impl/AddNameIdentifierToSubjects.java  | 19 ++---
 .../saml/saml1/profile/impl/AddResponseShell.java  |  8 +-
 .../saml1/profile/impl/AddStatusToResponse.java    | 38 +++++----
 .../impl/AddSubjectConfirmationToSubjects.java     | 29 ++++---
 .../impl/CopyNameIdentifierFromRequest.java        | 22 ++++--
 .../saml/saml1/profile/impl/ResolveArtifacts.java  | 34 +++++---
 .../AbstractSAML1NameIdentifierGeneratorTest.java  | 12 +--
 .../AddDoNotCacheConditionToAssertionsTest.java    | 30 ++++---
 .../impl/AddNameIdentifierToSubjectsTest.java      | 77 +++++++++---------
 .../saml1/profile/impl/AddResponseShellTest.java   | 13 ++-
 .../profile/impl/AddStatusToResponseTest.java      | 43 +++++-----
 .../impl/AddSubjectConfirmationToSubjectsTest.java | 92 +++++++++++-----------
 .../impl/CopyNameIdentifierFromRequestTest.java    | 35 ++++----
 .../saml1/profile/impl/ResolveArtifactsTest.java   | 33 ++++----
 16 files changed, 297 insertions(+), 218 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
index ad5a5ba73..77db5ff84 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
@@ -59,6 +59,22 @@ public final class MessageContext extends BaseContext {
     @Nonnull public Object ensureMessage() {
         return Constraint.isNotNull(msg, "Message was null");
     }
+    
+    /**
+     * Get the message represented by the message context, raising a {@link ConstraintViolationException}
+     * or {@link ClassCastException} if the message is absent or of the incorrect type.
+     * 
+     * @param <T> type of message
+     * @param claz class of message type
+     * 
+     * @return properly typed message
+     * 
+     * @since 5.0.0
+     */
+    @SuppressWarnings("null")
+    @Nonnull public <T> T ensureMessage(@Nonnull final Class<T> claz) {
+        return claz.cast(ensureMessage());
+    }
 
     /**
      * Set the message represented by the message context.
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
index d7c3b5e2c..def390b84 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -37,9 +36,10 @@ import org.opensaml.saml.saml1.core.DoNotCacheCondition;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.profile.SAML1ActionSupport;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Action to add a {@link DoNotCacheCondition} to every {@link Assertion} in a {@link Response} message.
@@ -57,7 +57,7 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
     @Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
 
     /** Response to modify. */
-    @Nullable private Response response;
+    @NonnullBeforeExec private Response response;
 
     /** Constructor. */
     public AddDoNotCacheConditionToAssertions() {
@@ -77,6 +77,11 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         log.debug("{} Attempting to add DoNotCache condition to every Assertion in Response", getLogPrefix());
 
         response = responseLookupStrategy.apply(profileRequestContext);
@@ -89,7 +94,7 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
             return false;
         }
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
     
     /** {@inheritDoc} */
@@ -101,6 +106,7 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
                         DoNotCacheCondition.DEFAULT_ELEMENT_NAME);
 
         for (final Assertion assertion : response.getAssertions()) {
+            assert assertion != null;
             final Conditions conditions = SAML1ActionSupport.addConditionsToAssertion(this, assertion);
             final List<DoNotCacheCondition> dncConditions = conditions.getDoNotCacheConditions();
             if (dncConditions.isEmpty()) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
index 2bc04baf9..f3c7978d4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
@@ -38,12 +38,13 @@ import org.opensaml.saml.saml1.core.Subject;
 import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.opensaml.saml.saml1.profile.SAML1NameIdentifierGenerator;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
@@ -82,10 +83,10 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
     @NonnullAfterInit private SAML1NameIdentifierGenerator generator;
     
     /** Formats to try. */
-    @Nonnull @NonnullElements private List<String> formats;
+    @NonnullBeforeExec private List<String> formats;
     
     /** Assertions to modify. */
-    @Nonnull @NonnullElements private List<Assertion> assertions;
+    @NonnullBeforeExec private List<Assertion> assertions;
     
     /** Constructor. */
     public AddNameIdentifierToSubjects() {
@@ -100,7 +101,6 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
         
         assertionsLookupStrategy = new AssertionStrategy();
         formatLookupStrategy = new MetadataNameIdentifierFormatStrategy();
-        formats = Collections.emptyList();
     }
     
     /**
@@ -245,11 +245,12 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
      * @return the subject to which the name identifier will be added
      */
     @Nonnull private Subject getStatementSubject(@Nonnull final SubjectStatement statement) {
-        if (statement.getSubject() != null) {
-            return statement.getSubject();
+        Subject subject = statement.getSubject();
+        if (subject != null) {
+            return subject;
         }
         
-        final Subject subject = subjectBuilder.buildObject();
+        subject = subjectBuilder.buildObject();
         statement.setSubject(subject);
         return subject;
     }
@@ -284,7 +285,7 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
         @Override
         @Nullable public List<Assertion> apply(@Nullable final ProfileRequestContext input) {
             if (input != null && input.getOutboundMessageContext() != null) {
-                final Object outboundMessage = input.getOutboundMessageContext().getMessage();
+                final Object outboundMessage = input.ensureOutboundMessageContext().getMessage();
                 if (outboundMessage == null) {
                     return null;
                 } else if (outboundMessage instanceof Assertion) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
index 30e10fa48..7f62dc424 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
@@ -21,7 +21,6 @@ import java.time.Instant;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObjectBuilderFactory;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -36,9 +35,10 @@ import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Status;
 import org.opensaml.saml.saml1.core.StatusCode;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.security.IdentifierGenerationStrategy;
 import net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType;
 
@@ -67,7 +67,7 @@ public class AddResponseShell extends AbstractProfileAction {
     private boolean overwriteExisting;
     
     /** The generator to use. */
-    @Nullable private IdentifierGenerationStrategy idGenerator;
+    @NonnullBeforeExec private IdentifierGenerationStrategy idGenerator;
     
     /** Constructor. */
     public AddResponseShell() {
@@ -153,7 +153,7 @@ public class AddResponseShell extends AbstractProfileAction {
         response.setStatus(status);
         response.setVersion(SAMLVersion.VERSION_11);
 
-        profileRequestContext.getOutboundMessageContext().setMessage(response);
+        profileRequestContext.ensureOutboundMessageContext().setMessage(response);
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
index 63b559bdf..7c9eeb29c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -44,13 +43,14 @@ import org.opensaml.saml.saml1.core.Status;
 import org.opensaml.saml.saml1.core.StatusCode;
 import org.opensaml.saml.saml1.core.StatusMessage;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
 
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
 
 /**
@@ -92,13 +92,13 @@ public class AddStatusToResponse extends AbstractProfileAction {
     private boolean detailedErrors;
     
     /** Response to modify. */
-    @Nullable private Response response;
+    @NonnullBeforeExec private Response response;
     
     /** Constructor. */
     public AddStatusToResponse() {
         responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
-        detailedErrorsCondition = Predicates.alwaysFalse();
-        defaultStatusCodes = Collections.emptyList();
+        detailedErrorsCondition = PredicateSupport.alwaysFalse();
+        defaultStatusCodes = CollectionSupport.emptyList();
         detailedErrors = false;
     }
 
@@ -149,9 +149,10 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * 
      * @param codes list of status code values to insert
      */
-    public void setStatusCodes(@Nonnull @NonnullElements final List<QName> codes) {
+    public void setStatusCodes(@Nonnull final List<QName> codes) {
         checkSetterPreconditions();
-        defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
+        defaultStatusCodes = CollectionSupport.copyToList(
+                Constraint.isNotNull(codes, "Status code list cannot be null"));
     }
     
     /**
@@ -168,7 +169,11 @@ public class AddStatusToResponse extends AbstractProfileAction {
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-        checkComponentActive();
+        
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         response = responseLookupStrategy.apply(profileRequestContext);
         if (response == null) {
             log.debug("{} Response message was not returned by lookup strategy", getLogPrefix());
@@ -180,7 +185,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
         
         log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled");
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
     
     /** {@inheritDoc} */
@@ -207,8 +212,8 @@ public class AddStatusToResponse extends AbstractProfileAction {
         // StatusMessage processing.
         if (!detailedErrors || statusMessageLookupStrategy == null) {
             if (statusMessage != null) {
-                log.debug("{} Setting StatusMessage to defaulted value", getLogPrefix());
                 buildStatusMessage(status, statusMessage);
+                log.debug("{} Setting StatusMessage to defaulted value", getLogPrefix());
             }
         } else if (statusMessageLookupStrategy != null) {
             final String message = statusMessageLookupStrategy.apply(profileRequestContext);
@@ -217,9 +222,9 @@ public class AddStatusToResponse extends AbstractProfileAction {
                         getLogPrefix());
                 buildStatusMessage(status, message);
             } else if (statusMessage != null) {
+                buildStatusMessage(status, statusMessage);
                 log.debug("{} Current state of request was not mappable, setting StatusMessage to defaulted value",
                         getLogPrefix());
-                buildStatusMessage(status, statusMessage);
             }
         }
     }
@@ -311,9 +316,12 @@ public class AddStatusToResponse extends AbstractProfileAction {
         @Nullable public List<QName> apply(@Nullable final ProfileRequestContext input) {
             final EventContext eventCtx = eventContextLookupStrategy.apply(input);
             if (eventCtx != null && eventCtx.getEvent() != null) {
-                return codeMappings.get(eventCtx.getEvent().toString());
+                final Object event = eventCtx.getEvent();
+                if (event != null) {
+                    return codeMappings.get(event.toString());
+                }
             }
-            return Collections.emptyList();
+            return CollectionSupport.emptyList();
         }
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
index daf4976b5..b26d10a2a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -18,13 +18,10 @@
 package org.opensaml.saml.saml1.profile.impl;
 
 import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -44,11 +41,13 @@ import org.opensaml.saml.saml1.core.Subject;
 import org.opensaml.saml.saml1.core.SubjectConfirmation;
 import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Action that builds {@link SubjectConfirmation} and adds it to the {@link Subject} of all the statements
@@ -85,7 +84,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
     @Nonnull @NonnullElements private Collection<String> confirmationMethods;
     
     /** Response to modify. */
-    @Nullable private Response response;
+    @NonnullBeforeExec private Response response;
     
     /** Flag indicating whether the outbound message is being issued via the Artifact profile. */
     private boolean artifactProfile;
@@ -105,7 +104,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         overwriteExisting = true;
         
         responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
-        confirmationMethods = Collections.emptyList();
+        confirmationMethods = CollectionSupport.emptyList();
     }
     
     /**
@@ -137,7 +136,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         checkSetterPreconditions();
         Constraint.isNotEmpty(methods, "Confirmation method collection cannot be null or empty");
         
-        confirmationMethods = List.copyOf(methods);
+        confirmationMethods = CollectionSupport.copyToList(methods);
     }
     
     /** {@inheritDoc} */
@@ -153,6 +152,11 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         log.debug("{} Attempting to add SubjectConfirmation to assertions in outgoing Response", getLogPrefix());
 
         response = responseLookupStrategy.apply(profileRequestContext);
@@ -165,12 +169,12 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
             return false;
         }
         
-        final SAMLBindingContext bindingCtx = profileRequestContext.getOutboundMessageContext().getSubcontext(
+        final SAMLBindingContext bindingCtx = profileRequestContext.ensureOutboundMessageContext().getSubcontext(
                 SAMLBindingContext.class);
         artifactProfile = bindingCtx != null
                 && Objects.equals(bindingCtx.getBindingUri(), SAMLConstants.SAML1_ARTIFACT_BINDING_URI);
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
     
 // Checkstyle: CyclomaticComplexity OFF    
@@ -222,11 +226,12 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @return the subject to which the confirmation will be added
      */
     @Nonnull private Subject getStatementSubject(@Nonnull final SubjectStatement statement) {
-        if (statement.getSubject() != null) {
-            return statement.getSubject();
+        Subject subject = statement.getSubject();
+        if (subject != null) {
+            return subject;
         }
         
-        final Subject subject = subjectBuilder.buildObject();
+        subject = subjectBuilder.buildObject();
         statement.setSubject(subject);
         return subject;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
index 851d3f2cb..8a3ff207a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml1.profile.impl;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -40,9 +39,10 @@ import org.opensaml.saml.saml1.core.Statement;
 import org.opensaml.saml.saml1.core.Subject;
 import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
@@ -80,10 +80,10 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
     @Nonnull private Function<ProfileRequestContext,Response> responseLookupStrategy;
 
     /** NameIdentifier to copy. */
-    @Nullable private NameIdentifier nameIdentifier; 
+    @NonnullBeforeExec private NameIdentifier nameIdentifier; 
     
     /** Response to modify. */
-    @Nullable private Response response;
+    @NonnullBeforeExec private Response response;
     
     /** Constructor. */
     public CopyNameIdentifierFromRequest() {
@@ -138,6 +138,11 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         log.debug("{} Attempting to add NameIdentifier to statements in outgoing Response", getLogPrefix());
 
         response = responseLookupStrategy.apply(profileRequestContext);
@@ -164,7 +169,7 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
             return false;
         }
                 
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
     
     /** {@inheritDoc} */
@@ -199,11 +204,12 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
      * @return the subject to which the name identifier will be added
      */
     @Nonnull private Subject getStatementSubject(@Nonnull final SubjectStatement statement) {
-        if (statement.getSubject() != null) {
-            return statement.getSubject();
+        Subject subject = statement.getSubject();
+        if (subject != null) {
+            return subject;
         }
         
-        final Subject subject = subjectBuilder.buildObject();
+        subject = subjectBuilder.buildObject();
         statement.setSubject(subject);
         return subject;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
index 2cf4516b6..44b28fce3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
@@ -39,11 +38,12 @@ import org.opensaml.saml.saml1.core.AssertionArtifact;
 import org.opensaml.saml.saml1.core.Request;
 import org.opensaml.saml.saml1.core.Response;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullBeforeExec;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Action that resolves SAML 1.x artifacts inside a {@link Request} located via a lookup strategy,
@@ -78,16 +78,16 @@ public class ResolveArtifacts extends AbstractProfileAction {
     @NonnullAfterInit private SAMLArtifactMap artifactMap;
 
     /** Request to process. */
-    @Nullable private Request request;
+    @NonnullBeforeExec private Request request;
     
     /** Response to populate. */
-    @Nullable private Response response;
+    @NonnullBeforeExec private Response response;
     
     /** Identity of issuer. */
-    @Nullable private String issuerId;
+    @NonnullBeforeExec private String issuerId;
 
     /** Identity of requester. */
-    @Nullable private String requesterId;
+    @NonnullBeforeExec private String requesterId;
     
     /** Constructor. */
     public ResolveArtifacts() {
@@ -171,6 +171,10 @@ public class ResolveArtifacts extends AbstractProfileAction {
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         request = requestLookupStrategy.apply(profileRequestContext);
         if (request == null) {
             log.debug("{} No request located", getLogPrefix());
@@ -203,9 +207,10 @@ public class ResolveArtifacts extends AbstractProfileAction {
             return false;
         }
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
 
+// Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
     @Override
     protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
@@ -214,7 +219,11 @@ public class ResolveArtifacts extends AbstractProfileAction {
         
         try {
             for (final AssertionArtifact artifact : request.getAssertionArtifacts()) {
-                final SAMLArtifactMapEntry entry = artifactMap.get(artifact.getValue());
+                final String aval = artifact.getValue();
+                if (aval == null) {
+                    continue;
+                }
+                final SAMLArtifactMapEntry entry = artifactMap.get(aval);
                 if (entry == null) {
                     log.warn("{} Unresolvable AssertionArtifact '{}' from relying party '{}'", getLogPrefix(),
                             artifact.getValue(), requesterId);
@@ -222,7 +231,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
                     break;
                 }
                 
-                artifactMap.remove(artifact.getValue());
+                artifactMap.remove(aval);
                 
                 if (!entry.getIssuerId().equals(issuerId)) {
                     log.warn("{} Artifact issuer mismatch, issued by '{}' but IdP has entityID of '{}'",
@@ -253,8 +262,12 @@ public class ResolveArtifacts extends AbstractProfileAction {
             
             // Make sure we remove everything requested.
             for (final AssertionArtifact artifact : request.getAssertionArtifacts()) {
+                final String aval = artifact.getValue();
+                if (aval == null) {
+                    continue;
+                }
                 try {
-                    artifactMap.remove(artifact.getValue());
+                    artifactMap.remove(aval);
                 } catch (final IOException e) {
                     log.error("{} Error removing mapping for artifact '{}'", getLogPrefix(),
                             artifact.getValue());
@@ -264,5 +277,6 @@ public class ResolveArtifacts extends AbstractProfileAction {
             ActionSupport.buildEvent(profileRequestContext, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
         }
     }
+// Checkstyle: CyclomaticComplexity ON
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AbstractSAML1NameIdentifierGeneratorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AbstractSAML1NameIdentifierGeneratorTest.java
index 223953cd6..082d2a611 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AbstractSAML1NameIdentifierGeneratorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AbstractSAML1NameIdentifierGeneratorTest.java
@@ -20,6 +20,8 @@ package org.opensaml.saml.saml1.profile.impl;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.FunctionSupport;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.SAMLException;
@@ -42,7 +44,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
         mock.initialize();
         
         final NameIdentifier nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
-        Assert.assertNotNull(nameId);
+        assert nameId != null;
         Assert.assertEquals(nameId.getValue(), "foo");
         Assert.assertEquals(nameId.getNameQualifier(), NAME_QUALIFIER);
     }
@@ -56,7 +58,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
         mock.initialize();
         
         final NameIdentifier nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
-        Assert.assertNotNull(nameId);
+        assert nameId != null;
         Assert.assertEquals(nameId.getValue(), "foo");
         Assert.assertNull(nameId.getNameQualifier());
     }
@@ -69,7 +71,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
         mock.initialize();
         
         final NameIdentifier nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
-        Assert.assertNotNull(nameId);
+        assert nameId != null;
         Assert.assertEquals(nameId.getValue(), "foo");
         Assert.assertNull(nameId.getNameQualifier());
     }
@@ -81,7 +83,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
         mock.initialize();
         
         final NameIdentifier nameId = mock.generate(new ProfileRequestContext(), mock.getFormat());
-        Assert.assertNotNull(nameId);
+        assert nameId != null;
         Assert.assertEquals(nameId.getValue(), "foo");
         Assert.assertEquals(nameId.getNameQualifier(), NAME_QUALIFIER);
     }
@@ -95,7 +97,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
         
         /** {@inheritDoc} */
         @Override
-        protected String getIdentifier(ProfileRequestContext profileRequestContext) throws SAMLException {
+        protected String getIdentifier(@Nonnull final ProfileRequestContext profileRequestContext) throws SAMLException {
             return "foo";
         }
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
index cad773e11..536c48d4e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
@@ -88,9 +88,10 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
         Assert.assertNotNull(response.getAssertions());
         Assert.assertEquals(response.getAssertions().size(), 1);
 
-        Assert.assertNotNull(assertion.getConditions());
-        Assert.assertNotNull(assertion.getConditions().getDoNotCacheConditions());
-        Assert.assertEquals(assertion.getConditions().getDoNotCacheConditions().size(), 1);
+        final Conditions c = assertion.getConditions();
+        assert c != null;
+        Assert.assertNotNull(c.getDoNotCacheConditions());
+        Assert.assertEquals(c.getDoNotCacheConditions().size(), 1);
     }
 
     /**
@@ -119,9 +120,10 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        Assert.assertNotNull(assertion.getConditions());
-        Assert.assertNotNull(assertion.getConditions().getDoNotCacheConditions());
-        Assert.assertEquals(assertion.getConditions().getDoNotCacheConditions().size(), 1);
+        final Conditions c = assertion.getConditions();
+        assert c != null;
+        Assert.assertNotNull(c.getDoNotCacheConditions());
+        Assert.assertEquals(c.getDoNotCacheConditions().size(), 1);
     }
 
     /**
@@ -155,9 +157,10 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        Assert.assertNotNull(assertion.getConditions());
-        Assert.assertNotNull(assertion.getConditions().getDoNotCacheConditions());
-        Assert.assertEquals(assertion.getConditions().getDoNotCacheConditions().size(), 1);
+        final Conditions c = assertion.getConditions();
+        assert c != null;
+        Assert.assertNotNull(c.getDoNotCacheConditions());
+        Assert.assertEquals(c.getDoNotCacheConditions().size(), 1);
     }
 
     /**
@@ -183,10 +186,11 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
         Assert.assertEquals(response.getAssertions().size(), 3);
 
         for (final Assertion assertion : response.getAssertions()) {
-            Assert.assertNotNull(assertion.getConditions());
-            Assert.assertNotNull(assertion.getConditions().getDoNotCacheConditions());
-            Assert.assertEquals(assertion.getConditions().getDoNotCacheConditions().size(), 1);
+            final Conditions c = assertion.getConditions();
+            assert c != null;
+            Assert.assertNotNull(c.getDoNotCacheConditions());
+            Assert.assertEquals(c.getDoNotCacheConditions().size(), 1);
         }
     }
     
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
index c1b7d9bb5..6c5c0d757 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.function.Function;
 
@@ -28,7 +27,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.testing.ActionTestingSupport;
 import org.opensaml.profile.testing.RequestContextBuilder;
 import org.opensaml.saml.common.SAMLException;
-import org.opensaml.saml.common.profile.NameIdentifierGenerator;
 import org.opensaml.saml.saml1.core.Assertion;
 import org.opensaml.saml.saml1.core.NameIdentifier;
 import org.opensaml.saml.saml1.core.Response;
@@ -39,11 +37,12 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicates;
-
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.PredicateSupport;
 
 /** Test for {@link AddNameIdentifierToSubjects}. */
+ at SuppressWarnings("javadoc")
 public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
 
     private static final String NAME_QUALIFIER = "https://idp.example.org";
@@ -66,7 +65,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
 
         final MockSAML1NameIdentifierGenerator mock2 = new MockSAML1NameIdentifierGenerator("bar");
         mock2.setFormat(NameIdentifier.EMAIL);
-        mock2.setActivationCondition(Predicates.alwaysFalse());
+        mock2.setActivationCondition(PredicateSupport.alwaysFalse());
         mock2.initialize();
 
         final MockSAML1NameIdentifierGenerator mock3 = new MockSAML1NameIdentifierGenerator("baz");
@@ -74,7 +73,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         mock3.initialize();
         
         generator = new ChainingSAML1NameIdentifierGenerator();
-        generator.setGenerators(Arrays.<NameIdentifierGenerator<NameIdentifier>>asList(mock, mock2, mock3));
+        generator.setGenerators(CollectionSupport.listOf(mock, mock2, mock3));
         
         action.setNameIdentifierGenerator(generator);
     }
@@ -84,28 +83,28 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertNull(prc.getOutboundMessageContext().getMessage());
+        Assert.assertNull(prc.ensureOutboundMessageContext().getMessage());
     }
 
     @Test
     public void testNoAssertions() throws ComponentInitializationException {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoStatements() throws ComponentInitializationException {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         
         action.setFormatLookupStrategy(new X509FormatLookupStrategy());
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0).getStatements().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0).getStatements().isEmpty());
     }
 
     @Test void testArbitraryFormat() throws ComponentInitializationException {
@@ -116,11 +115,11 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNull(subject);
 
-        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+        assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNull(subject);
     }
@@ -134,19 +133,21 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getNameIdentifier());
-        Assert.assertEquals(subject.getNameIdentifier().getValue(), "foo");
-        Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.X509_SUBJECT);
+        assert subject != null;
+        NameIdentifier nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        Assert.assertEquals(nameID.getValue(), "foo");
+        Assert.assertEquals(nameID.getFormat(), NameIdentifier.X509_SUBJECT);
 
-        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+        assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getNameIdentifier());
-        Assert.assertEquals(subject.getNameIdentifier().getValue(), "foo");
-        Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.X509_SUBJECT);
+        assert subject != null;
+        nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        Assert.assertEquals(nameID.getValue(), "foo");
+        Assert.assertEquals(nameID.getFormat(), NameIdentifier.X509_SUBJECT);
     }
 
     @Test void testMultipleGenerators() throws ComponentInitializationException {
@@ -158,19 +159,21 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getNameIdentifier());
-        Assert.assertEquals(subject.getNameIdentifier().getValue(), "baz");
-        Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.EMAIL);
+        assert subject != null;
+        NameIdentifier nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        Assert.assertEquals(nameID.getValue(), "baz");
+        Assert.assertEquals(nameID.getFormat(), NameIdentifier.EMAIL);
 
-        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+        assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getNameIdentifier());
-        Assert.assertEquals(subject.getNameIdentifier().getValue(), "baz");
-        Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.EMAIL);
+        assert subject != null;
+        nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        Assert.assertEquals(nameID.getValue(), "baz");
+        Assert.assertEquals(nameID.getFormat(), NameIdentifier.EMAIL);
     }
     
     /** Set up the test message with some statements. */
@@ -180,7 +183,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         response.getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         response.getAssertions().get(0).getAuthenticationStatements().add(SAML1ActionTestingSupport.buildAuthenticationStatement());
         response.getAssertions().get(1).getAttributeStatements().add(SAML1ActionTestingSupport.buildAttributeStatement());
-        prc.getOutboundMessageContext().setMessage(response);
+        prc.ensureOutboundMessageContext().setMessage(response);
     }
     
     private class MockSAML1NameIdentifierGenerator extends AbstractSAML1NameIdentifierGenerator {
@@ -209,7 +212,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         /** {@inheritDoc} */
         @Override
         public List<String> apply(ProfileRequestContext input) {
-            return Arrays.asList(NameIdentifier.WIN_DOMAIN_QUALIFIED, NameIdentifier.X509_SUBJECT);
+            return CollectionSupport.listOf(NameIdentifier.WIN_DOMAIN_QUALIFIED, NameIdentifier.X509_SUBJECT);
         }
     }
 
@@ -218,7 +221,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         /** {@inheritDoc} */
         @Override
         public List<String> apply(ProfileRequestContext input) {
-            return Arrays.asList(NameIdentifier.WIN_DOMAIN_QUALIFIED, NameIdentifier.EMAIL);
+            return CollectionSupport.listOf(NameIdentifier.WIN_DOMAIN_QUALIFIED, NameIdentifier.EMAIL);
         }
     }
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
index cc8c341cf..621447f40 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
@@ -18,7 +18,6 @@
 package org.opensaml.saml.saml1.profile.impl;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
-import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.testing.ActionTestingSupport;
@@ -35,6 +34,7 @@ import org.testng.annotations.Test;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link AddResponseShell} unit test. */
+ at SuppressWarnings("javadoc")
 public class AddResponseShellTest extends OpenSAMLInitBaseTestCase {
 
     private AddResponseShell action;
@@ -50,18 +50,17 @@ public class AddResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
-        final Response response = (Response) outMsgCtx.getMessage();
+        final Response response = prc.ensureOutboundMessageContext().ensureMessage(Response.class);
 
-        Assert.assertNotNull(response);
         Assert.assertNotNull(response.getID());
         Assert.assertNotNull(response.getIssueInstant());
         Assert.assertEquals(response.getVersion(), SAMLVersion.VERSION_11);
 
         final Status status = response.getStatus();
-        Assert.assertNotNull(status);
-        Assert.assertNotNull(status.getStatusCode());
-        Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.SUCCESS);
+        assert status != null;
+        final StatusCode code = status.getStatusCode();
+        assert code != null;
+        Assert.assertEquals(code.getValue(), StatusCode.SUCCESS);
     }
 
     @Test public void testAddResponseWhenResponseAlreadyExist() {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
index 58f583c56..ee3eaaf9a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
@@ -17,8 +17,6 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.Arrays;
-
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.testing.ActionTestingSupport;
@@ -26,14 +24,17 @@ import org.opensaml.profile.testing.RequestContextBuilder;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Status;
 import org.opensaml.saml.saml1.core.StatusCode;
+import org.opensaml.saml.saml1.core.StatusMessage;
 import org.opensaml.saml.saml1.testing.SAML1ActionTestingSupport;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link AddStatusToResponse} unit test. */
+ at SuppressWarnings("javadoc")
 public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
     
     private ProfileRequestContext prc;
@@ -52,35 +53,37 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = prc.ensureOutboundMessageContext().ensureMessage(Response.class);
 
         final Status status = response.getStatus();
-        Assert.assertNotNull(status);
-        
-        Assert.assertNotNull(status.getStatusCode());
-        Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.RESPONDER);
-        Assert.assertNull(status.getStatusCode().getStatusCode());
+        assert status != null;
         
+        final StatusCode code = status.getStatusCode();
+        assert code != null;
+        Assert.assertEquals(code.getValue(), StatusCode.RESPONDER);
+        Assert.assertNull(code.getStatusCode());
         Assert.assertNull(status.getStatusMessage());
     }
 
     @Test public void testMultiStatus() throws ComponentInitializationException {
-        action.setStatusCodes(Arrays.asList(StatusCode.REQUESTER, StatusCode.REQUEST_VERSION_DEPRECATED));
+        action.setStatusCodes(CollectionSupport.listOf(StatusCode.REQUESTER, StatusCode.REQUEST_VERSION_DEPRECATED));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = prc.ensureOutboundMessageContext().ensureMessage(Response.class);
 
         final Status status = response.getStatus();
-        Assert.assertNotNull(status);
+        assert status != null;
         
-        Assert.assertNotNull(status.getStatusCode());
-        Assert.assertEquals(status.getStatusCode().getValue(), StatusCode.REQUESTER);
-        Assert.assertNotNull(status.getStatusCode().getStatusCode());
-        Assert.assertEquals(status.getStatusCode().getStatusCode().getValue(), StatusCode.REQUEST_VERSION_DEPRECATED);
-        Assert.assertNull(status.getStatusCode().getStatusCode().getStatusCode());
+        StatusCode code = status.getStatusCode();
+        assert code != null;
+        Assert.assertEquals(code.getValue(), StatusCode.REQUESTER);
+        code = code.getStatusCode();
+        assert code != null;
+        Assert.assertEquals(code.getValue(), StatusCode.REQUEST_VERSION_DEPRECATED);
+        Assert.assertNull(code.getStatusCode());
         
         Assert.assertNull(status.getStatusMessage());
     }
@@ -92,11 +95,13 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = prc.ensureOutboundMessageContext().ensureMessage(Response.class);
 
         final Status status = response.getStatus();
-        Assert.assertNotNull(status);
-        Assert.assertEquals(status.getStatusMessage().getValue(), "Foo");
+        assert status != null;
+        final StatusMessage msg = status.getStatusMessage();
+        assert msg != null;
+        Assert.assertEquals(msg.getValue(), "Foo");
     }
     
  }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
index 271f2012d..668aadc3b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
@@ -17,9 +17,6 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
-import java.util.Arrays;
-import java.util.Collections;
-
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -31,15 +28,18 @@ import org.opensaml.saml.saml1.core.Assertion;
 import org.opensaml.saml.saml1.core.ConfirmationMethod;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Subject;
+import org.opensaml.saml.saml1.core.SubjectConfirmation;
 import org.opensaml.saml.saml1.testing.SAML1ActionTestingSupport;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 
 /** Test for {@link AddSubjectConfirmationToSubjects}. */
+ at SuppressWarnings("javadoc")
 public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCase {
     
     private ProfileRequestContext prc;
@@ -60,7 +60,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
     
     @Test
     public void testNoMessage() throws ComponentInitializationException {
-        action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
+        action.setMethods(CollectionSupport.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
@@ -68,103 +68,107 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
 
     @Test
     public void testNoAssertions() throws ComponentInitializationException {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
         
-        action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
+        action.setMethods(CollectionSupport.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoStatements() throws ComponentInitializationException {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         
-        action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
+        action.setMethods(CollectionSupport.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0).getStatements().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0).getStatements().isEmpty());
     }
 
     @Test void testSingle() throws ComponentInitializationException {
         addStatements();
         
-        action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
+        action.setMethods(CollectionSupport.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getSubjectConfirmation());
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().size(), 1);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getURI(),
+        assert subject != null;
+        SubjectConfirmation sc = subject.getSubjectConfirmation();
+        assert sc != null;
+        Assert.assertEquals(sc.getConfirmationMethods().size(), 1);
+        Assert.assertEquals(sc.getConfirmationMethods().get(0).getURI(),
                 ConfirmationMethod.METHOD_BEARER);
 
-        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+        assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getSubjectConfirmation());
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().size(), 1);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getURI(),
+        assert subject != null;
+        sc = subject.getSubjectConfirmation();
+        assert sc != null;
+        Assert.assertEquals(sc.getConfirmationMethods().size(), 1);
+        Assert.assertEquals(sc.getConfirmationMethods().get(0).getURI(),
                 ConfirmationMethod.METHOD_BEARER);
     }
 
     @Test void testMultiple() throws ComponentInitializationException {
         addStatements();
         
-        action.setMethods(Arrays.asList(ConfirmationMethod.METHOD_BEARER, ConfirmationMethod.METHOD_SENDER_VOUCHES));
+        action.setMethods(CollectionSupport.listOf(ConfirmationMethod.METHOD_BEARER, ConfirmationMethod.METHOD_SENDER_VOUCHES));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getSubjectConfirmation());
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().size(), 2);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getURI(),
+        assert subject != null;
+        SubjectConfirmation sc = subject.getSubjectConfirmation();
+        assert sc != null;
+        Assert.assertEquals(sc.getConfirmationMethods().size(), 2);
+        Assert.assertEquals(sc.getConfirmationMethods().get(0).getURI(),
                 ConfirmationMethod.METHOD_BEARER);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(1).getURI(),
+        Assert.assertEquals(sc.getConfirmationMethods().get(1).getURI(),
                 ConfirmationMethod.METHOD_SENDER_VOUCHES);
 
-        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
+        assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getSubjectConfirmation());
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().size(), 2);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getURI(),
+        assert subject != null;
+        sc = subject.getSubjectConfirmation();
+        assert sc != null;
+        Assert.assertEquals(sc.getConfirmationMethods().size(), 2);
+        Assert.assertEquals(sc.getConfirmationMethods().get(0).getURI(),
                 ConfirmationMethod.METHOD_BEARER);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(1).getURI(),
+        Assert.assertEquals(sc.getConfirmationMethods().get(1).getURI(),
                 ConfirmationMethod.METHOD_SENDER_VOUCHES);
     }
     
     @Test void testArtifact() throws ComponentInitializationException {
         addStatements();
-        prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class, true).setBindingUri(
+        prc.ensureOutboundMessageContext().ensureSubcontext(SAMLBindingContext.class).setBindingUri(
                 SAMLConstants.SAML1_ARTIFACT_BINDING_URI);
         
-        action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
+        action.setMethods(CollectionSupport.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getSubjectConfirmation());
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().size(), 1);
-        Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getURI(),
-                ConfirmationMethod.METHOD_ARTIFACT);
+        assert subject != null;
+        final SubjectConfirmation sc = subject.getSubjectConfirmation();
+        assert sc != null;
+        Assert.assertEquals(sc.getConfirmationMethods().size(), 1);
+        Assert.assertEquals(sc.getConfirmationMethods().get(0).getURI(), ConfirmationMethod.METHOD_ARTIFACT);
     }
     
     /** Set up the test message with some statements. */
@@ -174,7 +178,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         response.getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         response.getAssertions().get(0).getAuthenticationStatements().add(SAML1ActionTestingSupport.buildAuthenticationStatement());
         response.getAssertions().get(1).getAttributeStatements().add(SAML1ActionTestingSupport.buildAttributeStatement());
-        prc.getOutboundMessageContext().setMessage(response);
+        prc.ensureOutboundMessageContext().setMessage(response);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
index de11606db..f8a3065fa 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
@@ -23,6 +23,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.testing.ActionTestingSupport;
 import org.opensaml.profile.testing.RequestContextBuilder;
 import org.opensaml.saml.saml1.core.Assertion;
+import org.opensaml.saml.saml1.core.NameIdentifier;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Subject;
 import org.opensaml.saml.saml1.testing.SAML1ActionTestingSupport;
@@ -34,6 +35,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 
 
 /** Test for {@link CopyNameIdentifierFromRequest}. */
+ at SuppressWarnings("javadoc")
 public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase {
 
     private static final String NAME_QUALIFIER = "https://idp.example.org";
@@ -58,17 +60,17 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
 
     @Test
     public void testNoAssertions() {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
 
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoRequest() {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         addStatements();
 
         action.execute(prc);
@@ -77,11 +79,11 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
 
     @Test
     public void testNoName() {
-        prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        prc.ensureOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
+        prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         addStatements();
 
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(null));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(null));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
@@ -90,19 +92,22 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
     @Test void testCopy() {
         
         Subject subject = SAML1ActionTestingSupport.buildSubject("jdoe");
-        subject.getNameIdentifier().setNameQualifier(NAME_QUALIFIER);
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(subject));
+        NameIdentifier nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        nameID.setNameQualifier(NAME_QUALIFIER);
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(subject));
         addStatements();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
+        Assertion assertion = prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().get(0);
         subject = assertion.getAttributeStatements().get(0).getSubject();
-        Assert.assertNotNull(subject);
-        Assert.assertNotNull(subject.getNameIdentifier());
-        Assert.assertEquals(subject.getNameIdentifier().getValue(), "jdoe");
-        Assert.assertEquals(subject.getNameIdentifier().getNameQualifier(), NAME_QUALIFIER);
+        assert subject != null;
+        nameID = subject.getNameIdentifier();
+        assert nameID != null;
+        Assert.assertEquals(nameID.getValue(), "jdoe");
+        Assert.assertEquals(nameID.getNameQualifier(), NAME_QUALIFIER);
     }
 
     /** Set up the test message with some statements. */
@@ -110,7 +115,7 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
         final Response response = SAML1ActionTestingSupport.buildResponse();
         response.getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         response.getAssertions().get(0).getAttributeStatements().add(SAML1ActionTestingSupport.buildAttributeStatement());
-        prc.getOutboundMessageContext().setMessage(response);
+        prc.ensureOutboundMessageContext().setMessage(response);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
index a0cdb436c..f3907f213 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
@@ -38,6 +38,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 /** {@link ResolveArtifacts} unit test. */
+ at SuppressWarnings("javadoc")
 public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
 
     private BasicSAMLArtifactMap artifactMap;
@@ -49,7 +50,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         prc = new RequestContextBuilder().setOutboundMessage(
                 SAML1ActionTestingSupport.buildResponse()).buildProfileRequestContext();
-        prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).setEntityId("SP");
+        prc.ensureInboundMessageContext().ensureSubcontext(SAMLPeerEntityContext.class).setEntityId("SP");
         
         artifactMap = new BasicSAMLArtifactMap();
         artifactMap.initialize();
@@ -66,77 +67,77 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testNoArtifacts() {
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest((String[]) null));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest((String[]) null));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
     }
     
     @Test public void testNoResponse() {
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
-        prc.getOutboundMessageContext().setMessage(null);
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
+        prc.ensureOutboundMessageContext().setMessage(null);
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, EventIds.INVALID_MSG_CTX);
     }
     
     @Test public void testMissingArtifacts() throws IOException {
         artifactMap.put("bar", "SP", "IdP", SAML1ActionTestingSupport.buildAssertion());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo","bar"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo","bar"));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("bar"));
     }
 
     @Test public void testWrongMessageType() throws IOException {
         artifactMap.put("foo", "SP", "IdP", SAML1ActionTestingSupport.buildResponse());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
     @Test public void testWrongSP() throws IOException {
         artifactMap.put("foo", "SP2", "IdP", SAML1ActionTestingSupport.buildAssertion());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
     @Test public void testWrongIdP() throws IOException {
         artifactMap.put("foo", "SP", "IdP2", SAML1ActionTestingSupport.buildAssertion());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
+        Assert.assertTrue(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
     @Test public void testOne() throws IOException {
         artifactMap.put("foo", "SP", "IdP", SAML1ActionTestingSupport.buildAssertion());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo"));
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertEquals(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().size(), 1);
+        Assert.assertEquals(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().size(), 1);
         Assert.assertNull(artifactMap.get("foo"));
     }
 
     @Test public void testMultiple() throws IOException {
         artifactMap.put("foo", "SP", "IdP", SAML1ActionTestingSupport.buildAssertion());
         artifactMap.put("bar", "SP", "IdP", SAML1ActionTestingSupport.buildAssertion());
-        prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo", "bar"));
+        prc.ensureInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildArtifactRequest("foo", "bar"));
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertEquals(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().size(), 2);
+        Assert.assertEquals(prc.ensureOutboundMessageContext().ensureMessage(Response.class).getAssertions().size(), 2);
         Assert.assertNull(artifactMap.get("foo"));
         Assert.assertNull(artifactMap.get("bar"));
     }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list