[java-identity-provider] 02/02: IDP-2069 Null handling

Rod Widdowson rdw at steadingsoftware.com
Tue Mar 7 14:34:41 UTC 2023


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

rdw pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=6b8fedb92f261541a4c4b5dc7a9132cbaef7357a

commit 6b8fedb92f261541a4c4b5dc7a9132cbaef7357a
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Mar 7 13:25:55 2023 +0000

    IDP-2069 Null handling
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    saml-impl tests
---
 .../impl/tests/FinalizeAuthenticationTest.java     |  75 ++++---
 .../profile/impl/tests/FilterAttributesTest.java   |  45 ++--
 .../profile/impl/tests/ResolveAttributesTest.java  |  25 ++-
 .../RelyingPartyConfigurationResolverTest.java     |   9 +-
 ...uteSourcedSAML1NameIdentifierGeneratorTest.java | 112 +++++++---
 .../AttributeSourcedSAML2NameIDGeneratorTest.java  | 113 ++++++----
 .../impl/CryptoTransientNameIDDecoderTest.java     |   9 +-
 .../CryptoTransientNameIdentifierDecoderTest.java  |  10 +-
 ...oTransientSAML1NameIdentifierGeneratorTest.java |  22 +-
 .../CryptoTransientSAML2NameIDGeneratorTest.java   |  21 +-
 .../nameid/impl/NameIDCanonicalizationTest.java    |  12 +-
 .../impl/NameIdentifierCanonicalizationTest.java   |  12 +-
 .../impl/PersistentSAML2NameIDGeneratorTest.java   |  66 ++++--
 .../nameid/impl/StoredPersistentIdDecoderTest.java |  34 +--
 ...dTransientSAML1NameIdentifierGeneratorTest.java |  25 ++-
 .../StoredTransientSAML2NameIDGeneratorTest.java   |  22 +-
 .../idp/saml/nameid/impl/TransientDecoderTest.java |   8 +-
 .../DefaultNameIdentifierFormatStrategyTest.java   |  13 +-
 .../impl/ExtractSubjectFromRequestTest.java        |  35 ++-
 .../FinalizeSAMLSubjectCanonicalizationTest.java   |   4 +-
 .../impl/InitializeAuthenticationContextTest.java  |  50 +++--
 ...itializeOutboundMessageContextForErrorTest.java |  56 +++--
 .../impl/InitializeOutboundMessageContextTest.java |  33 ++-
 ...tializeRelyingPartyContextFromSAMLPeerTest.java |   7 +-
 .../PopulateBindingAndEndpointContextsTest.java    | 248 ++++++++++++++-------
 .../impl/AddAttributeStatementToAssertionTest.java |  70 ++++--
 .../AddAuthenticationStatementToAssertionTest.java |  44 +++-
 .../FilterByQueriedAttributeDesignatorsTest.java   |   8 +-
 .../IdPInitiatedSSORequestMessageDecoderTest.java  |  10 +-
 .../saml1/profile/impl/SAML1ActionSupportTest.java |  25 ++-
 .../tests/ProxyRestrictionLookupFunctionTest.java  |  38 +++-
 .../impl/AddAttributeStatementToAssertionTest.java |  57 +++--
 .../saml2/profile/impl/AddAuthnRequestTest.java    | 159 ++++++++-----
 .../impl/AddAuthnStatementToAssertionTest.java     |  69 ++++--
 .../impl/EnforceDisallowedSSOFeaturesTest.java     |  33 ++-
 .../impl/FilterByQueriedAttributesTest.java        |   8 +-
 .../IdPInitiatedSSORequestMessageDecoderTest.java  |  10 +-
 .../impl/PopulateEncryptionParametersTest.java     |  39 ++--
 .../profile/impl/PreProcessLogoutMessageTest.java  |  25 ++-
 .../ProcessAssertionsForAuthenticationTest.java    |  25 ++-
 .../profile/impl/ProcessLogoutRequestTest.java     | 196 ++++++++++------
 .../impl/ProcessRequestedAuthnContextTest.java     | 103 ++++++---
 .../saml2/profile/impl/SAML2ActionSupportTest.java |  19 +-
 .../profile/impl/SessionManagerBaseTestCase.java   |   8 +-
 .../impl/PrepareInboundMessageContextTest.java     |  23 +-
 45 files changed, 1375 insertions(+), 660 deletions(-)

diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/authn/impl/tests/FinalizeAuthenticationTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/authn/impl/tests/FinalizeAuthenticationTest.java
index a4a9d5676..3bba3982a 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/authn/impl/tests/FinalizeAuthenticationTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/authn/impl/tests/FinalizeAuthenticationTest.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.authn.impl.tests;
 
+import java.security.Principal;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -41,6 +42,7 @@ import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.saml2.profile.config.impl.BrowserSSOProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.FunctionSupport;
 
@@ -79,13 +81,16 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
         initializeMembers();
         
         final PopulateAuthenticationContext bootstrap = new PopulateAuthenticationContext();
+        assert authenticationFlows!=null;
         bootstrap.setAvailableFlows(authenticationFlows);
         bootstrap.setPotentialFlowsLookupStrategy(FunctionSupport.constant(authenticationFlows));
         bootstrap.initialize();
 
         bootstrap.execute(src);
 
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(new BrowserSSOProfileConfiguration());
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.setProfileConfig(new BrowserSSOProfileConfiguration());
         
         action = new FinalizeAuthentication();
         action.initialize();
@@ -100,6 +105,7 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
 
     @Test public void testMismatch() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!= null;
         authCtx.setRequiredName("foo");
         
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
@@ -107,19 +113,20 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
         
         authCtx.setAuthenticationResult(active);
 
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("bar");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("bar");
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
     }
 
     @Test public void testRequestUnsupported() {
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         active.getSubject().getPrincipals().add(new TestPrincipal("bar2"));
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setAuthenticationResult(active);
         
         final RequestedPrincipalContext rpCtx = new RequestedPrincipalContext();
@@ -136,12 +143,13 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testSwitchesPrincipal() {
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         active.getSubject().getPrincipals().add(new TestPrincipal("bar2"));
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setAuthenticationResult(active);
         
         final RequestedPrincipalContext rpCtx = new RequestedPrincipalContext();
@@ -149,21 +157,23 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
                 TestPrincipal.class, "florp", new ExactPrincipalEvalPredicateFactory());
         rpCtx.setMatchingPrincipal(new TestPrincipal("bar1"));
         rpCtx.setOperator("florp");
-        rpCtx.setRequestedPrincipals(Collections.singletonList(new TestPrincipal("bar2")));
+        rpCtx.setRequestedPrincipals(CollectionSupport.singletonList(new TestPrincipal("bar2")));
         authCtx.addSubcontext(rpCtx);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
-        Assert.assertEquals(rpCtx.getMatchingPrincipal().getName(), "bar2");
+        final Principal matchingPrincipal = rpCtx.getMatchingPrincipal();
+        assert matchingPrincipal!= null;
+        Assert.assertEquals(matchingPrincipal.getName(), "bar2");
     }
 
     @Test public void testNothingActive() {
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         final Event event = action.execute(src);
         
@@ -174,17 +184,18 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testOneActive() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         active.getSubject().getPrincipals().add(
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER)));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER)));
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
         
@@ -195,7 +206,7 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
         
         ActionTestingSupport.assertProceedEvent(event);
         sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
     }
@@ -204,15 +215,16 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
         final AuthenticationResult active1 = new AuthenticationResult("test1", new Subject());
         final AuthenticationResult active2 = new AuthenticationResult("test2", new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active1));
         authCtx.setAuthenticationResult(active2);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 2);
     }
@@ -220,13 +232,14 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testZeroProxyCount() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final ProxyAuthenticationPrincipal proxy =
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
         proxy.setProxyCount(0);
         active.getSubject().getPrincipals().add(proxy);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.REQUEST_UNSUPPORTED);
@@ -236,21 +249,24 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testZeroProxyCountAdminFlow() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final ProxyAuthenticationPrincipal proxy =
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
         proxy.setProxyCount(0);
         active.getSubject().getPrincipals().add(proxy);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
 
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(new BasicAdministrativeFlowDescriptor("admin/test"));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.setProfileConfig(new BasicAdministrativeFlowDescriptor("admin/test"));
 
         final Event event = action.execute(src);
 
         ActionTestingSupport.assertProceedEvent(event);
         SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
     }
@@ -258,13 +274,14 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testZeroProxyCountNoRP() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final ProxyAuthenticationPrincipal proxy =
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
         proxy.setProxyCount(0);
         active.getSubject().getPrincipals().add(proxy);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
 
         prc.removeSubcontext(RelyingPartyContext.class);
 
@@ -272,7 +289,7 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
 
         ActionTestingSupport.assertProceedEvent(event);
         SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
     }
@@ -280,20 +297,21 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testValidProxyAudience() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final ProxyAuthenticationPrincipal proxy =
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
         proxy.setProxyCount(10);
         proxy.getAudiences().add(ActionTestingSupport.INBOUND_MSG_ISSUER);
         active.getSubject().getPrincipals().add(proxy);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
 
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!= null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
         Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
     }
@@ -301,14 +319,15 @@ public class FinalizeAuthenticationTest extends OpenSAMLInitBaseTestCase {
     @Test public void testInvalidProxyAudience() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final ProxyAuthenticationPrincipal proxy =
-                new ProxyAuthenticationPrincipal(Collections.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
+                new ProxyAuthenticationPrincipal(CollectionSupport.singletonList(ActionTestingSupport.OUTBOUND_MSG_ISSUER));
         proxy.setProxyCount(10);
         proxy.getAudiences().add(ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         active.getSubject().getPrincipals().add(proxy);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx!=null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setAuthenticationResult(active);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
 
         final Event event = action.execute(src);
         
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/FilterAttributesTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/FilterAttributesTest.java
index 517c96d0e..77ce4be2c 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/FilterAttributesTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/FilterAttributesTest.java
@@ -22,6 +22,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
@@ -92,7 +94,9 @@ public class FilterAttributesTest {
     @Test public void testNoAttributes() throws Exception {
         prc.getSubcontext(SubjectContext.class, true);
 
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class);
 
         final AttributeFilterImpl engine = new AttributeFilterImpl("test", Collections.emptyList());
         engine.initialize();
@@ -142,7 +146,9 @@ public class FilterAttributesTest {
 
         final AttributeContext attributeCtx = new AttributeContext();
         attributeCtx.setIdPAttributes(attributes);
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.addSubcontext(attributeCtx);
 
         final FilterAttributes action = new FilterAttributes(new MockReloadableService<>(engine));
         action.initialize();
@@ -151,12 +157,11 @@ public class FilterAttributesTest {
         ActionTestingSupport.assertProceedEvent(event);
 
         // The attribute filter context should be removed by the filter attributes action.
-        Assert.assertNull(prc.getSubcontext(RelyingPartyContext.class).getSubcontext(
+        Assert.assertNull(rpCtx.getSubcontext(
                 AttributeFilterContext.class));
 
-        final AttributeContext resultAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
-        Assert.assertNotNull(resultAttributeCtx);
+        final AttributeContext resultAttributeCtx = rpCtx.getSubcontext(AttributeContext.class);
+        assert resultAttributeCtx!=null;
 
         final Map<String, IdPAttribute> resultAttributes = resultAttributeCtx.getIdPAttributes();
         Assert.assertEquals(resultAttributes.size(), 1);
@@ -205,10 +210,12 @@ public class FilterAttributesTest {
 
         final AttributeContext attributeCtx = new AttributeContext();
         attributeCtx.setIdPAttributes(attributes);
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.addSubcontext(attributeCtx);
 
         final AttributeFilterContext attributeFilterCtx = new AttributeFilterContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeFilterCtx);
+        rpCtx.addSubcontext(attributeFilterCtx);
 
         final FilterAttributes action = new FilterAttributes(new MockReloadableService<>(engine));
         action.initialize();
@@ -217,12 +224,10 @@ public class FilterAttributesTest {
         ActionTestingSupport.assertProceedEvent(event);
 
         // The attribute filter context should be removed by the filter attributes action.
-        Assert.assertNull(prc.getSubcontext(RelyingPartyContext.class).getSubcontext(
-                AttributeFilterContext.class));
+        Assert.assertNull(rpCtx.getSubcontext(AttributeFilterContext.class));
 
-        final AttributeContext resultAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
-        Assert.assertNotNull(resultAttributeCtx);
+        final AttributeContext resultAttributeCtx = rpCtx.getSubcontext(AttributeContext.class);
+        assert resultAttributeCtx!=null;
 
         final Map<String, IdPAttribute> resultAttributes = resultAttributeCtx.getIdPAttributes();
         Assert.assertEquals(resultAttributes.size(), 1);
@@ -268,10 +273,12 @@ public class FilterAttributesTest {
 
         final AttributeContext attributeCtx = new AttributeContext();
         attributeCtx.setIdPAttributes(attributes);
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.addSubcontext(attributeCtx);
 
         final AttributeFilterContext attributeFilterCtx = new AttributeFilterContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeFilterCtx);
+        rpCtx.addSubcontext(attributeFilterCtx);
 
         final FilterAttributes action = new FilterAttributes(new MockReloadableService<>(engine));
         action.initialize();
@@ -295,10 +302,12 @@ public class FilterAttributesTest {
         final AttributeContext attributeCtx = new AttributeContext();
         final List<IdPAttribute> attributes = Collections.singletonList(attribute1);
         attributeCtx.setIdPAttributes(attributes);
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        rpCtx.addSubcontext(attributeCtx);
 
         final AttributeFilterContext attributeFilterCtx = new AttributeFilterContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attributeFilterCtx);
+        rpCtx.addSubcontext(attributeFilterCtx);
 
         final FilterAttributes action = new FilterAttributes(new MockReloadableService<>(null));
         action.setMaskFailures(false);
@@ -323,7 +332,7 @@ public class FilterAttributesTest {
 
         /** Always throws exception. */
         @Override
-        public IdPAttribute clone() throws CloneNotSupportedException {
+        public @Nonnull IdPAttribute clone() throws CloneNotSupportedException {
             throw new CloneNotSupportedException();
         }
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/ResolveAttributesTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/ResolveAttributesTest.java
index 8972b8b0b..79574b397 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/ResolveAttributesTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/profile/impl/tests/ResolveAttributesTest.java
@@ -97,9 +97,11 @@ public class ResolveAttributesTest {
         // The attribute resolution context should be removed by the resolve attributes action.
         Assert.assertNull(prc.getSubcontext(AttributeResolutionContext.class));
 
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
         final AttributeContext resolvedAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
-        Assert.assertNotNull(resolvedAttributeCtx);
+                rpCtx.getSubcontext(AttributeContext.class);
+        assert resolvedAttributeCtx!=null;
 
         final Map<String, IdPAttribute> resolvedAttributes = resolvedAttributeCtx.getIdPAttributes();
         Assert.assertFalse(resolvedAttributes.isEmpty());
@@ -140,9 +142,10 @@ public class ResolveAttributesTest {
         // The attribute resolution context should be removed by the resolve attributes action.
         Assert.assertNull(prc.getSubcontext(AttributeResolutionContext.class));
 
-        AttributeContext resolvedAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
-        Assert.assertNotNull(resolvedAttributeCtx);
+        RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        AttributeContext resolvedAttributeCtx = rpCtx.getSubcontext(AttributeContext.class);
+        assert resolvedAttributeCtx != null;
 
         final Map<String, IdPAttribute> resolvedAttributes = resolvedAttributeCtx.getIdPAttributes();
         Assert.assertFalse(resolvedAttributes.isEmpty());
@@ -165,9 +168,10 @@ public class ResolveAttributesTest {
         // The attribute resolution context should be removed by the resolve attributes action.
         Assert.assertNull(prc.getSubcontext(AttributeResolutionContext.class));
 
-        resolvedAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
-        Assert.assertNotNull(resolvedAttributeCtx);
+        rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        resolvedAttributeCtx = rpCtx.getSubcontext(AttributeContext.class);
+        assert resolvedAttributeCtx != null;
         Assert.assertTrue(resolvedAttributeCtx.getIdPAttributes().isEmpty());
     }
 
@@ -195,8 +199,9 @@ public class ResolveAttributesTest {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        final AttributeContext resolvedAttributeCtx =
-                prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!= null;
+        final AttributeContext resolvedAttributeCtx = rpCtx.getSubcontext(AttributeContext.class);
         Assert.assertNull(resolvedAttributeCtx);
     }
     
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/relyingparty/impl/tests/RelyingPartyConfigurationResolverTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/relyingparty/impl/tests/RelyingPartyConfigurationResolverTest.java
index e1544e3a4..aeabdf654 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/relyingparty/impl/tests/RelyingPartyConfigurationResolverTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/relyingparty/impl/tests/RelyingPartyConfigurationResolverTest.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.XMLObjectBuilder;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.schema.XSString;
@@ -123,6 +124,7 @@ public class RelyingPartyConfigurationResolverTest extends XMLObjectBaseTestCase
         resolver = new DefaultRelyingPartyConfigurationResolver();
         resolver.setId("resolver");
         resolver.setUnverifiedConfiguration(anonRP);
+        assert defaultRP!=null;
         resolver.setDefaultConfiguration(defaultRP);
     }
     
@@ -190,6 +192,7 @@ public class RelyingPartyConfigurationResolverTest extends XMLObjectBaseTestCase
         Iterable<RelyingPartyConfiguration> results = null;
         RelyingPartyConfiguration result = null;
         
+        assert oneByGroup!=null & twoByGroup!=null;
         final List<RelyingPartyConfiguration> rpConfigs = CollectionSupport.listOf(oneByGroup, twoByGroup);
 
         resolver.setRelyingPartyConfigurations(rpConfigs);
@@ -232,6 +235,7 @@ public class RelyingPartyConfigurationResolverTest extends XMLObjectBaseTestCase
         Iterable<RelyingPartyConfiguration> results = null;
         RelyingPartyConfiguration result = null;
         
+        assert oneByTag!=null & twoByTag!=null;
         final List<RelyingPartyConfiguration> rpConfigs = CollectionSupport.listOf(oneByTag, twoByTag);
 
         resolver.setRelyingPartyConfigurations(rpConfigs);
@@ -296,8 +300,9 @@ public class RelyingPartyConfigurationResolverTest extends XMLObjectBaseTestCase
             attr = attrs.get(0);
         }
         
-        XSString val = (XSString) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(XSString.TYPE_NAME)
-                .buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
+        XMLObjectBuilder<?> builder = XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(XSString.TYPE_NAME);
+        assert builder!=null;
+        XSString val = (XSString) builder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
         val.setValue(value);
         attr.getAttributeValues().add(val);
         
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
index 2bcc99d81..e6fe32a56 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
@@ -17,9 +17,10 @@
 
 package net.shibboleth.idp.saml.nameid.impl;
 
-import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,6 +40,8 @@ import net.shibboleth.idp.attribute.XMLObjectAttributeValue;
 import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** Unit test for {@link AttributeSourcedSAML1NameIdentifierGenerator}. */
@@ -103,56 +106,70 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
     }
 
     @Test public void testNoSource() throws ComponentInitializationException, SAMLException {
-        generator.setAttributeSourceIds(Collections.singletonList("bar"));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList("bar"));
         generator.initialize();
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+        Assert.assertNull(generator.generate(prc, format));
     }
 
     @Test public void testWrongType() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
         final List<IdPAttributeValue> values = List.of(new IdPAttributeValue() {
-            public Object getNativeValue() {
+            public @Nonnull Object getNativeValue() {
                 return intArray;
             }
-            public String getDisplayValue() {
-                return intArray.toString();
+            public @Nonnull String getDisplayValue() {
+                final String result = intArray.toString();
+                assert result!=null;
+                return result;
             }
         }, saml2NameIdFor(OTHERID));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(values);
         prc.getOrCreateSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
 
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        Assert.assertNull(generator.generate(prc, format));
     }
 
     @Test public void testWrongFormat() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml1NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
         generator.setFormat(NameIdentifier.EMAIL);
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+        Assert.assertNull(generator.generate(prc, format));
     }
 
     @Test public void testNameIdentifierValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml1NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameIdentifier outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+        final NameIdentifier outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId!=null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1);
         Assert.assertEquals(outputNameId.getFormat(), NameIdentifier.X509_SUBJECT);
         Assert.assertEquals(outputNameId.getNameQualifier(), QUALIFIER);
@@ -161,14 +178,18 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
     @Test public void testMultiNameIdentifierValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml2NameIdFor(OTHERID), saml1NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameIdentifier outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+        final NameIdentifier outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId!=null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1);
         Assert.assertEquals(outputNameId.getFormat(), NameIdentifier.X509_SUBJECT);
         Assert.assertEquals(outputNameId.getNameQualifier(), QUALIFIER);
@@ -177,34 +198,51 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
     @Test public void testStringValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(new StringAttributeValue(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameIdentifier outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+        final NameIdentifier outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId!=null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1);
         Assert.assertEquals(outputNameId.getFormat(), NameIdentifier.X509_SUBJECT);
-        Assert.assertEquals(outputNameId.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) prc.getSubcontext(RelyingPartyContext.class).getConfiguration()).getIssuer(prc));
+        final RelyingPartyContext rpCtx2 = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx2!=null;
+        final RelyingPartyConfiguration rpConfig = rpCtx.getConfiguration();
+        assert rpConfig!=null;
+        
+        Assert.assertEquals(outputNameId.getNameQualifier(), rpConfig.getIssuer(prc));
     }
 
     @Test public void testScopeValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(new ScopedStringAttributeValue(NAME_1, QUALIFIER)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameIdentifier outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format != null && prc!=null;
+
+        final NameIdentifier outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId!=null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1 + '@' + QUALIFIER);
         Assert.assertEquals(outputNameId.getFormat(), NameIdentifier.X509_SUBJECT);
-        Assert.assertEquals(outputNameId.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) prc.getSubcontext(RelyingPartyContext.class).getConfiguration()).getIssuer(prc));
+        final RelyingPartyContext rpCtx2 = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx2!=null;
+        final RelyingPartyConfiguration rpConfig = rpCtx.getConfiguration();
+        assert rpConfig!=null;
+        
+        Assert.assertEquals(outputNameId.getNameQualifier(), rpConfig.getIssuer(prc));
     }
 }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
index 7b620035f..90f01a69a 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
@@ -17,9 +17,10 @@
 
 package net.shibboleth.idp.saml.nameid.impl;
 
-import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,6 +40,8 @@ import net.shibboleth.idp.attribute.XMLObjectAttributeValue;
 import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** Unit test for {@link AttributeSourcedSAML2NameIDGenerator}. */
@@ -102,56 +105,71 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
     }
     
     @Test public void testNoSource() throws ComponentInitializationException, SAMLException {
-        generator.setAttributeSourceIds(Collections.singletonList("bar"));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList("bar"));
         generator.initialize();
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        Assert.assertNull(generator.generate(prc, format));
     }
 
     @Test public void testWrongType() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
         final var values = List.of(new IdPAttributeValue() {
-                            public Object getNativeValue() {
+                            public @Nonnull Object getNativeValue() {
                                 return intArray;
                             }
-                            public String getDisplayValue() {
-                                return intArray.toString();
+                            public @Nonnull String getDisplayValue() {
+                                final String result = intArray.toString();
+                                assert result != null;
+                                return result;
                             }
                         }, saml1NameIdFor(OTHERID));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(values);
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        Assert.assertNull(generator.generate(prc, format));
     }
 
     @Test public void testWrongFormat() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml2NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
         generator.setFormat(NameID.EMAIL);
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        Assert.assertNull(generator.generate(prc, generator.getFormat()));
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        Assert.assertNull(generator.generate(prc, format));
     }
     
     @Test public void testNameIDValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml2NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameID outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        final NameID outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId != null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1);
         Assert.assertEquals(outputNameId.getFormat(), NameID.X509_SUBJECT);
         Assert.assertEquals(outputNameId.getNameQualifier(), QUALIFIER);
@@ -160,14 +178,18 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
     @Test public void testMultiNameIDValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(saml2NameIdFor(OTHERID), saml1NameIdFor(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameID outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        final NameID outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId != null;
         Assert.assertEquals(outputNameId.getValue(), OTHERID);
         Assert.assertEquals(outputNameId.getFormat(), NameID.X509_SUBJECT);
         Assert.assertEquals(outputNameId.getNameQualifier(), QUALIFIER);
@@ -176,36 +198,45 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
     @Test public void testStringValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(new StringAttributeValue(NAME_1)));
-        prc.getSubcontext(RelyingPartyContext.class).getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameID outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        final NameID outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId != null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1);
         Assert.assertEquals(outputNameId.getFormat(), NameID.X509_SUBJECT);
-        Assert.assertEquals(outputNameId.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) prc.getSubcontext(RelyingPartyContext.class).getConfiguration()).getIssuer(prc));
+        final RelyingPartyConfiguration config = rpCtx.getConfiguration();
+        assert config != null;
+        Assert.assertEquals(outputNameId.getNameQualifier(), config.getIssuer(prc));
     }
 
     @Test public void testScopeValued() throws Exception {
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
         inputAttribute.setValues(List.of(new ScopedStringAttributeValue(NAME_1, QUALIFIER)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setIdPAttributes(
-                Collections.singleton(inputAttribute));
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(
+                CollectionSupport.singleton(inputAttribute));
 
-        generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList(ATTR_NAME));
         generator.initialize();
-        final NameID outputNameId = generator.generate(prc, generator.getFormat());
+        final String format = generator.getFormat();
+        assert format!=null && prc!=null;
+        final NameID outputNameId = generator.generate(prc, format);
 
-        Assert.assertNotNull(outputNameId);
+        assert outputNameId != null;
         Assert.assertEquals(outputNameId.getValue(), NAME_1 + '@' + QUALIFIER);
         Assert.assertEquals(outputNameId.getFormat(), NameID.X509_SUBJECT);
-        Assert.assertEquals(outputNameId.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) prc.getSubcontext(RelyingPartyContext.class).getConfiguration()).getIssuer(prc));
-        Assert.assertEquals(outputNameId.getSPNameQualifier(),
-                prc.getSubcontext(RelyingPartyContext.class).getRelyingPartyId());
+        final RelyingPartyConfiguration config = rpCtx.getConfiguration();
+        assert config != null;
+        Assert.assertEquals(outputNameId.getNameQualifier(), config.getIssuer(prc));
+        Assert.assertEquals(outputNameId.getSPNameQualifier(), rpCtx.getRelyingPartyId());
     }
 }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIDDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIDDecoderTest.java
index dcd7a7196..db49d4954 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIDDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIDDecoderTest.java
@@ -32,6 +32,7 @@ import net.shibboleth.idp.saml.authn.principal.NameIDPrincipal;
 import net.shibboleth.idp.saml.impl.testing.TestSources;
 import net.shibboleth.idp.saml.nameid.NameDecoderException;
 import net.shibboleth.idp.saml.nameid.NameIDCanonicalizationFlowDescriptor;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.security.DataSealer;
 import net.shibboleth.shared.security.DataSealerException;
@@ -165,13 +166,13 @@ public class CryptoTransientNameIDDecoderTest extends OpenSAMLInitBaseTestCase {
     
         ProfileRequestContext prc =
                 new RequestContextBuilder().setInboundMessageIssuer(TestSources.SP_ENTITY_ID).buildProfileRequestContext();
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName(TestSources.PRINCIPAL_ID);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName(TestSources.PRINCIPAL_ID);
         
         final NameID nameID = generator.generate(prc, generator.getFormat());
-
+        assert nameID!=null;
         final NameIDCanonicalizationFlowDescriptor desc = new NameIDCanonicalizationFlowDescriptor();
         desc.setId("C14NDesc");
-        desc.setFormats(Collections.singleton(generator.getFormat()));
+        desc.setFormats(CollectionSupport.singleton(generator.getFormat()));
         desc.initialize();
         
         final NameIDCanonicalization canon = new NameIDCanonicalization();
@@ -179,7 +180,7 @@ public class CryptoTransientNameIDDecoderTest extends OpenSAMLInitBaseTestCase {
         canon.initialize();
 
         prc = new ProfileRequestContext();
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         final Subject subject = new Subject();
 
         subject.getPrincipals().add(new NameIDPrincipal(nameID));
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIdentifierDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIdentifierDecoderTest.java
index 91e491cbc..2069a667d 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIdentifierDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientNameIdentifierDecoderTest.java
@@ -28,6 +28,7 @@ import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.authn.principal.NameIdentifierPrincipal;
 import net.shibboleth.idp.saml.impl.testing.TestSources;
 import net.shibboleth.idp.saml.nameid.NameIDCanonicalizationFlowDescriptor;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.security.DataSealer;
 import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
 import net.shibboleth.shared.spring.resource.ResourceHelper;
@@ -101,21 +102,22 @@ public class CryptoTransientNameIdentifierDecoderTest extends OpenSAMLInitBaseTe
     
         ProfileRequestContext prc =
                 new RequestContextBuilder().setInboundMessageIssuer(TestSources.SP_ENTITY_ID).buildProfileRequestContext();
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName(TestSources.PRINCIPAL_ID);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName(TestSources.PRINCIPAL_ID);
         
         final NameIdentifier nameID = generator.generate(prc, generator.getFormat());
-
+        assert nameID!=null;
         final NameIDCanonicalizationFlowDescriptor desc = new NameIDCanonicalizationFlowDescriptor();
         desc.setId("C14NDesc");
-        desc.setFormats(Collections.singleton(generator.getFormat()));
+        desc.setFormats(CollectionSupport.singleton(generator.getFormat()));
         desc.initialize();
         
         final NameIdentifierCanonicalization canon = new NameIdentifierCanonicalization();
+        assert decoder!=null;
         canon.setDecoder(decoder);
         canon.initialize();
 
         prc = new ProfileRequestContext();
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         final Subject subject = new Subject();
 
         subject.getPrincipals().add(new NameIdentifierPrincipal(nameID));
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML1NameIdentifierGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML1NameIdentifierGeneratorTest.java
index 42c535f42..c07e48b22 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML1NameIdentifierGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML1NameIdentifierGeneratorTest.java
@@ -23,6 +23,7 @@ import java.time.Duration;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.security.DataSealer;
 import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
@@ -102,8 +103,10 @@ public class CryptoTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
     @Test public void testNoRelyingParty() throws Exception {        
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyId(null);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setRelyingPartyId(null);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameIdentifier name = generator.generate(prc, generator.getFormat());
         
@@ -114,17 +117,20 @@ public class CryptoTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
         final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        assert rpc!=null;
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameIdentifier name = generator.generate(prc, generator.getFormat());
         
-        Assert.assertNotNull(name);
+        assert name!=null;
         Assert.assertEquals(name.getFormat(), generator.getFormat());
-        Assert.assertEquals(name.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) rpc.getConfiguration()).getIssuer(prc));
+        final RelyingPartyConfiguration config = rpc.getConfiguration();
+        assert config != null;
 
-        final String val = name.getValue();
+        Assert.assertEquals(name.getNameQualifier(), config.getIssuer(prc));
 
+        final String val = name.getValue();
+        assert val != null;
         final String decode = sealer.unwrap(val);
 
         Assert.assertEquals(decode, rpc.getRelyingPartyId() + "!" + "jdoe");
@@ -138,4 +144,4 @@ public class CryptoTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML2NameIDGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML2NameIDGeneratorTest.java
index 42005b666..04eba83a7 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML2NameIDGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/CryptoTransientSAML2NameIDGeneratorTest.java
@@ -23,6 +23,7 @@ import java.time.Duration;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.security.DataSealer;
 import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
@@ -103,8 +104,10 @@ public class CryptoTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
     @Test public void testNoRelyingParty() throws Exception {        
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyId(null);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setRelyingPartyId(null);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameID name = generator.generate(prc, generator.getFormat());
         
@@ -115,17 +118,19 @@ public class CryptoTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
         final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        assert rpc!=null;
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameID name = generator.generate(prc, generator.getFormat());
         
-        Assert.assertNotNull(name);
+        assert name!=null;
         Assert.assertEquals(name.getFormat(), generator.getFormat());
-        Assert.assertEquals(name.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) rpc.getConfiguration()).getIssuer(prc));
+        final RelyingPartyConfiguration config = rpc.getConfiguration();
+        assert config != null;
+        Assert.assertEquals(name.getNameQualifier(), config.getIssuer(prc));
 
         final String val = name.getValue();
-
+        assert val !=null;
         final String decode = sealer.unwrap(val);
 
         Assert.assertEquals(decode, rpc.getRelyingPartyId() + "!" + "jdoe");
@@ -139,4 +144,4 @@ public class CryptoTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIDCanonicalizationTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIDCanonicalizationTest.java
index 34b5ed449..c7722908d 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIDCanonicalizationTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIDCanonicalizationTest.java
@@ -89,7 +89,7 @@ public class NameIDCanonicalizationTest extends OpenSAMLInitBaseTestCase {
     }
 
     private void setSubContext(@Nullable Subject subject, @Nullable String responder, @Nullable String requester) {
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         if (subject != null) {
             scc.setSubject(subject);
         }
@@ -132,7 +132,8 @@ public class NameIDCanonicalizationTest extends OpenSAMLInitBaseTestCase {
 
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testMultiPrincipals() {
@@ -144,7 +145,8 @@ public class NameIDCanonicalizationTest extends OpenSAMLInitBaseTestCase {
 
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testWrongFormat() {
@@ -155,7 +157,8 @@ public class NameIDCanonicalizationTest extends OpenSAMLInitBaseTestCase {
 
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testWrongRequesterNameID() {
@@ -203,6 +206,7 @@ public class NameIDCanonicalizationTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert sc!=null;
         Assert.assertEquals(sc.getPrincipalName(), VALUE_PREFIX + "works");
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIdentifierCanonicalizationTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIdentifierCanonicalizationTest.java
index a28718eb0..51e943bb2 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIdentifierCanonicalizationTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/NameIdentifierCanonicalizationTest.java
@@ -88,7 +88,7 @@ public class NameIdentifierCanonicalizationTest extends OpenSAMLInitBaseTestCase
     }
 
     private void setSubContext(@Nullable Subject subject, @Nullable String responder, @Nullable String requester) {
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         if (subject != null) {
             scc.setSubject(subject);
         }
@@ -129,7 +129,8 @@ public class NameIdentifierCanonicalizationTest extends OpenSAMLInitBaseTestCase
         action.execute(prc);
 
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testMultiPrincipals() {
@@ -142,7 +143,8 @@ public class NameIdentifierCanonicalizationTest extends OpenSAMLInitBaseTestCase
         action.execute(prc);
 
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testWrongFormat() {
@@ -154,7 +156,8 @@ public class NameIdentifierCanonicalizationTest extends OpenSAMLInitBaseTestCase
         action.execute(prc);
 
         ActionTestingSupport.assertEvent(prc, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc!=null && scc.getException()!=null;
     }
 
     @Test public void testWrongRequester() {
@@ -198,6 +201,7 @@ public class NameIdentifierCanonicalizationTest extends OpenSAMLInitBaseTestCase
 
         ActionTestingSupport.assertProceedEvent(prc);
         SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert sc!=null;
         Assert.assertEquals(sc.getPrincipalName(), VALUE_PREFIX+"works");
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGeneratorTest.java
index 9711dde3c..67e6b2d15 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGeneratorTest.java
@@ -38,11 +38,13 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.core.NameID;
 import org.opensaml.saml.saml2.core.NameIDPolicy;
 import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
+import org.springframework.validation.MessageCodeFormatter;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -112,8 +114,9 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         generator.setPersistentIdStore(new ComputedPairwiseIdStore());
         generator.setAttributeSourceIds(Collections.singletonList("SOURCE"));
         generator.initialize();
-        
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyId(null);
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setRelyingPartyId(null);
         
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
     }
@@ -133,10 +136,12 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         generator.setAttributeSourceIds(Collections.singletonList("SOURCE"));
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(new IdPAttribute("SOURCE")));
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
     }
@@ -151,15 +156,16 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         generator.setAttributeSourceIds(Collections.singletonList("SOURCE"));
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
-                Collections.singleton(source));
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(Collections.singleton(source));
         final NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), RESULT);
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
@@ -195,6 +201,7 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         store.deactivate(pid);
         
         final NameID id = generator.generate(prc, NameID.PERSISTENT);
+        assert id != null;
         Assert.assertNotEquals(id.getValue(), RESULT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), TestSources.SP_ENTITY_ID);
@@ -204,15 +211,17 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         generator.setAttributeSourceIds(Collections.singletonList("SOURCE"));
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(source));
         NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertNotNull(id.getValue());
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
@@ -220,7 +229,7 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         
         String storedvalue = id.getValue();
         id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), storedvalue);
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
@@ -231,10 +240,12 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         final NameIDPolicy policy = (NameIDPolicy) XMLObjectSupport.buildXMLObject(NameIDPolicy.DEFAULT_ELEMENT_NAME);
         request.setNameIDPolicy(policy);
         policy.setSPNameQualifier("https://affiliation.org");
-        prc.getInboundMessageContext().setMessage(request);
+        MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        imc.setMessage(request);
         
         id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertNotNull(id.getValue());
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
@@ -242,40 +253,49 @@ public class PersistentSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase
         
         storedvalue = id.getValue();
         id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), storedvalue);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), "https://affiliation.org");
         
-        prc.getInboundMessageContext().setMessage(null);
-        ((BrowserSSOProfileConfiguration) prc.getSubcontext(RelyingPartyContext.class).getProfileConfig()).setSPNameQualifier("https://affiliation.org");
+        imc = prc.getInboundMessageContext();
+        assert imc != null;
+        imc.setMessage(null);
+        final RelyingPartyContext rpc2 = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc2!=null;
+
+        final BrowserSSOProfileConfiguration config =(BrowserSSOProfileConfiguration) rpc2.getProfileConfig();
+        assert config!= null;
+        config.setSPNameQualifier("https://affiliation.org");
         id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), storedvalue);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), "https://affiliation.org");
     }
     
     private void testComputedAndStoredIdLogic() throws Exception {
-        generator.setAttributeSourceIds(Collections.singletonList("SOURCE"));
+        generator.setAttributeSourceIds(CollectionSupport.singletonList("SOURCE"));
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(source));
         NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), RESULT);
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), TestSources.SP_ENTITY_ID);
         
         id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertEquals(id.getValue(), RESULT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), TestSources.SP_ENTITY_ID);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredPersistentIdDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredPersistentIdDecoderTest.java
index 73bbce61a..8b6b5467b 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredPersistentIdDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredPersistentIdDecoderTest.java
@@ -90,7 +90,7 @@ public class StoredPersistentIdDecoderTest extends OpenSAMLInitBaseTestCase {
     @Test
     public void testMissingID() throws Exception {
 
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         scc.setRequesterId(TestSources.SP_ENTITY_ID);
         scc.setResponderId(TestSources.IDP_ENTITY_ID);
         
@@ -101,7 +101,7 @@ public class StoredPersistentIdDecoderTest extends OpenSAMLInitBaseTestCase {
     @Test(expectedExceptions={NameDecoderException.class})
     public void testNoQualifiers() throws Exception {
 
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         
         final Subject subject = SAML2ActionTestingSupport.buildSubject("foo");
         decoder.decode(scc, subject.getNameID());
@@ -111,22 +111,24 @@ public class StoredPersistentIdDecoderTest extends OpenSAMLInitBaseTestCase {
     public void testBadQualifier() throws Exception {
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(source));
         final NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertNotNull(id.getValue());
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
 
         id.setNameQualifier(null);
         id.setSPNameQualifier(null);
         
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         scc.setRequesterId("Bad");
         scc.setResponderId(TestSources.IDP_ENTITY_ID);
         
@@ -137,21 +139,23 @@ public class StoredPersistentIdDecoderTest extends OpenSAMLInitBaseTestCase {
     public void testStoredIdDecode() throws Exception {
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(source));
         final NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertNotNull(id.getValue());
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), TestSources.SP_ENTITY_ID);
 
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         scc.setRequesterId(TestSources.SP_ENTITY_ID);
         scc.setResponderId(TestSources.IDP_ENTITY_ID);
         
@@ -164,21 +168,23 @@ public class StoredPersistentIdDecoderTest extends OpenSAMLInitBaseTestCase {
         generator.setSPNameQualifier("http://affiliation.org");
         generator.initialize();
         
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("foo");
         Assert.assertNull(generator.generate(prc, NameID.PERSISTENT));
         
         final IdPAttribute source = new IdPAttribute("SOURCE");
         source.setValues(Collections.singletonList(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING)));
-        prc.getSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class, true).setUnfilteredIdPAttributes(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.getOrCreateSubcontext(AttributeContext.class).setUnfilteredIdPAttributes(
                 Collections.singleton(source));
         final NameID id = generator.generate(prc, NameID.PERSISTENT);
-        Assert.assertNotNull(id);
+        assert id!=null;
         Assert.assertNotNull(id.getValue());
         Assert.assertEquals(id.getFormat(), NameID.PERSISTENT);
         Assert.assertEquals(id.getNameQualifier(), TestSources.IDP_ENTITY_ID);
         Assert.assertEquals(id.getSPNameQualifier(), "http://affiliation.org");
 
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         scc.setRequesterId(TestSources.SP_ENTITY_ID);
         scc.setResponderId(TestSources.IDP_ENTITY_ID);
         
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML1NameIdentifierGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML1NameIdentifierGeneratorTest.java
index bb132c64d..08018e8f8 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML1NameIdentifierGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML1NameIdentifierGeneratorTest.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.saml.nameid.impl;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
@@ -77,8 +78,10 @@ public class StoredTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
     @Test public void testNoRelyingParty() throws Exception {        
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyId(null);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setRelyingPartyId(null);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameIdentifier name = generator.generate(prc, generator.getFormat());
         
@@ -89,20 +92,24 @@ public class StoredTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
         final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        assert rpc!=null;
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameIdentifier name = generator.generate(prc, generator.getFormat());
+        assert name!=null;
         
-        Assert.assertNotNull(name);
+        final RelyingPartyConfiguration rpConfig = rpc.getConfiguration();
+        assert rpConfig!=null;
+
         Assert.assertEquals(name.getFormat(), generator.getFormat());
-        Assert.assertEquals(name.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) rpc.getConfiguration()).getIssuer(prc));
+        Assert.assertEquals(name.getNameQualifier(), rpConfig.getIssuer(prc));
 
         String val = name.getValue();
 
+        assert val!=null;
         final StorageRecord<?> record = store.read(TransientIdParameters.CONTEXT, val);
-        
-        Assert.assertNotNull(record);
+
+        assert record!=null;
         Assert.assertTrue(val.length() >= transientGenerator.getIdSize());
  
         TransientIdParameters parms = new TransientIdParameters(record.getValue());
@@ -112,4 +119,4 @@ public class StoredTransientSAML1NameIdentifierGeneratorTest extends OpenSAMLIni
         Assert.assertEquals(parms.getPrincipal(), "jdoe");
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML2NameIDGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML2NameIDGeneratorTest.java
index 76417a8bd..854776fb9 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML2NameIDGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/StoredTransientSAML2NameIDGeneratorTest.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.saml.nameid.impl;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
@@ -78,8 +79,10 @@ public class StoredTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
     @Test public void testNoRelyingParty() throws Exception {        
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyId(null);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setRelyingPartyId(null);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameID name = generator.generate(prc, generator.getFormat());
         
@@ -90,21 +93,24 @@ public class StoredTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
 
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
         final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        assert rpc!=null;
+        final RelyingPartyConfiguration rpConfig = rpc.getConfiguration();
+        assert rpConfig!=null;
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         final NameID name = generator.generate(prc, generator.getFormat());
         
-        Assert.assertNotNull(name);
+        assert name!=null;
         Assert.assertEquals(name.getFormat(), generator.getFormat());
-        Assert.assertEquals(name.getNameQualifier(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) rpc.getConfiguration()).getIssuer(prc));
+        Assert.assertEquals(name.getNameQualifier(), rpConfig.getIssuer(prc));
         Assert.assertEquals(name.getSPNameQualifier(), rpc.getRelyingPartyId());
 
         String val = name.getValue();
+        assert val!=null;
 
         final StorageRecord<?> record = store.read(TransientIdParameters.CONTEXT, val);
         
-        Assert.assertNotNull(record);
+        assert record!=null && val!=null;
         Assert.assertTrue(val.length() >= transientGenerator.getIdSize());
  
         TransientIdParameters parms = new TransientIdParameters(record.getValue());
@@ -114,4 +120,4 @@ public class StoredTransientSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTes
         Assert.assertEquals(parms.getPrincipal(), "jdoe");
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/TransientDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/TransientDecoderTest.java
index 884834f70..1145c5d02 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/TransientDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/TransientDecoderTest.java
@@ -28,6 +28,7 @@ import net.shibboleth.idp.saml.authn.principal.NameIDPrincipal;
 import net.shibboleth.idp.saml.impl.testing.TestSources;
 import net.shibboleth.idp.saml.nameid.NameDecoderException;
 import net.shibboleth.idp.saml.nameid.NameIDCanonicalizationFlowDescriptor;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
@@ -140,12 +141,13 @@ public class TransientDecoderTest extends OpenSAMLInitBaseTestCase {
     
         ProfileRequestContext prc =
                 new RequestContextBuilder().setInboundMessageIssuer(TestSources.SP_ENTITY_ID).buildProfileRequestContext();
-        prc.getSubcontext(SubjectContext.class, true).setPrincipalName(TestSources.PRINCIPAL_ID);
+        prc.getOrCreateSubcontext(SubjectContext.class).setPrincipalName(TestSources.PRINCIPAL_ID);
         
         final NameID nameid = generator.generate(prc, generator.getFormat());
+        assert nameid!=null;
 
         final NameIDCanonicalizationFlowDescriptor descriptor = new NameIDCanonicalizationFlowDescriptor();
-        descriptor.setFormats(Collections.singleton(generator.getFormat()));
+        descriptor.setFormats(CollectionSupport.singleton(generator.getFormat()));
         descriptor.setId("NameIdFlowDescriptor");
         descriptor.initialize();
         final NameIDCanonicalization canon = new NameIDCanonicalization();
@@ -158,7 +160,7 @@ public class TransientDecoderTest extends OpenSAMLInitBaseTestCase {
         canon.initialize();
         
         prc = new ProfileRequestContext();
-        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext scc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         final Subject subject = new Subject();
         subject.getPrincipals().add(new NameIDPrincipal(nameid));
         scc.setSubject(subject);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/context/navigate/tests/DefaultNameIdentifierFormatStrategyTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/context/navigate/tests/DefaultNameIdentifierFormatStrategyTest.java
index cf02e70d0..3355b16f2 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/context/navigate/tests/DefaultNameIdentifierFormatStrategyTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/context/navigate/tests/DefaultNameIdentifierFormatStrategyTest.java
@@ -28,6 +28,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
@@ -69,10 +70,14 @@ public class DefaultNameIdentifierFormatStrategyTest extends OpenSAMLInitBaseTes
         final EntityDescriptor entity = edBuilder.buildObject();
         role = roleBuilder.buildObject();
         entity.getRoleDescriptors().add(role);
-        prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).getSubcontext(
-                SAMLMetadataContext.class, true).setEntityDescriptor(entity);
-        prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class).getSubcontext(
-                SAMLMetadataContext.class).setRoleDescriptor(entity.getRoleDescriptors().get(0));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.getOrCreateSubcontext(SAMLPeerEntityContext.class).getOrCreateSubcontext(SAMLMetadataContext.class).setEntityDescriptor(entity);
+        final SAMLPeerEntityContext pec = imc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLMetadataContext mctx = pec.getSubcontext(SAMLMetadataContext.class);
+        assert mctx!=null;
+        mctx.setRoleDescriptor(entity.getRoleDescriptors().get(0));
         
         strategy = new DefaultNameIdentifierFormatStrategy();
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/ExtractSubjectFromRequestTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/ExtractSubjectFromRequestTest.java
index 8637bddf0..7f28774bd 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/ExtractSubjectFromRequestTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/ExtractSubjectFromRequestTest.java
@@ -29,7 +29,10 @@ import net.shibboleth.profile.context.navigate.RelyingPartyIdLookupFunction;
 import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
+import javax.security.auth.Subject;
+
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.profile.logic.DefaultNameIDPolicyPredicate;
 import org.opensaml.saml.saml1.core.Request;
@@ -79,7 +82,9 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
    
     @Test
     public void testNoMessage() {
-        prc.getInboundMessageContext().setMessage(null);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(null);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, ExtractSubjectFromRequest.NO_SUBJECT);
@@ -87,7 +92,9 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
 
     @Test
     public void testNoSubject() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, ExtractSubjectFromRequest.NO_SUBJECT);
@@ -97,7 +104,9 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
     public void testSAML2Subject() {
         final AuthnRequest request = SAML2ActionTestingSupport.buildAuthnRequest();
         request.setSubject(SAML2ActionTestingSupport.buildSubject("foo"));
-        prc.getInboundMessageContext().setMessage(request);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(request);
         
         request.getSubject().getNameID().setFormat(NameID.TRANSIENT);
         request.getSubject().getNameID().setNameQualifier("foo");
@@ -114,10 +123,12 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
         ActionTestingSupport.assertProceedEvent(event);
         
         final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
-        Assert.assertNotNull(scc);
-        Assert.assertEquals(scc.getSubject().getPrincipals(NameIDPrincipal.class).size(), 1);
+        assert scc!=null;
+        final Subject subject = scc.getSubject();
+        assert subject!=null;
+        Assert.assertEquals(subject.getPrincipals(NameIDPrincipal.class).size(), 1);
         
-        final NameIDPrincipal princ = scc.getSubject().getPrincipals(NameIDPrincipal.class).iterator().next();
+        final NameIDPrincipal princ = subject.getPrincipals(NameIDPrincipal.class).iterator().next();
         Assert.assertEquals(princ.getNameID().getValue(), "foo");
     }
     
@@ -125,7 +136,9 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
     public void testSAML1Subject() {
         final Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(
                 SAML1ActionTestingSupport.buildSubject("foo"));
-        prc.getInboundMessageContext().setMessage(request);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(request);
         
         request.getAttributeQuery().getSubject().getNameIdentifier().setFormat(NameID.TRANSIENT);
         request.getAttributeQuery().getSubject().getNameIdentifier().setNameQualifier("foo");
@@ -137,11 +150,13 @@ public class ExtractSubjectFromRequestTest extends XMLObjectBaseTestCase {
         ActionTestingSupport.assertProceedEvent(event);
         
         final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
-        Assert.assertNotNull(scc);
-        Assert.assertEquals(scc.getSubject().getPrincipals(NameIdentifierPrincipal.class).size(), 1);
+        assert scc!=null;
+        final Subject subject = scc.getSubject();
+        assert subject!=null;
+        Assert.assertEquals(subject.getPrincipals(NameIdentifierPrincipal.class).size(), 1);
         
         final NameIdentifierPrincipal princ =
-                scc.getSubject().getPrincipals(NameIdentifierPrincipal.class).iterator().next();
+                subject.getPrincipals(NameIdentifierPrincipal.class).iterator().next();
         Assert.assertEquals(princ.getNameIdentifier().getValue(), "foo");
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/FinalizeSAMLSubjectCanonicalizationTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/FinalizeSAMLSubjectCanonicalizationTest.java
index ff4987f6d..e740156dc 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/FinalizeSAMLSubjectCanonicalizationTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/FinalizeSAMLSubjectCanonicalizationTest.java
@@ -63,13 +63,13 @@ public class FinalizeSAMLSubjectCanonicalizationTest {
     }
     
     @Test public void testMatch() {
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setPrincipalName("foo");
         
         final Event event = action.execute(rc);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext sc = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(sc);
+        assert sc!=null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeAuthenticationContextTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeAuthenticationContextTest.java
index fd057d3ac..fd3f737af 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeAuthenticationContextTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeAuthenticationContextTest.java
@@ -28,6 +28,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.FunctionSupport;
 
 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.saml.saml2.core.AuthnRequest;
@@ -62,13 +63,14 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
     @Test public void testNoInboundMessageContext() throws ComponentInitializationException {
         final RequestContext requestCtx = new RequestContextBuilder().buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
+        assert prc!=null;
         prc.setInboundMessageContext(null);
 
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
 
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authnCtx);
+        assert authnCtx!=null;
         Assert.assertFalse(authnCtx.isForceAuthn());
         Assert.assertFalse(authnCtx.isPassive());
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(1));
@@ -82,12 +84,13 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
     @Test public void testNoInboundMessage() throws ComponentInitializationException {
         final RequestContext requestCtx = new RequestContextBuilder().setInboundMessage(null).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
+        assert prc!=null;
 
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
 
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authnCtx);
+        assert authnCtx!=null;
         Assert.assertFalse(authnCtx.isForceAuthn());
         Assert.assertFalse(authnCtx.isPassive());
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(1));
@@ -104,12 +107,12 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
                         new IdPInitiatedSSORequest("https://sp.example.org/sp", null, null, null)
                         ).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-        
+        assert prc!=null;
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
 
         AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authnCtx);
+        assert authnCtx!=null;
         Assert.assertFalse(authnCtx.isForceAuthn());
         Assert.assertFalse(authnCtx.isPassive());
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(1));
@@ -128,12 +131,12 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         final RequestContext requestCtx =
                 new RequestContextBuilder().setInboundMessage(authnRequest).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-
+        assert prc!=null;
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authnCtx);
+        assert authnCtx!=null;
         Assert.assertTrue(authnCtx.isForceAuthn());
         Assert.assertTrue(authnCtx.isPassive());
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(1));
@@ -147,9 +150,13 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         final RequestContext requestCtx =
                 new RequestContextBuilder().setInboundMessage(authnRequest).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-
+        assert prc!=null;
         final Scoping scoping = SAML2ActionTestingSupport.buildScoping(0, null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setScoping(scoping);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final AuthnRequest authnRequest2 = (AuthnRequest) imc.getMessage();
+        assert authnRequest2!=null;
+        authnRequest2.setScoping(scoping);
 
         action = new InitializeAuthenticationContext();
         action.setProxyCountLookupStrategy(FunctionSupport.constant(1));
@@ -160,7 +167,7 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authnCtx);
+        assert authnCtx!=null;
         Assert.assertTrue(authnCtx.isForceAuthn());
         Assert.assertTrue(authnCtx.isPassive());
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(1));
@@ -174,9 +181,14 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         final RequestContext requestCtx =
                 new RequestContextBuilder().setInboundMessage(authnRequest).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
+        assert prc!=null;
 
         final Scoping scoping = SAML2ActionTestingSupport.buildScoping(0, null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setScoping(scoping);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final AuthnRequest authnRequest2 = (AuthnRequest) imc.getMessage();
+        assert authnRequest2!=null;
+        authnRequest2.setScoping(scoping);
         
         final BrowserSSOProfileConfiguration config = new BrowserSSOProfileConfiguration();
         config.setDisallowedFeatures(BrowserSSOProfileConfiguration.FEATURE_SCOPING);
@@ -197,13 +209,19 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         final RequestContext requestCtx =
                 new RequestContextBuilder().setInboundMessage(authnRequest).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
+        assert prc!=null;
 
         final Scoping scoping = SAML2ActionTestingSupport.buildScoping(0, null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setScoping(scoping);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final AuthnRequest authnRequest2 = (AuthnRequest) imc.getMessage();
+        assert authnRequest2!=null;
+        authnRequest2.setScoping(scoping);
         
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authnCtx!=null;
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(0));
     }
 
@@ -215,13 +233,19 @@ public class InitializeAuthenticationContextTest extends OpenSAMLInitBaseTestCas
         final RequestContext requestCtx =
                 new RequestContextBuilder().setInboundMessage(authnRequest).buildRequestContext();
         final ProfileRequestContext prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-
+        assert prc!=null;
+        
         final Scoping scoping = SAML2ActionTestingSupport.buildScoping(0, CollectionSupport.setOf("foo", "bar"));
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setScoping(scoping);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final AuthnRequest authnRequest2 = (AuthnRequest) imc.getMessage();
+        assert authnRequest2!=null;
+        authnRequest2.setScoping(scoping);
         
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authnCtx!=null;
         Assert.assertEquals(authnCtx.getProxyCount(), Integer.valueOf(0));
         Assert.assertEquals(authnCtx.getProxiableAuthorities(), CollectionSupport.setOf("foo", "bar"));
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextForErrorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextForErrorTest.java
index d9e83068d..cbb8bd213 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextForErrorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextForErrorTest.java
@@ -82,51 +82,65 @@ public class InitializeOutboundMessageContextForErrorTest extends OpenSAMLInitBa
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getOutboundMessageContext());
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class); 
-        Assert.assertNotNull(bindingCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class); 
+        assert bindingCtx!=null;
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML1_SOAP11_BINDING_URI);
-        Assert.assertNull(prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class));
+        Assert.assertNull(omc.getSubcontext(SAMLPeerEntityContext.class));
     }
 
     @Test public void testNoPeerEntityContext() {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getOutboundMessageContext());
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class); 
-        Assert.assertNotNull(bindingCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class); 
+        assert bindingCtx!=null;
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML1_SOAP11_BINDING_URI);
-        Assert.assertNull(prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class));
+        Assert.assertNull(omc.getSubcontext(SAMLPeerEntityContext.class));
     }
 
     @Test public void testPeerEntityContextNoIssuer() {
-        SAMLPeerEntityContext ctx = prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true);
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyIdContextTree(ctx);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        SAMLPeerEntityContext ctx = imc.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setRelyingPartyIdContextTree(ctx);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getOutboundMessageContext());
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class); 
-        Assert.assertNotNull(bindingCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class); 
+        assert bindingCtx!=null;
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML1_SOAP11_BINDING_URI);
-        ctx = prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class);
-        Assert.assertNotNull(ctx);
+        ctx = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert ctx!=null;
         Assert.assertNull(ctx.getEntityId());
     }
 
     @Test public void testPeerEntityContextIssuer() {
-        SAMLPeerEntityContext ctx = prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true);
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyIdContextTree(ctx);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        SAMLPeerEntityContext ctx = imc.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setRelyingPartyIdContextTree(ctx);
         attributeQuery.getAttributeQuery().setResource("issuer");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertNotNull(prc.getOutboundMessageContext());
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class); 
-        Assert.assertNotNull(bindingCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class); 
+        assert bindingCtx!=null;
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML1_SOAP11_BINDING_URI);
-        ctx = prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class);
-        Assert.assertNotNull(ctx);
+        ctx = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert ctx!=null;
         Assert.assertEquals(ctx.getEntityId(), "issuer");
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextTest.java
index 94c17f176..2451a9a52 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeOutboundMessageContextTest.java
@@ -25,6 +25,7 @@ import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.saml1.core.Request;
@@ -72,27 +73,39 @@ public class InitializeOutboundMessageContextTest extends OpenSAMLInitBaseTestCa
     }
 
     @Test public void testPeerEntityContextNoIssuer() {
-        SAMLPeerEntityContext ctx = prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true);
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyIdContextTree(ctx);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        SAMLPeerEntityContext ctx = imc.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setRelyingPartyIdContextTree(ctx);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getOutboundMessageContext());
-        ctx = prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class);
-        Assert.assertNotNull(ctx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+
+        ctx = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert ctx!=null;
         Assert.assertNull(ctx.getEntityId());
     }
 
     @Test public void testPeerEntityContextIssuer() {
-        SAMLPeerEntityContext ctx = prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true);
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyIdContextTree(ctx);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        SAMLPeerEntityContext ctx = imc.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setRelyingPartyIdContextTree(ctx);
         attributeQuery.getAttributeQuery().setResource("issuer");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getOutboundMessageContext());
-        ctx = prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class);
-        Assert.assertNotNull(ctx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+
+        ctx = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert ctx!=null;
         Assert.assertEquals(ctx.getEntityId(), "issuer");
     }
     
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeRelyingPartyContextFromSAMLPeerTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeRelyingPartyContextFromSAMLPeerTest.java
index dabc60733..978ab5dec 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeRelyingPartyContextFromSAMLPeerTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/InitializeRelyingPartyContextFromSAMLPeerTest.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.saml.profile.impl;
 
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -62,15 +63,17 @@ public class InitializeRelyingPartyContextFromSAMLPeerTest {
 
     @Test
     public void testPeerContext() {
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
         final SAMLPeerEntityContext peer =
-                prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true);
+                imc.getOrCreateSubcontext(SAMLPeerEntityContext.class);
         peer.setEntityId("foo");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
         final RelyingPartyContext rp = prc.getSubcontext(RelyingPartyContext.class);
-        Assert.assertNotNull(rp);
+        assert rp!=null;
         Assert.assertSame(rp.getRelyingPartyIdContextTree(), peer);
         Assert.assertEquals(rp.getRelyingPartyId(), "foo");
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/PopulateBindingAndEndpointContextsTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/PopulateBindingAndEndpointContextsTest.java
index c42cc5064..69422e7e5 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/PopulateBindingAndEndpointContextsTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/profile/impl/PopulateBindingAndEndpointContextsTest.java
@@ -42,6 +42,7 @@ import net.shibboleth.shared.xml.XMLParserException;
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.io.Unmarshaller;
 import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.binding.BindingDescriptor;
@@ -54,6 +55,7 @@ import org.opensaml.saml.common.profile.SAMLEventIds;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
+import org.opensaml.saml.saml2.metadata.Endpoint;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.opensaml.saml.saml2.testing.SAML2ActionTestingSupport;
 import org.springframework.webflow.execution.Event;
@@ -93,12 +95,17 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         rc = new RequestContextBuilder().setInboundMessage(request).setRelyingPartyProfileConfigurations(
                 Collections.<ProfileConfiguration>singletonList(profileConfig)).buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(rc);
-        prc.getInboundMessageContext().getSubcontext(SAMLBindingContext.class, true).setRelayState(RELAY_STATE);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc !=null;
+        imc.getOrCreateSubcontext(SAMLBindingContext.class).setRelayState(RELAY_STATE);
         
         // Set these up so the context will be seen as anonymous or not based on metadata in the outbound context.
-        prc.getSubcontext(RelyingPartyContext.class).setVerificationLookupStrategy(new SAMLVerificationLookupStrategy());
-        prc.getSubcontext(RelyingPartyContext.class).setRelyingPartyIdContextTree(
-                prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true));
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        rpc.setVerificationLookupStrategy(new SAMLVerificationLookupStrategy());
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        rpc.setRelyingPartyIdContextTree(omc.getOrCreateSubcontext(SAMLPeerEntityContext.class));
         
         action = new PopulateBindingAndEndpointContexts();
         action.setEndpointResolver(new DefaultEndpointResolver<>());
@@ -152,19 +159,23 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
     public void testNoMetadata() {
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
         
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
         
-        final SAMLEndpointContext epCtx = prc.getOutboundMessageContext().getSubcontext(
-                SAMLPeerEntityContext.class, false).getSubcontext(SAMLEndpointContext.class, false);
-        Assert.assertNotNull(epCtx);
-        Assert.assertNotNull(epCtx.getEndpoint());
-        Assert.assertEquals(epCtx.getEndpoint().getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
-        Assert.assertEquals(epCtx.getEndpoint().getLocation(), LOCATION_POST);
+        final SAMLPeerEntityContext pec = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLEndpointContext epCtx = pec.getSubcontext(SAMLEndpointContext.class, false);
+        assert epCtx!=null;
+        final Endpoint ep =epCtx.getEndpoint();
+        assert ep!=null;
+        Assert.assertEquals(ep.getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
+        Assert.assertEquals(ep.getLocation(), LOCATION_POST);
     }
 
     /**
@@ -178,7 +189,9 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -195,7 +208,9 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
         Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -207,17 +222,27 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         
         // Request is signed but we don't care.
         profileConfig.setSkipEndpointValidationWhenSigned(false);
-        prc.getInboundMessageContext().getSubcontext(SAMLBindingContext.class).setHasBindingSignature(true);
+        MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        SAMLBindingContext sbc = imc.getSubcontext(SAMLBindingContext.class);
+        assert sbc != null;
+        sbc.setHasBindingSignature(true);
         event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
 
         // Request is signed and we care.
         profileConfig.setSkipEndpointValidationWhenSigned(true);
-        prc.getInboundMessageContext().getSubcontext(SAMLBindingContext.class).setHasBindingSignature(true);
+        imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        sbc = imc.getSubcontext(SAMLBindingContext.class);
+        assert sbc != null;
+        sbc.setHasBindingSignature(true);
         event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
@@ -234,9 +259,15 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(LOCATION);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceURL(LOCATION);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -253,9 +284,15 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
 
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(SAMLConstants.SAML2_SOAP11_BINDING_URI);
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setProtocolBinding(SAMLConstants.SAML2_SOAP11_BINDING_URI);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -272,10 +309,16 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(LOCATION_ART);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(SAMLConstants.SAML2_ARTIFACT_BINDING_URI);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceURL(LOCATION_ART);
+        authnRequest.setProtocolBinding(SAMLConstants.SAML2_ARTIFACT_BINDING_URI);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -292,11 +335,17 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
 
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceIndex(10);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(null);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceIndex(10);
+        authnRequest.setAssertionConsumerServiceURL(null);
+        authnRequest.setProtocolBinding(null);
 
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -309,7 +358,13 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
      */
     @Test
     public void testSynchronous() throws ComponentInitializationException {
-        prc.getInboundMessageContext().getSubcontext(SAMLBindingContext.class).setBindingUri(
+        
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final SAMLBindingContext sbc = imc.getSubcontext(SAMLBindingContext.class);
+        assert sbc != null;
+
+        sbc.setBindingUri(
                 SAMLConstants.SAML2_SOAP11_BINDING_URI);
         
         final BindingDescriptor binding = new BindingDescriptor();
@@ -324,8 +379,10 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         
         final Event event = badaction.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_SOAP11_BINDING_URI);
         Assert.assertSame(binding, bindingCtx.getBindingDescriptor());
@@ -342,23 +399,28 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
         
-        final SAMLEndpointContext epCtx = prc.getOutboundMessageContext().getSubcontext(
-                SAMLPeerEntityContext.class, false).getSubcontext(SAMLEndpointContext.class, false);
-        Assert.assertNotNull(epCtx);
-        Assert.assertNotNull(epCtx.getEndpoint());
-        Assert.assertEquals(epCtx.getEndpoint().getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
-        Assert.assertEquals(epCtx.getEndpoint().getLocation(), LOCATION_POST);
+        final SAMLPeerEntityContext pec = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLEndpointContext epCtx = pec.getSubcontext(SAMLEndpointContext.class, false);
+        assert epCtx!=null;
+        final Endpoint ep =epCtx.getEndpoint();
+        assert ep!=null;
+
+        Assert.assertEquals(ep.getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
+        Assert.assertEquals(ep.getLocation(), LOCATION_POST);
     }
 
     /**
@@ -372,27 +434,36 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
 
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceIndex(2);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(null);
+        
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceIndex(2);
+        authnRequest.setAssertionConsumerServiceURL(null);
+        authnRequest.setProtocolBinding(null);
 
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
         
-        final SAMLEndpointContext epCtx = prc.getOutboundMessageContext().getSubcontext(
-                SAMLPeerEntityContext.class, false).getSubcontext(SAMLEndpointContext.class, false);
-        Assert.assertNotNull(epCtx);
-        Assert.assertNotNull(epCtx.getEndpoint());
-        Assert.assertEquals(epCtx.getEndpoint().getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
-        Assert.assertEquals(epCtx.getEndpoint().getLocation(), LOCATION_POST);
+        final SAMLPeerEntityContext pec = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLEndpointContext epCtx = pec.getSubcontext(SAMLEndpointContext.class, false);
+        assert epCtx!=null;
+        final Endpoint ep =epCtx.getEndpoint();
+        assert ep!=null;
+        Assert.assertEquals(ep.getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
+        Assert.assertEquals(ep.getLocation(), LOCATION_POST);
     }
 
     /**
@@ -406,11 +477,17 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
 
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceIndex(3);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(null);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceIndex(3);
+        authnRequest.setAssertionConsumerServiceURL(null);
+        authnRequest.setProtocolBinding(null);
 
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.ENDPOINT_RESOLUTION_FAILED);
@@ -427,26 +504,34 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
 
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setAssertionConsumerServiceURL(null);
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setProtocolBinding(null);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        final AuthnRequest authnRequest = (AuthnRequest) imc.getMessage();
+        assert authnRequest!=null;
+        authnRequest.setAssertionConsumerServiceURL(null);
+        authnRequest.setProtocolBinding(null);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
         
-        final SAMLEndpointContext epCtx = prc.getOutboundMessageContext().getSubcontext(
-                SAMLPeerEntityContext.class, false).getSubcontext(SAMLEndpointContext.class, false);
-        Assert.assertNotNull(epCtx);
-        Assert.assertNotNull(epCtx.getEndpoint());
-        Assert.assertEquals(epCtx.getEndpoint().getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
-        Assert.assertEquals(epCtx.getEndpoint().getLocation(), LOCATION_POST.replace("POST2", "POST"));
+        final SAMLPeerEntityContext pec = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLEndpointContext epCtx = pec.getSubcontext(SAMLEndpointContext.class, false);
+        assert epCtx!=null;
+        final Endpoint ep =epCtx.getEndpoint();
+        assert ep!=null;
+        Assert.assertEquals(ep.getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
+        Assert.assertEquals(ep.getLocation(), LOCATION_POST.replace("POST2", "POST"));
     }
     
     /**
@@ -460,26 +545,32 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
         final SAMLMetadataContext mdCtx = new SAMLMetadataContext();
         mdCtx.setEntityDescriptor(entity);
         mdCtx.setRoleDescriptor(entity.getSPSSODescriptor("required"));
-        prc.getOutboundMessageContext().getSubcontext(SAMLPeerEntityContext.class, true).addSubcontext(mdCtx);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        omc.getOrCreateSubcontext(SAMLPeerEntityContext.class).addSubcontext(mdCtx);
         
         final IdPInitiatedSSORequest saml1Request = new IdPInitiatedSSORequest("foo", LOCATION_POST, null, null);
-        prc.getInboundMessageContext().setMessage(saml1Request);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc != null;
+        imc.setMessage(saml1Request);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        final SAMLBindingContext bindingCtx = prc.getOutboundMessageContext().getSubcontext(SAMLBindingContext.class);
-        Assert.assertNotNull(bindingCtx);
+        final SAMLBindingContext bindingCtx = omc.getSubcontext(SAMLBindingContext.class);
+        assert bindingCtx!=null;
         Assert.assertNotNull(bindingCtx.getBindingDescriptor());
         Assert.assertEquals(bindingCtx.getRelayState(), RELAY_STATE);
         Assert.assertEquals(bindingCtx.getBindingUri(), SAMLConstants.SAML2_POST_BINDING_URI);
         
-        final SAMLEndpointContext epCtx = prc.getOutboundMessageContext().getSubcontext(
-                SAMLPeerEntityContext.class, false).getSubcontext(SAMLEndpointContext.class, false);
-        Assert.assertNotNull(epCtx);
-        Assert.assertNotNull(epCtx.getEndpoint());
-        Assert.assertEquals(epCtx.getEndpoint().getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
-        Assert.assertEquals(epCtx.getEndpoint().getLocation(), LOCATION_POST);
+        final SAMLPeerEntityContext pec = omc.getSubcontext(SAMLPeerEntityContext.class);
+        assert pec!=null;
+        final SAMLEndpointContext epCtx = pec.getSubcontext(SAMLEndpointContext.class, false);
+        assert epCtx!=null;
+        final Endpoint ep =epCtx.getEndpoint();
+        assert ep!=null;
+        Assert.assertEquals(ep.getBinding(), SAMLConstants.SAML2_POST_BINDING_URI);
+        Assert.assertEquals(ep.getLocation(), LOCATION_POST);
     }
     
     @Nonnull private EntityDescriptor loadMetadata(@Nonnull @NotEmpty final String path) throws UnmarshallingException {
@@ -488,6 +579,7 @@ public class PopulateBindingAndEndpointContextsTest extends XMLObjectBaseTestCas
             final URL url = getClass().getResource(path);
             Document doc = parserPool.parse(new FileInputStream(new File(url.toURI())));
             final Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(doc.getDocumentElement());
+            assert unmarshaller!=null;
             return (EntityDescriptor) unmarshaller.unmarshall(doc.getDocumentElement());
         } catch (FileNotFoundException | XMLParserException | URISyntaxException e) {
             throw new UnmarshallingException(e);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertionTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertionTest.java
index bb48a819d..0f466ccf6 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertionTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAttributeStatementToAssertionTest.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.schema.impl.XSStringImpl;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml1.core.Assertion;
@@ -57,6 +58,7 @@ import net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML1AttributeTrans
 import net.shibboleth.idp.saml.attribute.transcoding.SAML1AttributeTranscoder;
 import net.shibboleth.idp.saml.attribute.transcoding.impl.SAML1StringAttributeTranscoder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.testing.MockApplicationContext;
 import net.shibboleth.shared.testing.MockReloadableService;
@@ -167,7 +169,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         prc.setOutboundMessageContext(null);
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
@@ -192,7 +196,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      */
     @Test public void testNoAttributes() throws Exception {
         final AttributeContext attribCtx = new AttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         Event result = action.execute(rc);
@@ -221,7 +227,7 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         rule.put(SAML1AttributeTranscoder.PROP_NAME, MY_NAME_1);
         rule.put(SAML1AttributeTranscoder.PROP_NAMESPACE, MY_NAMESPACE);
         
-        localregistry.setTranscoderRegistry(Collections.singletonList(new TranscodingRule(rule)));
+        localregistry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(rule)));
         localregistry.setApplicationContext(new MockApplicationContext());
         localregistry.initialize();
         
@@ -232,7 +238,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
 
         final AttributeContext attribCtx = new AttributeContext();
         attribCtx.setIdPAttributes(Arrays.asList(attribute));
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setIgnoringUnencodableAttributes(true);
         action.initialize();
@@ -262,7 +270,7 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         rule.put(SAML1AttributeTranscoder.PROP_NAME, MY_NAME_1);
         rule.put(SAML1AttributeTranscoder.PROP_NAMESPACE, MY_NAMESPACE);
         
-        localregistry.setTranscoderRegistry(Collections.singletonList(new TranscodingRule(rule)));
+        localregistry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(rule)));
         localregistry.setApplicationContext(new MockApplicationContext());
         localregistry.initialize();
         
@@ -273,7 +281,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
 
         final AttributeContext attribCtx = new AttributeContext();
         attribCtx.setIdPAttributes(Arrays.asList(attribute));
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setIgnoringUnencodableAttributes(false);
         action.initialize();
@@ -288,19 +298,25 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      * @throws Exception if something goes wrong
      */
     @Test public void testAddedAttributeStatement() throws Exception {
-
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        Response response = (Response) omc.getMessage();
+        assert response != null;
+        response.getAssertions().add(
                 SAML1ActionTestingSupport.buildAssertion());
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setStatementInOwnAssertion(true);
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
+        response = (Response) omc.getMessage();
+        assert response != null;
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
         Assert.assertEquals(response.getAssertions().size(), 2);
 
         for (final Assertion assertion : response.getAssertions()) {
@@ -320,17 +336,24 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      * @throws Exception if something goes wrong
      */
     @Test public void testAssertionInResponse() throws Exception {
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        Response response = (Response) omc.getMessage();
+        assert response != null;
+        response.getAssertions().add(
                 SAML1ActionTestingSupport.buildAssertion());
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        response = (Response) omc.getMessage();
+        assert response != null;
         Assert.assertEquals(response.getAssertions().size(), 1);
 
         Assertion assertion = response.getAssertions().get(0);
@@ -350,13 +373,19 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      */
     @Test public void testNoAssertionInResponse() throws Exception {
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
-
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc != null;
+        
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         Assert.assertEquals(response.getAssertions().size(), 1);
 
         Assertion assertion = response.getAssertions().get(0);
@@ -400,17 +429,20 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         boolean one = false, altone = false, two = false;
         
         for (final Attribute samlAttr : attributeStatement.getAttributes()) {
-            if (samlAttr.getAttributeName().equals(MY_NAME_1)) {
+            assert samlAttr!=null;
+            final String attrName = samlAttr.getAttributeName();
+            assert attrName!=null;
+            if (attrName.equals(MY_NAME_1)) {
                 Assert.assertEquals(samlAttr.getAttributeValues().size(), 1);
                 final XMLObject xmlObject = samlAttr.getAttributeValues().get(0);
                 Assert.assertEquals(((XSStringImpl) xmlObject).getValue(), MY_VALUE_1);
                 one = true;
-            } else if (samlAttr.getAttributeName().equals(MY_NAME_2)) {
+            } else if (attrName.equals(MY_NAME_2)) {
                 Assert.assertEquals(samlAttr.getAttributeValues().size(), 1);
                 final XMLObject xmlObject = samlAttr.getAttributeValues().get(0);
                 Assert.assertEquals(((XSStringImpl) xmlObject).getValue(), MY_VALUE_2);
                 altone = true;
-            } else if (samlAttr.getAttributeName().equals(MY_ALTNAME_1)) {
+            } else if (attrName.equals(MY_ALTNAME_1)) {
                 Assert.assertEquals(samlAttr.getAttributeValues().size(), 2);
                 final String val1 = ((XSStringImpl) samlAttr.getAttributeValues().get(0)).getValue();
                 final String val2 = ((XSStringImpl) samlAttr.getAttributeValues().get(1)).getValue();
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAuthenticationStatementToAssertionTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAuthenticationStatementToAssertionTest.java
index 662feef05..785024298 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAuthenticationStatementToAssertionTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/AddAuthenticationStatementToAssertionTest.java
@@ -19,9 +19,11 @@ package net.shibboleth.idp.saml.saml1.profile.impl;
 
 import java.time.Instant;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
 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.saml.saml1.core.Assertion;
@@ -29,6 +31,7 @@ import org.opensaml.saml.saml1.core.AuthenticationStatement;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.storage.StorageSerializer;
 import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.webflow.execution.Event;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
@@ -47,6 +50,7 @@ import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.authn.principal.AuthenticationMethodPrincipal;
 import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.servlet.impl.HttpServletRequestResponseContext;
 import net.shibboleth.shared.testing.ConstantSupplier;
 
 /** {@link AddAuthenticationStatementToAssertion} unit test. */
@@ -57,6 +61,12 @@ public class AddAuthenticationStatementToAssertionTest extends OpenSAMLInitBaseT
     private ProfileRequestContext prc;
 
     private AddAuthenticationStatementToAssertion action;
+    
+    @Nonnull private MockHttpServletRequest getMockHttpServletRequest() {
+        final MockHttpServletRequest result = (MockHttpServletRequest) action.getHttpServletRequest();
+        assert result  != null;
+        return result;
+    }
 
     /**
      * Test setup.
@@ -104,7 +114,7 @@ public class AddAuthenticationStatementToAssertionTest extends OpenSAMLInitBaseT
      */
     @Test public void testNoContext() throws Exception {
         prc.setOutboundMessageContext(null);
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", new AuthenticationMethodPrincipal("Test")));
 
         final Event event = action.execute(rc);
@@ -141,19 +151,24 @@ public class AddAuthenticationStatementToAssertionTest extends OpenSAMLInitBaseT
         fd.setResultSerializer(serializer);
         fd.initialize();
         
-        prc.getSubcontext(AuthenticationContext.class, true).getAvailableFlows().put("Test", fd);
-        prc.getSubcontext(AuthenticationContext.class).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).getAvailableFlows().put("Test", fd);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac!=null;
+        ac.setAuthenticationResult(
                 new AuthenticationResult("Test", new AuthenticationMethodPrincipal("Test")));
 
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr("127.0.0.1");
+        getMockHttpServletRequest().setRemoteAddr("127.0.0.1");
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
 
-        Assert.assertNotNull(prc.getOutboundMessageContext().getMessage());
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage() instanceof Response);
+        Assert.assertNotNull(omc.getMessage());
+        Assert.assertTrue(omc.getMessage() instanceof Response);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) omc.getMessage();
+        assert response !=null;
         Assert.assertEquals(response.getAssertions().size(), 1);
         Assert.assertNotNull(response.getAssertions().get(0));
 
@@ -178,19 +193,24 @@ public class AddAuthenticationStatementToAssertionTest extends OpenSAMLInitBaseT
         final Subject subject = new Subject();
         subject.getPrincipals().add(new AuthenticationMethodPrincipal("Foo"));
         subject.getPrincipals().add(new AuthenticationMethodPrincipal("Bar"));
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", subject));
         final RequestedPrincipalContext requested = new RequestedPrincipalContext();
         requested.setMatchingPrincipal(new AuthenticationMethodPrincipal("Bar"));
-        prc.getSubcontext(AuthenticationContext.class, false).addSubcontext(requested);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac!=null;
+        ac.addSubcontext(requested);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
 
-        Assert.assertNotNull(prc.getOutboundMessageContext().getMessage());
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage() instanceof Response);
+        Assert.assertNotNull(omc.getMessage());
+        Assert.assertTrue(omc.getMessage() instanceof Response);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) omc.getMessage();
+        assert response  != null;
         Assert.assertEquals(response.getAssertions().size(), 1);
         Assert.assertNotNull(response.getAssertions().get(0));
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/FilterByQueriedAttributeDesignatorsTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/FilterByQueriedAttributeDesignatorsTest.java
index adf5aaf75..eac0a1cc9 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/FilterByQueriedAttributeDesignatorsTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/FilterByQueriedAttributeDesignatorsTest.java
@@ -117,8 +117,8 @@ public class FilterByQueriedAttributeDesignatorsTest extends XMLObjectBaseTestCa
     }
 
     @Test public void noValues() {
-        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class,true);
-        final AttributeContext ac = rpc.getSubcontext(AttributeContext.class,true);
+        final RelyingPartyContext rpc = prc.getOrCreateSubcontext(RelyingPartyContext.class);
+        final AttributeContext ac = rpc.getOrCreateSubcontext(AttributeContext.class);
         final List<IdPAttribute> attributes = List.of(
                 new IdPAttribute("eduPersonAssurance"),
                 new IdPAttribute("flooby"),
@@ -132,8 +132,8 @@ public class FilterByQueriedAttributeDesignatorsTest extends XMLObjectBaseTestCa
 
     /** This is a non-issue for SAML 1, but just for completeness. */
     @Test public void values() {
-        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class,true);
-        final AttributeContext ac = rpc.getSubcontext(AttributeContext.class,true);
+        final RelyingPartyContext rpc = prc.getOrCreateSubcontext(RelyingPartyContext.class);
+        final AttributeContext ac = rpc.getOrCreateSubcontext(AttributeContext.class);
         final IdPAttribute eduPersonAssurance = new IdPAttribute("eduPersonAssurance");
         eduPersonAssurance.setValues(List.of(new StringAttributeValue("green-blue"))); // not turquoise
         final IdPAttribute flooby = new IdPAttribute("flooby");
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
index f99c9217e..3ea0a8bb4 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
@@ -81,24 +81,24 @@ public class IdPInitiatedSSORequestMessageDecoderTest {
         decoder.decode();
         
         MessageContext messageContext = decoder.getMessageContext();
-        Assert.assertNotNull(messageContext);
+        assert messageContext!=null;
         IdPInitiatedSSORequest ssoRequest = (IdPInitiatedSSORequest) messageContext.getMessage();
-        Assert.assertNotNull(ssoRequest);
+        assert ssoRequest!=null;
         
         Assert.assertEquals(ssoRequest.getEntityId(), entityId, "Incorrect decoded entityId value");
         Assert.assertEquals(ssoRequest.getAssertionConsumerServiceURL(), acsUrl, "Incorrect decoded ACS URL value");
         Assert.assertEquals(ssoRequest.getRelayState(), relayState, "Incorrect decoded relay state value");
         Assert.assertEquals(ssoRequest.getTime(), time.truncatedTo(ChronoUnit.SECONDS), "Incorrect decoded time value");
         
-        Assert.assertEquals(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).getEntityId(), entityId,
+        Assert.assertEquals(messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class).getEntityId(), entityId,
                 "Incorrect decoded entityId value in peer context");
         
-        SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
+        SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
         Assert.assertEquals(bindingContext.getRelayState(), relayState, "Incorrect decoded relay state value in binding context");
         Assert.assertEquals(bindingContext.getBindingUri(), "urn:mace:shibboleth:1.0:profiles:AuthnRequest",
                 "Incorrect binding URI in binding context");
         
-        SAMLMessageInfoContext msgInfoContext = messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        SAMLMessageInfoContext msgInfoContext = messageContext.getOrCreateSubcontext(SAMLMessageInfoContext.class);
         Assert.assertEquals(msgInfoContext.getMessageIssueInstant(), time.truncatedTo(ChronoUnit.SECONDS),
                 "Incorrect decoded issue instant value in message info context");
         Assert.assertEquals(msgInfoContext.getMessageId(), messageID,
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/SAML1ActionSupportTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/SAML1ActionSupportTest.java
index 4e76b4515..4c6265bc3 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/SAML1ActionSupportTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml1/profile/impl/SAML1ActionSupportTest.java
@@ -19,7 +19,9 @@ package net.shibboleth.idp.saml.saml1.profile.impl;
 
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.profile.testing.ActionTestSupportAction;
+import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import java.util.function.Function;
@@ -31,6 +33,7 @@ import org.opensaml.saml.saml1.core.Assertion;
 import org.opensaml.saml.saml1.core.Conditions;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.profile.SAML1ActionSupport;
+import org.opensaml.security.config.SecurityConfiguration;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -63,17 +66,27 @@ public class SAML1ActionSupportTest extends OpenSAMLInitBaseTestCase {
                         ProfileRequestContext.BINDING_KEY);
 
         ActionTestSupportAction action = new ActionTestSupportAction();
-        RelyingPartyContext relyingPartyCtx = relyingPartyContextLookupStrategy.apply(profileRequestContext);
-
+        final RelyingPartyContext relyingPartyCtx = relyingPartyContextLookupStrategy.apply(profileRequestContext);
+        assert relyingPartyCtx!=null;
         Assert.assertEquals(response.getAssertions().size(), 0, "Expected zarro assertions before insert");
+        
+        final ProfileConfiguration pc = relyingPartyCtx.getProfileConfig();
+        assert pc!=null;
+        final SecurityConfiguration sc = pc.getSecurityConfiguration(profileRequestContext);
+        assert sc!=null;
+        final RelyingPartyConfiguration rpConfig = relyingPartyCtx.getConfiguration();
+        assert rpConfig != null;
+        final String issuer =rpConfig.getIssuer(profileRequestContext);
+        assert issuer != null;
+        
         final Assertion assertion = SAML1ActionSupport.addAssertionToResponse(action, response,
-                relyingPartyCtx.getProfileConfig().getSecurityConfiguration(profileRequestContext).getIdGenerator(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) relyingPartyCtx.getConfiguration()).getIssuer(profileRequestContext));
+                sc.getIdGenerator(),
+                issuer);
         Assert.assertEquals(response.getAssertions().size(), 1, "Expected but one assertion after insert");
         Assert.assertTrue(response.getAssertions().contains(assertion), "Inserted assertion should be there");
         final Assertion second = SAML1ActionSupport.addAssertionToResponse(action, response,
-                relyingPartyCtx.getProfileConfig().getSecurityConfiguration(profileRequestContext).getIdGenerator(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) relyingPartyCtx.getConfiguration()).getIssuer(profileRequestContext));
+                sc.getIdGenerator(),
+                issuer);
         Assert.assertEquals(response.getAssertions().size(), 2, "Expected two assertions after two inserts");
         Assert.assertTrue(response.getAssertions().contains(assertion), "Inserted assertion should be there");
         Assert.assertNotSame(second, assertion, "Two separate assertions should have been added");
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/config/navigate/tests/ProxyRestrictionLookupFunctionTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/config/navigate/tests/ProxyRestrictionLookupFunctionTest.java
index cd9c44c49..5365db4db 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/config/navigate/tests/ProxyRestrictionLookupFunctionTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/config/navigate/tests/ProxyRestrictionLookupFunctionTest.java
@@ -29,6 +29,7 @@ import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.saml2.profile.config.impl.BrowserSSOProfileConfiguration;
 import net.shibboleth.idp.saml.saml2.profile.config.navigate.ProxyRestrictionLookupFunction;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.collection.Pair;
 import net.shibboleth.shared.component.ComponentInitializationException;
@@ -54,9 +55,13 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         prc = new RequestContextBuilder()
                 .setRelyingPartyProfileConfigurations(Collections.singletonList(new BrowserSSOProfileConfiguration()))
                 .buildProfileRequestContext();
-        config = (BrowserSSOProfileConfiguration) prc.getSubcontext(RelyingPartyContext.class).getConfiguration().getProfileConfiguration(
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        final RelyingPartyConfiguration rpCfg = rpc.getConfiguration();
+        assert rpCfg!=null;
+        config = (BrowserSSOProfileConfiguration)rpCfg.getProfileConfiguration(
                 prc, BrowserSSOProfileConfiguration.PROFILE_ID);
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(config);
+        rpc.setProfileConfig(config);
         sc = prc.getOrCreateSubcontext(SubjectContext.class);
         sc.getAuthenticationResults().put("test1", new AuthenticationResult("test1", new Subject()));
         sc.getAuthenticationResults().put("test2", new AuthenticationResult("test2", new Subject()));
@@ -67,7 +72,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
     public void testNoPrincipals() {
         result = fn.apply(prc);
         Assert.assertNull(result.getFirst());
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
     }
 
     @Test
@@ -77,7 +84,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         
         result = fn.apply(prc);
         Assert.assertNull(result.getFirst());
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
     }
 
     @Test
@@ -88,7 +97,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         
         result = fn.apply(prc);
         Assert.assertEquals(result.getFirst(), Integer.valueOf(9));
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
         
         proxy.setProxyCount(1);
         result = fn.apply(prc);
@@ -111,7 +122,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         
         result = fn.apply(prc);
         Assert.assertEquals(result.getFirst(), Integer.valueOf(4));
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
         
         proxy1.setProxyCount(1);
         proxy2.setProxyCount(1);
@@ -159,7 +172,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         proxy2.getAudiences().clear();
         proxy2.getAudiences().add("foo");
         result = fn.apply(prc);
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
     }
 
     @Test
@@ -187,7 +202,9 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         
         result = fn.apply(prc);
         Assert.assertEquals(result.getFirst(), Integer.valueOf(4));
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+        Assert.assertTrue(second.isEmpty());
         
         config.setProxyCount(1);
         proxy1.setProxyCount(1);
@@ -228,7 +245,10 @@ public class ProxyRestrictionLookupFunctionTest extends OpenSAMLInitBaseTestCase
         proxy1.getAudiences().clear();
         proxy1.getAudiences().add("bar");
         result = fn.apply(prc);
-        Assert.assertTrue(result.getSecond().isEmpty());
+        final Set<String> second = result.getSecond();
+        assert second!=null;
+
+        Assert.assertTrue(second.isEmpty());
         Assert.assertEquals(result.getFirst(), Integer.valueOf(0));
     }
 
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertionTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertionTest.java
index 712cc1dce..9a2704c00 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertionTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAttributeStatementToAssertionTest.java
@@ -41,6 +41,7 @@ import net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTrans
 import net.shibboleth.idp.saml.attribute.transcoding.SAML2AttributeTranscoder;
 import net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2StringAttributeTranscoder;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.testing.MockApplicationContext;
 import net.shibboleth.shared.testing.MockReloadableService;
@@ -48,6 +49,7 @@ import net.shibboleth.shared.testing.MockReloadableService;
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.schema.impl.XSStringImpl;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml2.core.Assertion;
@@ -175,7 +177,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         prc.setOutboundMessageContext(null);
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
@@ -200,7 +204,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      */
     @Test public void testNoAttributes() throws Exception {
         final AttributeContext attribCtx = new AttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         Event result = action.execute(rc);
@@ -240,7 +246,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
 
         final AttributeContext attribCtx = new AttributeContext();
         attribCtx.setIdPAttributes(Arrays.asList(attribute));
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setIgnoringUnencodableAttributes(true);
         action.initialize();
@@ -270,7 +278,7 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
         rule.put(SAML2AttributeTranscoder.PROP_NAME, MY_NAME_1);
         rule.put(SAML2AttributeTranscoder.PROP_NAME_FORMAT, MY_NAMESPACE);
         
-        localregistry.setTranscoderRegistry(Collections.singletonList(new TranscodingRule(rule)));
+        localregistry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(rule)));
         localregistry.setApplicationContext(new MockApplicationContext());
         localregistry.initialize();
         
@@ -281,7 +289,9 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
 
         final AttributeContext attribCtx = new AttributeContext();
         attribCtx.setIdPAttributes(Arrays.asList(attribute));
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setIgnoringUnencodableAttributes(false);
         action.initialize();
@@ -296,19 +306,25 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      * @throws Exception if something goes wrong
      */
     @Test public void testAddedAttributeStatement() throws Exception {
-
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        Response response = (Response) omc.getMessage();
+        assert response != null;
+        response.getAssertions().add(
                 SAML2ActionTestingSupport.buildAssertion());
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.setStatementInOwnAssertion(true);
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        response = (Response) omc.getMessage();
+        assert response != null;
         Assert.assertEquals(response.getAssertions().size(), 2);
 
         for (final Assertion assertion : response.getAssertions()) {
@@ -328,17 +344,24 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      * @throws Exception if something goes wrong
      */
     @Test public void testAssertionInResponse() throws Exception {
-        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        Response response = (Response) omc.getMessage();
+        assert response != null;
+        response.getAssertions().add(
                 SAML2ActionTestingSupport.buildAssertion());
 
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        response = (Response) omc.getMessage();
+        assert response != null;
         Assert.assertEquals(response.getAssertions().size(), 1);
 
         final Assertion assertion = response.getAssertions().get(0);
@@ -357,13 +380,17 @@ public class AddAttributeStatementToAssertionTest extends OpenSAMLInitBaseTestCa
      */
     @Test public void testNoAssertionInResponse() throws Exception {
         final AttributeContext attribCtx = buildAttributeContext();
-        prc.getSubcontext(RelyingPartyContext.class).addSubcontext(attribCtx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.addSubcontext(attribCtx);
 
         action.initialize();
         final Event result = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(result);
-
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final Response response = (Response) omc.getMessage();
+        assert response != null;
         Assert.assertEquals(response.getAssertions().size(), 1);
 
         final Assertion assertion = response.getAssertions().get(0);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnRequestTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnRequestTest.java
index 1c2fc3e24..8df4f3f5c 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnRequestTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnRequestTest.java
@@ -59,6 +59,7 @@ import org.opensaml.saml.saml2.core.IDPEntry;
 import org.opensaml.saml.saml2.core.NameIDPolicy;
 import org.opensaml.saml.saml2.core.NameIDType;
 import org.opensaml.saml.saml2.core.RequestedAuthnContext;
+import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.core.Scoping;
 import org.opensaml.saml.saml2.metadata.RequestedAttribute;
 import org.opensaml.xmlsec.config.BasicXMLSecurityConfiguration;
@@ -97,7 +98,9 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         rp.initialize();
         rpc.setConfiguration(rp);
         rpc.setProfileConfig(new BrowserSSOProfileConfiguration());
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setSecurityConfiguration(new BasicXMLSecurityConfiguration());
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setSecurityConfiguration(new BasicXMLSecurityConfiguration());
         
         action = new AddAuthnRequest();
         action.setProfileContextLookupStrategy(
@@ -127,7 +130,9 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
 
     /** Test that the action errors out properly if there is a message there. */
     @Test public void testExistingMessage() {
-        prc2.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        omc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertEvent(event, EventIds.INVALID_MSG_CTX);
@@ -137,11 +142,14 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
     @Test public void testSimple() {
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         assertEquals(request.getIssuer().getValue(), ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         assertFalse(request.isForceAuthn());
         assertFalse(request.isPassive());
@@ -167,35 +175,47 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         
         Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         assertEquals(request.getIssuer().getValue(), ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         assertTrue(request.isForceAuthn());
         assertTrue(request.isPassive());
         
-        prc2.getOutboundMessageContext().setMessage(null);
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setForceAuthn(false);
+        omc.setMessage(null);
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setForceAuthn(false);
 
         event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        assertFalse(((AuthnRequest) prc2.getOutboundMessageContext().getMessage()).isForceAuthn());
+        final AuthnRequest ar =(AuthnRequest) omc.getMessage();
+        assert ar!=null;
+        assertFalse(ar.isForceAuthn());
     }
 
     /** Test that the action works with a NameID format set. */
     @Test public void testNameIDFormat() {
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setNameIDFormatPrecedence(
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setNameIDFormatPrecedence(
                 CollectionSupport.listOf(NameIDType.EMAIL, NameIDType.KERBEROS));
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final NameIDPolicy nid = request.getNameIDPolicy();
         assertNotNull(nid);
         assertEquals(nid.getFormat(), NameIDType.EMAIL);
@@ -204,15 +224,20 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
 
     /** Test that the action works with SPNameQualifier set. */
     @Test public void testSPNameQualifier() {
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setSPNameQualifier(ActionTestingSupport.INBOUND_MSG_ISSUER);
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setSPNameQualifier(ActionTestingSupport.INBOUND_MSG_ISSUER);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final NameIDPolicy nid = request.getNameIDPolicy();
         assertNotNull(nid);
         assertEquals(nid.getSPNameQualifier(), ActionTestingSupport.INBOUND_MSG_ISSUER);
@@ -220,15 +245,21 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
 
     /** Test that the action works with AttributeConsumingrServiceIndex set. */
     @Test public void testAttributeIndex() {
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setAttributeIndex(42);
+        
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setAttributeIndex(42);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         assertEquals(request.getAttributeConsumingServiceIndex(), 42);
     }
 
@@ -245,15 +276,20 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         attr2.setNameFormat(Attribute.URI_REFERENCE);
         attr2.setName("https://attr2.example.org");
 
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setRequestedAttributes(CollectionSupport.listOf(attr1, attr2));
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setRequestedAttributes(CollectionSupport.listOf(attr1, attr2));
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         assertNotNull(request.getExtensions());
         assertEquals(request.getExtensions().getUnknownXMLObjects(RequestedAttributes.DEFAULT_ELEMENT_NAME).size(), 1);
         final RequestedAttributes extension =
@@ -269,10 +305,13 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final Scoping scoping = request.getScoping();
         assertNotNull(scoping);
         assertNull(scoping.getProxyCount());
@@ -295,10 +334,13 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final Scoping scoping = request.getScoping();
         assertNotNull(scoping);
         assertNull(scoping.getIDPList());
@@ -313,10 +355,13 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final Scoping scoping = request.getScoping();
         assertNotNull(scoping);
         assertNull(scoping.getIDPList());
@@ -330,11 +375,13 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        final AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        final AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         final Scoping scoping = request.getScoping();
         assertNotNull(scoping);
         assertNull(scoping.getIDPList());
@@ -344,7 +391,7 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
 
     /** Test that the action works for RequestedAuthnContext. */
     @Test public void testAuthnContext() {
-        final RequestedPrincipalContext reqctx = ac.getSubcontext(RequestedPrincipalContext.class, true);
+        final RequestedPrincipalContext reqctx = ac.getOrCreateSubcontext(RequestedPrincipalContext.class);
         reqctx.setOperator("exact");
         reqctx.setRequestedPrincipals(
                 Arrays.asList(new AuthnContextClassRefPrincipal(AuthnContext.KERBEROS_AUTHN_CTX),
@@ -354,30 +401,34 @@ public class AddAuthnRequestTest extends OpenSAMLInitBaseTestCase {
         Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        assertNotNull(prc2.getOutboundMessageContext().getMessage());
-        assertTrue(prc2.getOutboundMessageContext().getMessage() instanceof AuthnRequest);
+        final MessageContext omc = prc2.getOutboundMessageContext();
+        assert omc!=null;
+        assertNotNull(omc.getMessage());
+        assertTrue(omc.getMessage() instanceof AuthnRequest);
 
-        AuthnRequest request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        AuthnRequest request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         RequestedAuthnContext rac = request.getRequestedAuthnContext();
-        assertNotNull(rac);
+        assert rac!=null;
         assertEquals(rac.getComparison(), AuthnContextComparisonTypeEnumeration.EXACT);
         assertEquals(rac.getAuthnContextClassRefs().size(), 2);
         assertEquals(rac.getAuthnContextClassRefs().get(0).getURI(), AuthnContext.KERBEROS_AUTHN_CTX);
         assertEquals(rac.getAuthnContextClassRefs().get(1).getURI(), AuthnContext.X509_AUTHN_CTX);
-
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setAuthnContextComparison(
-                AuthnContextComparisonTypeEnumeration.EXACT);
-        ((BrowserSSOProfileConfiguration) rpc.getProfileConfig()).setDefaultAuthenticationMethods(
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration) rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setAuthnContextComparison(AuthnContextComparisonTypeEnumeration.EXACT);
+        bspc.setDefaultAuthenticationMethods(
                 Arrays.asList(new AuthnContextClassRefPrincipal(AuthnContext.KERBEROS_AUTHN_CTX),
                         new AuthnContextClassRefPrincipal(AuthnContext.X509_AUTHN_CTX)));
 
-        prc2.getOutboundMessageContext().setMessage(null);
+        omc.setMessage(null);
         event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        request = (AuthnRequest) prc2.getOutboundMessageContext().getMessage();
+        request = (AuthnRequest) omc.getMessage();
+        assert request!=null;
         rac = request.getRequestedAuthnContext();
-        assertNotNull(rac);
+        assert rac != null;
         assertEquals(rac.getComparison(), AuthnContextComparisonTypeEnumeration.EXACT);
         assertEquals(rac.getAuthnContextClassRefs().size(), 2);
         assertEquals(rac.getAuthnContextClassRefs().get(0).getURI(), AuthnContext.KERBEROS_AUTHN_CTX);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnStatementToAssertionTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnStatementToAssertionTest.java
index d3a1584c8..b63b61471 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnStatementToAssertionTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/AddAuthnStatementToAssertionTest.java
@@ -24,6 +24,7 @@ import java.util.List;
 import javax.security.auth.Subject;
 
 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.saml.saml2.core.Assertion;
@@ -94,7 +95,7 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
     /** Test that the action errors out properly if there is no context. */
     @Test public void testNoContext() {
         prc.setOutboundMessageContext(null);
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", new AuthnContextClassRefPrincipal("Test")));
 
         final Event event = action.execute(rc);
@@ -132,19 +133,27 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
         fd.setResultSerializer(serializer);
         fd.initialize();
         
-        prc.getSubcontext(AuthenticationContext.class, true).getAvailableFlows().put("Test", fd);
-        prc.getSubcontext(AuthenticationContext.class).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).getAvailableFlows().put("Test", fd);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac !=null;
+        ac.setAuthenticationResult(
                 new AuthenticationResult("Test", new AuthnContextClassRefPrincipal("Test")));
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr("127.0.0.1");
+        final MockHttpServletRequest req = ((MockHttpServletRequest) action.getHttpServletRequest());
+        assert req!=null;
+        req.setRemoteAddr("127.0.0.1");
 
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
 
-        Assert.assertNotNull(prc.getOutboundMessageContext().getMessage());
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage() instanceof Response);
+        Assert.assertNotNull(omc.getMessage());
+        Assert.assertTrue(omc.getMessage() instanceof Response);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         Assert.assertEquals(response.getAssertions().size(), 1);
         Assert.assertNotNull(response.getAssertions().get(0));
 
@@ -172,15 +181,21 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
         final BrowserSSOProfileConfiguration ssoConfig = new BrowserSSOProfileConfiguration();
         ssoConfig.setMaximumSPSessionLifetime(Duration.ofHours(1));
         ssoConfig.setSecurityConfiguration(new BasicXMLSecurityConfiguration());
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(ssoConfig);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setProfileConfig(ssoConfig);
         
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", new AuthnContextClassRefPrincipal("Test")));
 
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         final Assertion assertion = response.getAssertions().get(0);
         final AuthnStatement authenticationStatement = assertion.getAuthnStatements().get(0);
         Assert.assertNotNull(authenticationStatement.getSessionNotOnOrAfter());
@@ -191,19 +206,25 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new AuthnContextClassRefPrincipal("Foo"));
         subject.getPrincipals().add(new AuthnContextClassRefPrincipal("Bar"));
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", subject));
         final RequestedPrincipalContext requested = new RequestedPrincipalContext();
         requested.setMatchingPrincipal(new AuthnContextClassRefPrincipal("Bar"));
-        prc.getSubcontext(AuthenticationContext.class, false).addSubcontext(requested);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac !=null;
+        ac.addSubcontext(requested);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        Assert.assertNotNull(prc.getOutboundMessageContext().getMessage());
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage() instanceof Response);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+
+        Assert.assertNotNull(omc.getMessage());
+        Assert.assertTrue(omc.getMessage() instanceof Response);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         Assert.assertEquals(response.getAssertions().size(), 1);
         Assert.assertNotNull(response.getAssertions().get(0));
 
@@ -220,13 +241,16 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void testAuthenticatingAuthorities() {
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", new ProxyAuthenticationPrincipal(List.of("foo", "bar", "baz"))));
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         final Assertion assertion = response.getAssertions().get(0);
         final AuthnStatement authenticationStatement = assertion.getAuthnStatements().get(0);
         final AuthnContext authnContext = authenticationStatement.getAuthnContext();
@@ -241,15 +265,20 @@ public class AddAuthnStatementToAssertionTest extends OpenSAMLInitBaseTestCase {
         final BrowserSSOProfileConfiguration ssoConfig = new BrowserSSOProfileConfiguration();
         ssoConfig.setSuppressAuthenticatingAuthority(true);
         ssoConfig.setSecurityConfiguration(new BasicXMLSecurityConfiguration());
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(ssoConfig);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setProfileConfig(ssoConfig);
 
-        prc.getSubcontext(AuthenticationContext.class, true).setAuthenticationResult(
+        prc.getOrCreateSubcontext(AuthenticationContext.class).setAuthenticationResult(
                 new AuthenticationResult("Test", new ProxyAuthenticationPrincipal(List.of("foo", "bar", "baz"))));
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
+        final MessageContext omc = prc.getOutboundMessageContext();
+        assert omc!=null;
 
-        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) omc.getMessage();
+        assert response!=null;
         final Assertion assertion = response.getAssertions().get(0);
         final AuthnStatement authenticationStatement = assertion.getAuthnStatements().get(0);
         final AuthnContext authnContext = authenticationStatement.getAuthnContext();
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/EnforceDisallowedSSOFeaturesTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/EnforceDisallowedSSOFeaturesTest.java
index f3a8522a4..4197cc08f 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/EnforceDisallowedSSOFeaturesTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/EnforceDisallowedSSOFeaturesTest.java
@@ -28,6 +28,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.core.NameIDPolicy;
@@ -71,15 +72,21 @@ public class EnforceDisallowedSSOFeaturesTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testGeneric() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
     }
 
     @Test public void testForceAuthn() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setForceAuthn(true);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setForceAuthn(true);
 
         Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -88,18 +95,24 @@ public class EnforceDisallowedSSOFeaturesTest extends OpenSAMLInitBaseTestCase {
         event = action.execute(src);
         ActionTestingSupport.assertEvent(event, EventIds.ACCESS_DENIED);
         
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setForceAuthn(false);
+        ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setForceAuthn(false);
         event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
     }
 
     @Test public void testFormat() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final NameIDPolicy policy = nidBuilder.buildObject();
         policy.setFormat(NameIDType.EMAIL);
         
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setNameIDPolicy(policy);
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setNameIDPolicy(policy);
 
         Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -122,12 +135,16 @@ public class EnforceDisallowedSSOFeaturesTest extends OpenSAMLInitBaseTestCase {
 }
 
     @Test public void testSPNameQualifier() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final NameIDPolicy policy = nidBuilder.buildObject();
         policy.setSPNameQualifier(ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setNameIDPolicy(policy);
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setNameIDPolicy(policy);
 
         Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributesTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributesTest.java
index 7f5e921c8..65c32dc8b 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributesTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributesTest.java
@@ -116,8 +116,8 @@ public class FilterByQueriedAttributesTest extends XMLObjectBaseTestCase {
     }
 
     @Test public void noValues() {
-        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class,true);
-        final AttributeContext ac = rpc.getSubcontext(AttributeContext.class,true);
+        final RelyingPartyContext rpc = prc.getOrCreateSubcontext(RelyingPartyContext.class);
+        final AttributeContext ac = rpc.getOrCreateSubcontext(AttributeContext.class);
         final List<IdPAttribute> attributes = List.of(
                 new IdPAttribute("eduPersonAssurance"),
                 new IdPAttribute("flooby"),
@@ -130,8 +130,8 @@ public class FilterByQueriedAttributesTest extends XMLObjectBaseTestCase {
     }
     
     @Test public void values() {
-        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class,true);
-        final AttributeContext ac = rpc.getSubcontext(AttributeContext.class,true);
+        final RelyingPartyContext rpc = prc.getOrCreateSubcontext(RelyingPartyContext.class);
+        final AttributeContext ac = rpc.getOrCreateSubcontext(AttributeContext.class);
         final IdPAttribute eduPersonAssurance = new IdPAttribute("eduPersonAssurance");
         eduPersonAssurance.setValues(List.of(new StringAttributeValue("green-blue"))); // not turquoise
         final IdPAttribute flooby = new IdPAttribute("flooby");
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
index 00c14dbae..25b0c09f4 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/IdPInitiatedSSORequestMessageDecoderTest.java
@@ -82,9 +82,9 @@ public class IdPInitiatedSSORequestMessageDecoderTest extends XMLObjectBaseTestC
         decoder.decode();
         
         final MessageContext messageContext = decoder.getMessageContext();
-        Assert.assertNotNull(messageContext);
+        assert messageContext!=null;
         AuthnRequest authnRequest = (AuthnRequest) messageContext.getMessage();
-        Assert.assertNotNull(authnRequest);
+        assert authnRequest!=null;
         
         Assert.assertEquals(authnRequest.getIssuer().getValue(), entityId, "Incorrect decoded message entityId value");
         Assert.assertEquals(authnRequest.getAssertionConsumerServiceURL(), acsUrl, "Incorrect decoded message ACS URL value");
@@ -92,16 +92,16 @@ public class IdPInitiatedSSORequestMessageDecoderTest extends XMLObjectBaseTestC
                 "Incorrect decoded message issue instant value");
         Assert.assertEquals(authnRequest.getID(), messageID, "Incorrect decoded message ID value");
         
-        Assert.assertEquals(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).getEntityId(), entityId,
+        Assert.assertEquals(messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class).getEntityId(), entityId,
                 "Incorrect decoded entityId value in peer context");
         
-        SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
+        SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
         Assert.assertEquals(bindingContext.getRelayState(), relayState,
                 "Incorrect decoded relay state value in binding context");
         Assert.assertEquals(bindingContext.getBindingUri(), "urn:mace:shibboleth:2.0:profiles:AuthnRequest",
                 "Incorrect binding URI in binding context");
         
-        SAMLMessageInfoContext msgInfoContext = messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        SAMLMessageInfoContext msgInfoContext = messageContext.getOrCreateSubcontext(SAMLMessageInfoContext.class);
         Assert.assertEquals(msgInfoContext.getMessageIssueInstant(), time.truncatedTo(ChronoUnit.SECONDS),
                 "Incorrect decoded issue instant value in message info context");
         Assert.assertEquals(msgInfoContext.getMessageId(), messageID,
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParametersTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParametersTest.java
index c0dcb0b99..25568e072 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParametersTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParametersTest.java
@@ -19,12 +19,17 @@ package net.shibboleth.idp.saml.saml2.profile.impl;
 
 import java.util.Collections;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import net.shibboleth.idp.profile.IdPEventIds;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.saml2.profile.config.impl.BrowserSSOProfileConfiguration;
+import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
@@ -81,7 +86,9 @@ public class PopulateEncryptionParametersTest extends OpenSAMLInitBaseTestCase {
         action.setEncryptionParametersResolver(new MockResolver(false));
         action.initialize();
         
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(null);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setProfileConfig(null);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
@@ -91,7 +98,9 @@ public class PopulateEncryptionParametersTest extends OpenSAMLInitBaseTestCase {
         action.setEncryptionParametersResolver(new MockResolver(false));
         action.initialize();
         
-        prc.getSubcontext(RelyingPartyContext.class).setProfileConfig(
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        rpCtx.setProfileConfig(
                 new net.shibboleth.idp.saml.saml1.profile.config.impl.BrowserSSOProfileConfiguration());
         
         final Event event = action.execute(rc);
@@ -112,9 +121,10 @@ public class PopulateEncryptionParametersTest extends OpenSAMLInitBaseTestCase {
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
-        
-        final EncryptionContext ctx = prc.getSubcontext(RelyingPartyContext.class).getSubcontext(EncryptionContext.class); 
-        Assert.assertNotNull(ctx);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;
+        final EncryptionContext ctx = rpCtx.getSubcontext(EncryptionContext.class); 
+        assert ctx!=null;
         Assert.assertNotNull(ctx.getAssertionEncryptionParameters());
         Assert.assertNull(ctx.getIdentifierEncryptionParameters());
         Assert.assertNull(ctx.getAttributeEncryptionParameters());
@@ -124,14 +134,17 @@ public class PopulateEncryptionParametersTest extends OpenSAMLInitBaseTestCase {
         action.setEncryptionParametersResolver(new MockResolver(true));
         action.initialize();
         
-        ((BrowserSSOProfileConfiguration) prc.getSubcontext(
-                RelyingPartyContext.class).getProfileConfig()).setEncryptionOptional(true);
+        final RelyingPartyContext rpCtx = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpCtx!=null;        
+        final BrowserSSOProfileConfiguration rpConf = (BrowserSSOProfileConfiguration) rpCtx.getProfileConfig();
+        assert rpConf!=null;
+        rpConf.setEncryptionOptional(true);
         
         final Event event = action.execute(rc);
         ActionTestingSupport.assertProceedEvent(event);
         
-        final EncryptionContext ctx = prc.getSubcontext(RelyingPartyContext.class).getSubcontext(EncryptionContext.class); 
-        Assert.assertNotNull(ctx);
+        final EncryptionContext ctx = rpCtx.getSubcontext(EncryptionContext.class); 
+        assert ctx!=null;
         Assert.assertNull(ctx.getAssertionEncryptionParameters());
         Assert.assertNull(ctx.getIdentifierEncryptionParameters());
         Assert.assertNull(ctx.getAttributeEncryptionParameters());
@@ -147,17 +160,17 @@ public class PopulateEncryptionParametersTest extends OpenSAMLInitBaseTestCase {
         
         /** {@inheritDoc} */
         @Override
-        public Iterable<EncryptionParameters> resolve(CriteriaSet criteria) throws ResolverException {
-            return Collections.singletonList(resolveSingle(criteria));
+        public @Nonnull Iterable<EncryptionParameters> resolve(@Nullable CriteriaSet criteria) throws ResolverException {
+            return CollectionSupport.singletonList(resolveSingle(criteria));
         }
 
         /** {@inheritDoc} */
         @Override
-        public EncryptionParameters resolveSingle(CriteriaSet criteria) throws ResolverException {
+        public EncryptionParameters resolveSingle(@Nullable CriteriaSet criteria) throws ResolverException {
             if (throwException) {
                 throw new ResolverException();
             }
-            
+            assert criteria!=null;
             Constraint.isNotNull(criteria.get(EncryptionConfigurationCriterion.class), "Criterion was null");
             return new EncryptionParameters();
         }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PreProcessLogoutMessageTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PreProcessLogoutMessageTest.java
index c0371c750..a0819b652 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PreProcessLogoutMessageTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/PreProcessLogoutMessageTest.java
@@ -24,10 +24,12 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.ext.saml2aslo.Asynchronous;
+import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.core.Extensions;
 import org.opensaml.saml.saml2.core.LogoutRequest;
 import org.springframework.webflow.execution.Event;
@@ -60,19 +62,25 @@ public class PreProcessLogoutMessageTest extends OpenSAMLInitBaseTestCase {
 
     @Test public void testLogoutResponse() {
         //final NameID nameId = SAML2ActionTestingSupport.buildNameID("jdoe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutResponse());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutResponse());
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, PreProcessLogoutMessage.IS_LOGOUT_RESPONSE);
     }
     
     @Test public void testLogoutRequest() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
     }
 
     @Test public void testAssumeAsyncLogoutRequest() throws ComponentInitializationException {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
         
         action = new PreProcessLogoutMessage();
         action.setAssumeAsynchronousLogout(true);
@@ -83,7 +91,9 @@ public class PreProcessLogoutMessageTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testAsyncLogoutRequest() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
         
         final SAMLObjectBuilder<Extensions> extsBuilder = (SAMLObjectBuilder<Extensions>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<Extensions>getBuilderOrThrow(
@@ -91,9 +101,10 @@ public class PreProcessLogoutMessageTest extends OpenSAMLInitBaseTestCase {
         final SAMLObjectBuilder<Asynchronous> asyncBuilder = (SAMLObjectBuilder<Asynchronous>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<Asynchronous>getBuilderOrThrow(
                         Asynchronous.DEFAULT_ELEMENT_NAME);
-        
-        ((LogoutRequest) prc.getInboundMessageContext().getMessage()).setExtensions(extsBuilder.buildObject());
-        ((LogoutRequest) prc.getInboundMessageContext().getMessage()).getExtensions().getUnknownXMLObjects().add(
+        final LogoutRequest lr = (LogoutRequest)imc.getMessage();
+        assert lr!=null;
+        lr.setExtensions(extsBuilder.buildObject());
+        lr.getExtensions().getUnknownXMLObjects().add(
                 asyncBuilder.buildObject());
 
         final Event event = action.execute(src);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessAssertionsForAuthenticationTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessAssertionsForAuthenticationTest.java
index 20f0f0112..9d2ccb1fc 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessAssertionsForAuthenticationTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessAssertionsForAuthenticationTest.java
@@ -25,6 +25,7 @@ import java.util.function.Function;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecoder;
 import org.opensaml.profile.action.ProfileAction;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -35,6 +36,7 @@ import org.opensaml.saml.common.assertion.ValidationProcessingData;
 import org.opensaml.saml.common.assertion.ValidationResult;
 import org.opensaml.saml.saml2.assertion.SAML2AssertionValidationParameters;
 import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.AuthnStatement;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.core.Subject;
 import org.opensaml.saml.saml2.core.SubjectConfirmation;
@@ -50,6 +52,7 @@ import com.google.common.base.Predicates;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.PredicateSupport;
 import net.shibboleth.shared.testing.ConstantSupplier;
 
 /**
@@ -69,6 +72,8 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
     private MockHttpServletRequest httpRequest;
     private MockHttpServletResponse httpResponse;
     
+    private Object nullObj;
+    
     @BeforeMethod
     public void beforeMethod() {
         httpRequest = new MockHttpServletRequest();
@@ -85,7 +90,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         
         prc = new RequestContextBuilder().buildProfileRequestContext();
         
-        final AuthenticationContext authnContext = prc.getSubcontext(AuthenticationContext.class, true);
+        final AuthenticationContext authnContext = prc.getOrCreateSubcontext(AuthenticationContext.class);
         samlAuthnContext = new SAMLAuthnContext(new MockProfileAction(), new MockMessageDecoderFunction());
         authnContext.addSubcontext(samlAuthnContext);
         authnContext.addSubcontext(prcInner);
@@ -256,7 +261,9 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
     
     @Test
     public void testNoResponse() throws ComponentInitializationException {
-        prcInner.getInboundMessageContext().setMessage(null);
+        final MessageContext imc = prcInner.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(null);
         
         action.initialize();
         
@@ -283,7 +290,9 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        prc.getSubcontext(AuthenticationContext.class).removeSubcontext(SAMLAuthnContext.class);
+        AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac!=null;
+        ac.removeSubcontext(SAMLAuthnContext.class);
         
         action.initialize();
         
@@ -344,7 +353,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        action.setActivationCondition(Predicates.alwaysFalse());
+        action.setActivationCondition(PredicateSupport.alwaysFalse());
         
         action.initialize();
         
@@ -360,7 +369,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        action.setAuthnAssertionSelectionStrategy(null);
+        action.setAuthnAssertionSelectionStrategy((Function<List<Assertion>, Assertion>) nullObj);
         
         action.initialize();
     }
@@ -370,7 +379,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        action.setAuthnStatementSelectionStrategy(null);
+        action.setAuthnStatementSelectionStrategy((Function<Assertion, AuthnStatement>) nullObj);
         
         action.initialize();
     }
@@ -380,7 +389,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        action.setResponseResolver(null);
+        action.setResponseResolver((Function<ProfileRequestContext, Response>) nullObj);
         
         action.initialize();
     }
@@ -390,7 +399,7 @@ public class ProcessAssertionsForAuthenticationTest extends OpenSAMLInitBaseTest
         final Assertion assertion1 = buildAssertion(ValidationResult.VALID);
         samlResponse.getAssertions().add(assertion1);
         
-        action.setSAMLAuthnContextLookupStrategy(null);
+        action.setSAMLAuthnContextLookupStrategy((Function<ProfileRequestContext, SAMLAuthnContext>) nullObj);
         
         action.initialize();
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessLogoutRequestTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessLogoutRequestTest.java
index 80f72c075..836d6979f 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessLogoutRequestTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessLogoutRequestTest.java
@@ -24,6 +24,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import jakarta.servlet.http.Cookie;
 
 import net.shibboleth.idp.authn.context.SubjectContext;
@@ -49,6 +51,7 @@ import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.shared.servlet.impl.HttpServletRequestResponseContext;
 
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
@@ -78,6 +81,12 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
     
     private ProcessLogoutRequest action;
     
+    @Nonnull private MockHttpServletRequest getMockHttpServletRequest() {
+        final MockHttpServletRequest result = (MockHttpServletRequest) HttpServletRequestResponseContext.getRequest();
+        assert result  != null;
+        return result;
+    }
+    
     @BeforeMethod public void setUpAction() throws ComponentInitializationException {
         sessionIndexBuilder = (SAMLObjectBuilder<SessionIndex>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<SessionIndex>getBuilderOrThrow(
@@ -117,7 +126,9 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
     }
 
     @Test public void testNoNameID() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(null));
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, EventIds.INVALID_MESSAGE);
@@ -128,7 +139,9 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
 
     @Test public void testNoSession() {
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("jdoe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.SESSION_NOT_FOUND);
@@ -141,10 +154,12 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final Cookie cookie = createSession("joe");
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
         
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, SAMLEventIds.SESSION_NOT_FOUND);
@@ -159,16 +174,18 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
         nameId.setSPNameQualifier("affiliation");
         final NameID nameIdForSession = SAML2ActionTestingSupport.buildNameID("joe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameIdForSession, "index", "foo", false));
                 
@@ -178,7 +195,9 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         Assert.assertNull(prc.getSubcontext(SubjectContext.class));
         Assert.assertNull(prc.getSubcontext(LogoutContext.class));
         
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
 
     @Test public void testDefaultedRequestQualifiers() throws SessionException, ResolverException {
@@ -187,16 +206,18 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
         nameId.setNameQualifier(ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         nameId.setSPNameQualifier(ActionTestingSupport.INBOUND_MSG_ISSUER);
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
         
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         final NameID nameIdForSession = SAML2ActionTestingSupport.buildNameID("joe");
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameIdForSession, "index", "foo", false));
@@ -204,36 +225,42 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
-        Assert.assertNotNull(sessionCtx);
-        Assert.assertEquals(session.getId(), sessionCtx.getIdPSession().getId());
+        assert sessionCtx!=null;
+        final IdPSession idpSession=sessionCtx.getIdPSession();
+        assert idpSession!=null;
+        Assert.assertEquals(session.getId(), idpSession.getId());
         
         final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class);
-        Assert.assertNotNull(logoutCtx);
+        assert logoutCtx!=null;
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 1);
         Assert.assertSame(logoutCtx.getIdPSessions().iterator().next(), sessionCtx.getIdPSession());
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 0);
 
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
 
     @Test public void testDefaultedSessionQualifiers() throws SessionException, ResolverException {
         final Cookie cookie = createSession("joe");
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
         
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         final NameID nameIdForSession = SAML2ActionTestingSupport.buildNameID("joe");
         nameIdForSession.setNameQualifier(ActionTestingSupport.OUTBOUND_MSG_ISSUER);
         nameIdForSession.setSPNameQualifier(ActionTestingSupport.INBOUND_MSG_ISSUER);
@@ -243,56 +270,66 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
-        Assert.assertNotNull(sessionCtx);
-        Assert.assertEquals(session.getId(), sessionCtx.getIdPSession().getId());
+        assert sessionCtx!=null;
+        final IdPSession idpSession=sessionCtx.getIdPSession();
+        assert idpSession!=null;
+        Assert.assertEquals(session.getId(), idpSession.getId());
         
         final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class);
-        Assert.assertNotNull(logoutCtx);
+        assert logoutCtx!=null;
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 1);
         Assert.assertSame(logoutCtx.getIdPSessions().iterator().next(), sessionCtx.getIdPSession());
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 0);
         
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
     
     @Test public void testSessionOneSPSession() throws SessionException, ResolverException {
         final Cookie cookie = createSession("joe");
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index", "foo", false));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
-        Assert.assertNotNull(sessionCtx);
-        Assert.assertEquals(session.getId(), sessionCtx.getIdPSession().getId());
+        assert sessionCtx!=null;
+        final IdPSession idpSession=sessionCtx.getIdPSession();
+        assert idpSession!=null;
+        Assert.assertEquals(session.getId(), idpSession.getId());
         
         final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class);
-        Assert.assertNotNull(logoutCtx);
+        assert logoutCtx!=null;
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 1);
         Assert.assertSame(logoutCtx.getIdPSessions().iterator().next(), sessionCtx.getIdPSession());
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 0);
         
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
     
     @Test public void testSessionTwoSPSessions() throws SessionException, ResolverException {
@@ -300,16 +337,18 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
         final NameID nameId2 = SAML2ActionTestingSupport.buildNameID("joe2");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index", "foo", false));
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER + "/2", creation, expiration,
@@ -318,15 +357,16 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
-        Assert.assertNotNull(sessionCtx);
-        Assert.assertEquals(session.getId(), sessionCtx.getIdPSession().getId());
+        assert sessionCtx!=null;
+        final IdPSession idpSession=sessionCtx.getIdPSession();
+        assert idpSession!=null;
+        Assert.assertEquals(session.getId(), idpSession.getId());
         
-        final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class, true);
-        Assert.assertNotNull(logoutCtx);
+        final LogoutContext logoutCtx = prc.getOrCreateSubcontext(LogoutContext.class);
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 1);
         Assert.assertSame(logoutCtx.getIdPSessions().iterator().next(), sessionCtx.getIdPSession());
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 1);
@@ -338,7 +378,9 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         Assert.assertTrue(SAML2ObjectSupport.areNameIDsEquivalent(nameId2, sp.getNameID()));
         Assert.assertEquals(sp.getSessionIndex(), "index2");
         
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
 
     @Test public void testTwoSPSessionsWrongRequester() throws SessionException, ResolverException {
@@ -346,16 +388,18 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
         final NameID nameId2 = SAML2ActionTestingSupport.buildNameID("joe2");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId2));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId2));
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index", "foo", false));
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER + "/2", creation, expiration,
@@ -367,7 +411,9 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         Assert.assertNull(prc.getSubcontext(SubjectContext.class));
         Assert.assertNull(prc.getSubcontext(LogoutContext.class));
         
-        sessionManager.destroySession(session.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
     }
 
     @Test public void testTwoSessionsOneMatch() throws SessionException, ResolverException {
@@ -377,46 +423,57 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
         final SessionIndex sessionIndex = sessionIndexBuilder.buildObject();
         sessionIndex.setValue("index");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
-        ((LogoutRequest) prc.getInboundMessageContext().getMessage()).getSessionIndexes().add(sessionIndex);
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final LogoutRequest lr = (LogoutRequest) imc.getMessage();
+        assert lr!= null;
+        lr.getSessionIndexes().add(sessionIndex);
 
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index", "foo", false));
         
         
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie2);
+        getMockHttpServletRequest().setCookies(cookie2);
         
         final IdPSession session2 = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session2);
+        assert session2!=null;
         session2.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index2", "foo", false));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
-        Assert.assertNotNull(sessionCtx);
-        Assert.assertEquals(session.getId(), sessionCtx.getIdPSession().getId());
+        assert sessionCtx!=null;
+        final IdPSession idpSession=sessionCtx.getIdPSession();
+        assert idpSession!=null;
+        Assert.assertEquals(session.getId(), idpSession.getId());
         
         final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class, false);
-        Assert.assertNotNull(logoutCtx);
+        assert logoutCtx!=null;
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 1);
         Assert.assertSame(logoutCtx.getIdPSessions().iterator().next(), sessionCtx.getIdPSession());
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 0);
         
-        sessionManager.destroySession(session.getId(), false);
-        sessionManager.destroySession(session2.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
+        final String id2 = session2.getId();
+        assert id2!=null;
+        sessionManager.destroySession(id, false);
+        sessionManager.destroySession(id2, false);
     }
 
     @Test public void testTwoSessions() throws SessionException, ResolverException {
@@ -424,43 +481,50 @@ public class ProcessLogoutRequestTest extends SessionManagerBaseTestCase {
         final Cookie cookie2 = createSession("joe");
 
         final NameID nameId = SAML2ActionTestingSupport.buildNameID("joe");
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildLogoutRequest(nameId));
 
         final Instant creation = Instant.now();
         final Instant expiration = creation.plusSeconds(3600);
 
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie);
+        getMockHttpServletRequest().setCookies(cookie);
         
         final IdPSession session = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session);
+        assert session!=null;;
         session.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index", "foo", false));
         
         
-        ((MockHttpServletRequest) HttpServletRequestResponseContext.getRequest()).setCookies(cookie2);
+        getMockHttpServletRequest().setCookies(cookie2);
         
         final IdPSession session2 = sessionManager.resolveSingle(new CriteriaSet(new HttpServletRequestCriterion()));
-        Assert.assertNotNull(session2);
+        assert session2!=null;
         session2.addSPSession(new SAML2SPSession(ActionTestingSupport.INBOUND_MSG_ISSUER, creation, expiration,
                 nameId, "index2", "foo", false));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectContext subjectCtx = prc.getSubcontext(SubjectContext.class);
-        Assert.assertNotNull(subjectCtx);
+        assert subjectCtx!=null;
         Assert.assertEquals(subjectCtx.getPrincipalName(), "joe");
         
         final SessionContext sessionCtx = prc.getSubcontext(SessionContext.class);
         Assert.assertNull(sessionCtx);
         
         final LogoutContext logoutCtx = prc.getSubcontext(LogoutContext.class);
-        Assert.assertNotNull(logoutCtx);
+        assert logoutCtx!=null;
         Assert.assertEquals(logoutCtx.getIdPSessions().size(), 2);
         Assert.assertEquals(logoutCtx.getSessionMap().size(), 0);
 
-        sessionManager.destroySession(session.getId(), false);
-        sessionManager.destroySession(session2.getId(), false);
+        final String id = session.getId();
+        assert id!=null;
+        sessionManager.destroySession(id, false);
+        final String id2 = session2.getId();
+        assert id2!=null;
+        sessionManager.destroySession(id, false);
+        sessionManager.destroySession(id2, false);
     }
     
 }
\ No newline at end of file
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContextTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContextTest.java
index 624b9be03..b0e8a7690 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContextTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/ProcessRequestedAuthnContextTest.java
@@ -32,6 +32,7 @@ import java.util.Collections;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.AuthnContext;
 import org.opensaml.saml.saml2.core.AuthnContextClassRef;
@@ -77,7 +78,7 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
         src = (MockRequestContext) new RequestContextBuilder().buildRequestContext();
         prc = (ProfileRequestContext) src.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
         ac = prc.getSubcontext(AuthenticationContext.class, true);
-        prc.getSubcontext(RelyingPartyContext.class, true).setProfileConfig(new BrowserSSOProfileConfiguration());
+        prc.getOrCreateSubcontext(RelyingPartyContext.class).setProfileConfig(new BrowserSSOProfileConfiguration());
         
         action = new ProcessRequestedAuthnContext();
         action.initialize();
@@ -89,7 +90,9 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testNoRAC() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -97,9 +100,14 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void testEmptyRef() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         rac.getAuthnContextClassRefs().add(ref);
         
@@ -109,15 +117,23 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testDisallowed() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.PASSWORD_AUTHN_CTX);
         rac.getAuthnContextClassRefs().add(ref);
         
-        ((BrowserSSOProfileConfiguration) prc.getSubcontext(RelyingPartyContext.class).getProfileConfig()).setDisallowedFeatures(
-                BrowserSSOProfileConfiguration.FEATURE_AUTHNCONTEXT);
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration)rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setDisallowedFeatures(BrowserSSOProfileConfiguration.FEATURE_AUTHNCONTEXT);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, EventIds.ACCESS_DENIED);
@@ -125,15 +141,22 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testDisallowedButIgnored() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.UNSPECIFIED_AUTHN_CTX);
         rac.getAuthnContextClassRefs().add(ref);
-        
-        ((BrowserSSOProfileConfiguration) prc.getSubcontext(RelyingPartyContext.class).getProfileConfig()).setDisallowedFeatures(
-                BrowserSSOProfileConfiguration.FEATURE_AUTHNCONTEXT);
+        final RelyingPartyContext rpc = prc.getSubcontext(RelyingPartyContext.class);
+        assert rpc!=null;
+        BrowserSSOProfileConfiguration bspc = (BrowserSSOProfileConfiguration)rpc.getProfileConfig();
+        assert bspc!=null;
+        bspc.setDisallowedFeatures(BrowserSSOProfileConfiguration.FEATURE_AUTHNCONTEXT);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -141,9 +164,14 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void testNoOperator() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.PPT_AUTHN_CTX);
         rac.getAuthnContextClassRefs().add(ref);
@@ -151,16 +179,21 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class); 
-        Assert.assertNotNull(rpc);
+        assert rpc!=null;
         Assert.assertEquals(rpc.getOperator(), AuthnContextComparisonTypeEnumeration.EXACT.toString());
         Assert.assertEquals(rpc.getRequestedPrincipals().size(), 1);
         Assert.assertEquals(rpc.getRequestedPrincipals().get(0).getName(), AuthnContext.PPT_AUTHN_CTX);
     }
 
     @Test public void testOperator() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         rac.setComparison(AuthnContextComparisonTypeEnumeration.MINIMUM);
         AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.PPT_AUTHN_CTX);
@@ -171,16 +204,21 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class); 
-        Assert.assertNotNull(rpc);
+        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class);
+        assert rpc!=null;
         Assert.assertEquals(rpc.getOperator(), AuthnContextComparisonTypeEnumeration.MINIMUM.toString());
         Assert.assertEquals(rpc.getRequestedPrincipals().size(), 2);
     }
 
     @Test public void testDecls() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         rac.setComparison(AuthnContextComparisonTypeEnumeration.MINIMUM);
         AuthnContextDeclRef ref = declBuilder.buildObject();
         ref.setURI(AuthnContext.PPT_AUTHN_CTX);
@@ -191,16 +229,20 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class); 
-        Assert.assertNotNull(rpc);
+        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class);
+        assert rpc!=null;
         Assert.assertEquals(rpc.getOperator(), AuthnContextComparisonTypeEnumeration.MINIMUM.toString());
         Assert.assertEquals(rpc.getRequestedPrincipals().size(), 2);
     }
 
     @Test public void testIgnore() {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.UNSPECIFIED_AUTHN_CTX);
         rac.getAuthnContextClassRefs().add(ref);
@@ -212,9 +254,14 @@ public class ProcessRequestedAuthnContextTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testIgnore2() throws ComponentInitializationException {
-        prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        imc.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         final RequestedAuthnContext rac = racBuilder.buildObject();
-        ((AuthnRequest) prc.getInboundMessageContext().getMessage()).setRequestedAuthnContext(rac);
+
+        final AuthnRequest ar = (AuthnRequest)imc.getMessage();
+        assert ar!=null;
+        ar.setRequestedAuthnContext(rac);
         final AuthnContextClassRef ref = classBuilder.buildObject();
         ref.setURI(AuthnContext.PPT_AUTHN_CTX);
         rac.getAuthnContextClassRefs().add(ref);
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SAML2ActionSupportTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SAML2ActionSupportTest.java
index 7ff43603e..916fd059e 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SAML2ActionSupportTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SAML2ActionSupportTest.java
@@ -19,7 +19,9 @@ package net.shibboleth.idp.saml.saml2.profile.impl;
 
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.profile.testing.ActionTestSupportAction;
+import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import java.util.function.Function;
@@ -31,6 +33,7 @@ import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.Conditions;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
+import org.opensaml.security.config.SecurityConfiguration;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -64,16 +67,22 @@ public class SAML2ActionSupportTest extends OpenSAMLInitBaseTestCase {
 
         ActionTestSupportAction action = new ActionTestSupportAction();
         RelyingPartyContext relyingPartyCtx = relyingPartyContextLookupStrategy.apply(profileRequestContext);
-
+        assert relyingPartyCtx!=null;
         Assert.assertEquals(response.getAssertions().size(), 0, "Expected zarro assertions before insert");
+        final ProfileConfiguration pc = relyingPartyCtx.getProfileConfig();
+        assert pc!=null;
+        final SecurityConfiguration sc = pc.getSecurityConfiguration(profileRequestContext);
+        assert sc!=null;
+        final RelyingPartyConfiguration rpConfig = relyingPartyCtx.getConfiguration();
+        assert rpConfig != null;
         Assertion assertion = SAML2ActionSupport.addAssertionToResponse(action, response,
-                relyingPartyCtx.getProfileConfig().getSecurityConfiguration(profileRequestContext).getIdGenerator(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) relyingPartyCtx.getConfiguration()).getIssuer(profileRequestContext));
+                sc.getIdGenerator(),
+                rpConfig.getIssuer(profileRequestContext));
         Assert.assertEquals(response.getAssertions().size(), 1, "Expected but one assertion after insert");
         Assert.assertTrue(response.getAssertions().contains(assertion), "Inserted assertion should be there");
         Assertion second = SAML2ActionSupport.addAssertionToResponse(action, response,
-                relyingPartyCtx.getProfileConfig().getSecurityConfiguration(profileRequestContext).getIdGenerator(),
-                ((net.shibboleth.profile.relyingparty.RelyingPartyConfiguration) relyingPartyCtx.getConfiguration()).getIssuer(profileRequestContext));
+                sc.getIdGenerator(),
+                rpConfig.getIssuer(profileRequestContext));
         Assert.assertEquals(response.getAssertions().size(), 2, "Expected two assertions after two inserts");
         Assert.assertTrue(response.getAssertions().contains(assertion), "Inserted assertion should be there");
         Assert.assertNotSame(second, assertion, "Two separate assertions should have been added");
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SessionManagerBaseTestCase.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SessionManagerBaseTestCase.java
index 73c162434..fa4124c4b 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SessionManagerBaseTestCase.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/saml2/profile/impl/SessionManagerBaseTestCase.java
@@ -47,6 +47,12 @@ public class SessionManagerBaseTestCase extends OpenSAMLInitBaseTestCase {
     
     protected StorageBackedSessionManager sessionManager;
     
+    @Nonnull private MockHttpServletResponse getMockHttpServletResponse() {
+        final MockHttpServletResponse result = (MockHttpServletResponse) HttpServletRequestResponseContext.getResponse();
+        assert result  != null;
+        return result;
+    }
+    
     @BeforeClass public void setUp() throws ComponentInitializationException {
         
         storageService = new MemoryStorageService();
@@ -98,7 +104,7 @@ public class SessionManagerBaseTestCase extends OpenSAMLInitBaseTestCase {
     protected Cookie createSession(@Nonnull @NotEmpty final String principalName) throws SessionException {
         HttpServletRequestResponseContext.loadCurrent(new MockHttpServletRequest(), new MockHttpServletResponse());
         sessionManager.createSession(principalName);
-        Cookie cookie = ((MockHttpServletResponse) HttpServletRequestResponseContext.getResponse()).getCookies()[0];
+        Cookie cookie = getMockHttpServletResponse().getCookies()[0];
         HttpServletRequestResponseContext.clearCurrent();
         return cookie;
     }
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/session/impl/PrepareInboundMessageContextTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/session/impl/PrepareInboundMessageContextTest.java
index 308b61868..d3032ad25 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/session/impl/PrepareInboundMessageContextTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/session/impl/PrepareInboundMessageContextTest.java
@@ -21,12 +21,15 @@ import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileR
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.session.SAML2SPSession;
+import net.shibboleth.idp.session.SPSession;
 import net.shibboleth.idp.session.context.LogoutPropagationContext;
+import net.shibboleth.profile.context.RelyingPartyContext;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import java.time.Instant;
 
 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.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -54,7 +57,7 @@ public class PrepareInboundMessageContextTest extends OpenSAMLInitBaseTestCase {
                
         final SAML2SPSession session = new SAML2SPSession("https://sp.example.org", Instant.now(),
                 Instant.now().plusSeconds(1800), SAML2ActionTestingSupport.buildNameID("jdoe"), "foo", null, true);
-        prc.getSubcontext(LogoutPropagationContext.class, true).setSession(session);
+        prc.getOrCreateSubcontext(LogoutPropagationContext.class).setSession(session);
         
         action = new PrepareInboundMessageContext();
         action.initialize();
@@ -69,7 +72,10 @@ public class PrepareInboundMessageContextTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void testNoSession() {
-        prc.getSubcontext(LogoutPropagationContext.class).setSession(null);
+        final LogoutPropagationContext lpc = prc.getSubcontext(LogoutPropagationContext.class);
+        assert lpc!=null;
+        
+        lpc.setSession(null);
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, EventIds.INVALID_PROFILE_CTX);
         Assert.assertNull(prc.getInboundMessageContext());
@@ -79,10 +85,15 @@ public class PrepareInboundMessageContextTest extends OpenSAMLInitBaseTestCase {
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(prc.getInboundMessageContext());
-        final SAMLPeerEntityContext ctx = prc.getInboundMessageContext().getSubcontext(SAMLPeerEntityContext.class);
-        Assert.assertNotNull(ctx);
-        Assert.assertEquals(ctx.getEntityId(), prc.getSubcontext(LogoutPropagationContext.class).getSession().getId());
+        final MessageContext imc = prc.getInboundMessageContext();
+        assert imc!=null;
+        final SAMLPeerEntityContext ctx = imc.getSubcontext(SAMLPeerEntityContext.class);
+        assert ctx!=null;
+        final LogoutPropagationContext lpc = prc.getSubcontext(LogoutPropagationContext.class);
+        assert lpc!=null;
+        final SPSession session = lpc.getSession();
+        assert session!=null;
+        Assert.assertEquals(ctx.getEntityId(), session.getId());
     }
 
 }
\ No newline at end of file

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


More information about the commits mailing list