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

Rod Widdowson rdw at steadingsoftware.com
Sat Mar 18 10:48:24 UTC 2023


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

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

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

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

commit 767e6ccd61a121296cdc1ae40a2a3cafd346d440
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Mar 17 14:53:06 2023 +0000

    IDP-2069 - Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    rename BaseContext#getOrCreateSubcontext to ensureSubcontext
---
 .../opensaml/messaging/context/BaseContext.java    |  8 ++---
 .../NoConfidentialityMessageChannelPredicate.java  |  2 +-
 .../logic/NoIntegrityMessageChannelPredicate.java  |  2 +-
 .../handler/AbstractMessageHandlerTest.java        |  4 +--
 .../handler/impl/StaticMessageChannelSecurity.java |  2 +-
 .../impl/URLEvaluatingMessageChannelSecurity.java  |  2 +-
 .../profile/action/AbstractProfileAction.java      |  2 +-
 .../org/opensaml/profile/action/ActionSupport.java |  4 +--
 .../NoConfidentialityMessageChannelPredicate.java  |  2 +-
 .../logic/NoIntegrityMessageChannelPredicate.java  |  2 +-
 .../profile/logic/PredicateAccessControl.java      |  2 +-
 .../HttpServletRequestMessageChannelSecurity.java  |  2 +-
 .../action/impl/StaticMessageChannelSecurity.java  |  2 +-
 .../saml/common/binding/SAMLBindingSupport.java    |  2 +-
 .../soap/SAMLSOAPClientContextBuilder.java         | 14 ++++----
 .../SAMLAddAttributeConsumingServiceHandler.java   |  2 +-
 .../binding/impl/SAMLProtocolAndRoleHandler.java   | 12 +++----
 ...ecordServerTLSEntityAuthenticationtHandler.java |  2 +-
 .../impl/MessageLifetimeSecurityHandler.java       |  2 +-
 .../impl/MessageReplaySecurityHandler.java         |  4 +--
 .../impl/SAMLMDClientCertAuthSecurityHandler.java  |  4 +--
 .../profile/impl/AddInResponseToToResponse.java    |  2 +-
 .../binding/decoding/impl/HTTPArtifactDecoder.java |  2 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |  2 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |  2 +-
 .../impl/HttpClientResponseSOAP11Decoder.java      |  2 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |  4 +--
 .../impl/SAML1ArtifactRequestIssuerHandler.java    |  2 +-
 .../binding/decoding/impl/HTTPArtifactDecoder.java |  2 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |  2 +-
 .../decoding/impl/HTTPPostSimpleSignDecoder.java   |  2 +-
 .../decoding/impl/HTTPRedirectDeflateDecoder.java  |  2 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |  2 +-
 .../impl/HttpClientResponseSOAP11Decoder.java      |  2 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |  4 +--
 .../ExtractChannelBindingsExtensionsHandler.java   |  2 +-
 .../impl/ExtractChannelBindingsHeadersHandler.java |  2 +-
 .../SAML2AuthnRequestsSignedSecurityHandler.java   |  4 +--
 ...ecuritySAML20AssertionTokenSecurityHandler.java |  2 +-
 .../impl/AddChannelBindingsHeaderHandlerTest.java  |  2 +-
 ...ulateSignatureSigningParametersHandlerTest.java |  2 +-
 ...SAMLAddAttributeConsumingServiceHandleTest.java |  4 +--
 .../impl/SAMLMetadataLookupHandlerTest.java        | 42 +++++++++++-----------
 .../http/AbstractPipelineHttpSOAPClient.java       |  4 +--
 .../opensaml/soap/client/http/HttpSOAPClient.java  |  4 +--
 .../soap/messaging/SOAPMessagingSupport.java       |  2 +-
 .../http/impl/HttpClientResponseSOAP11Decoder.java |  4 +--
 .../http/impl/HttpClientRequestSOAP11Encoder.java  |  6 ++--
 .../decoder/http/impl/HTTPSOAP11Decoder.java       |  4 +--
 .../encoder/http/impl/HTTPSOAP11Encoder.java       |  8 ++---
 .../SOAP11FaultContextDecoratingErrorHandler.java  |  2 +-
 .../messaging/impl/ExtractMessageIDHandler.java    |  2 +-
 .../encoder/http/impl/HTTPSOAP11EncoderTest.java   |  4 +--
 .../impl/client/LoadClientStorageServicesTest.java |  2 +-
 .../SaveCookieBackedClientStorageServicesTest.java |  2 +-
 55 files changed, 107 insertions(+), 107 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/BaseContext.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/BaseContext.java
index 7b53c8f34..adc0b6b42 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/BaseContext.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/BaseContext.java
@@ -114,7 +114,7 @@ public abstract class BaseContext implements Iterable<BaseContext> {
      * 
      * @return the held instance of the class, or null
      */ 
-    @Nonnull public <T extends BaseContext> T getOrCreateSubcontext(@Nonnull final Class<T> clazz) {
+    @Nonnull public <T extends BaseContext> T ensureSubcontext(@Nonnull final Class<T> clazz) {
         return Constraint.isNotNull(getSubcontext(clazz, true), "Auto-creation of subcontext failed");
     }
     
@@ -126,7 +126,7 @@ public abstract class BaseContext implements Iterable<BaseContext> {
      * @param autocreate flag indicating whether the subcontext instance should be auto-created
      * 
      * @return the held instance of the class, or null
-     * @deprecated use {@link #getOrCreateSubcontext(Class)} or {#link {@link #getSubcontext(Class)}.
+     * @deprecated use {@link #ensureSubcontext(Class)} or {#link {@link #getSubcontext(Class)}.
      */ 
     @Deprecated(since = "5.0.0", forRemoval = false)
     @Nullable public <T extends BaseContext> T getSubcontext(@Nonnull final Class<T> clazz, final boolean autocreate) {
@@ -169,7 +169,7 @@ public abstract class BaseContext implements Iterable<BaseContext> {
      * 
      * @return the held instance of the class, or null
      */ 
-    @Nullable public BaseContext getOrCreateSubcontext(@Nonnull @NotEmpty final String className) {
+    @Nullable public BaseContext ensureSubcontext(@Nonnull @NotEmpty final String className) {
         return Constraint.isNotNull(getSubcontext(className, true), "Auto-creation of subcontext failed");
     }
     
@@ -184,7 +184,7 @@ public abstract class BaseContext implements Iterable<BaseContext> {
      * @param autocreate flag indicating whether the subcontext instance should be auto-created
      * 
      * @return the held instance of the class, or null
-     * @deprecated use {@link #getOrCreateSubcontext(String)} or {#link {@link #getSubcontext(String)}.
+     * @deprecated use {@link #ensureSubcontext(String)} or {#link {@link #getSubcontext(String)}.
      */ 
     @Deprecated(since = "5.0.0", forRemoval = false)
     @Nullable public BaseContext getSubcontext(@Nonnull @NotEmpty final String className, final boolean autocreate) {
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
index 880e86c4b..04239339a 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
@@ -35,7 +35,7 @@ public class NoConfidentialityMessageChannelPredicate implements Predicate<Messa
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
         return input == null
-                || !input.getOrCreateSubcontext(MessageChannelSecurityContext.class).isConfidentialityActive();
+                || !input.ensureSubcontext(MessageChannelSecurityContext.class).isConfidentialityActive();
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
index b7706cf27..68cdf7f0e 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
@@ -34,7 +34,7 @@ public class NoIntegrityMessageChannelPredicate implements Predicate<MessageCont
 
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
-        return input == null || !input.getOrCreateSubcontext(MessageChannelSecurityContext.class).isIntegrityActive();
+        return input == null || !input.ensureSubcontext(MessageChannelSecurityContext.class).isIntegrityActive();
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
index 3043e9d96..0918a445f 100644
--- a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
+++ b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
@@ -144,7 +144,7 @@ public class AbstractMessageHandlerTest {
         handler.invoke(messageContext);
         
         Assert.assertTrue(messageContext.containsSubcontext(MockContext.class));
-        Assert.assertEquals(messageContext.getOrCreateSubcontext(MockContext.class).value, "hello");
+        Assert.assertEquals(messageContext.ensureSubcontext(MockContext.class).value, "hello");
     }
 
     /**
@@ -222,7 +222,7 @@ public class AbstractMessageHandlerTest {
     private class MockMutatingHandler extends AbstractMessageHandler {
 
         protected void doInvoke(@Nonnull MessageContext messageContext) throws MessageHandlerException {
-            messageContext.getOrCreateSubcontext(MockContext.class).value = "hello";
+            messageContext.ensureSubcontext(MockContext.class).value = "hello";
         }
     }
     
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/StaticMessageChannelSecurity.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/StaticMessageChannelSecurity.java
index 234194ef9..304f3dfb1 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/StaticMessageChannelSecurity.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/StaticMessageChannelSecurity.java
@@ -73,7 +73,7 @@ public class StaticMessageChannelSecurity extends AbstractMessageChannelSecurity
     @Override
     protected void doInvoke(@Nonnull final MessageContext messageContext) {
         final MessageChannelSecurityContext channelContext =
-                getParentContext().getOrCreateSubcontext(MessageChannelSecurityContext.class);
+                getParentContext().ensureSubcontext(MessageChannelSecurityContext.class);
         channelContext.setConfidentialityActive(isConfidentialityActive());
         channelContext.setIntegrityActive(isIntegrityActive());
     }
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
index 5bd04de6d..5dd5e0303 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
@@ -120,7 +120,7 @@ public class URLEvaluatingMessageChannelSecurity extends AbstractMessageChannelS
     @Override
     protected void doInvoke(@Nonnull final MessageContext messageContext) {
         final MessageChannelSecurityContext channelContext =
-                getParentContext().getOrCreateSubcontext(MessageChannelSecurityContext.class);
+                getParentContext().ensureSubcontext(MessageChannelSecurityContext.class);
         
         final String scheme = urlBuilder.getScheme();
         // Note that below we don't care about port if scheme != https,
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
index cd90b0617..c3a406c7c 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
@@ -123,7 +123,7 @@ public abstract class AbstractProfileAction extends AbstractInitializableCompone
         // because it may be from an earlier error of interest to other actions.
         final EventContext previousEvent = profileRequestContext.getSubcontext(EventContext.class);
         if (previousEvent != null) {
-            profileRequestContext.getOrCreateSubcontext(PreviousEventContext.class).setEvent(previousEvent.getEvent());
+            profileRequestContext.ensureSubcontext(PreviousEventContext.class).setEvent(previousEvent.getEvent());
             profileRequestContext.removeSubcontext(EventContext.class);
         }
 
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
index 78cc43877..3de69e686 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
@@ -56,7 +56,7 @@ public final class ActionSupport {
         final String trimmedEventId =
                 Constraint.isNotNull(StringSupport.trimOrNull(eventId), "ID of event cannot be null or empty");
         
-        profileRequestContext.getOrCreateSubcontext(EventContext.class).setEvent(trimmedEventId);
+        profileRequestContext.ensureSubcontext(EventContext.class).setEvent(trimmedEventId);
     }
     
     /**
@@ -71,7 +71,7 @@ public final class ActionSupport {
         Constraint.isNotNull(profileRequestContext, "Profile request context cannot be null");
         Constraint.isNotNull(event, "Event cannot be null");
         
-        profileRequestContext.getOrCreateSubcontext(EventContext.class).setEvent(event);
+        profileRequestContext.ensureSubcontext(EventContext.class).setEvent(event);
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
index c06e1cfb8..270961942 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
@@ -35,7 +35,7 @@ public class NoConfidentialityMessageChannelPredicate implements Predicate<Profi
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         return input == null
-                || !input.getOrCreateSubcontext(MessageChannelSecurityContext.class).isConfidentialityActive();
+                || !input.ensureSubcontext(MessageChannelSecurityContext.class).isConfidentialityActive();
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
index f6a381c88..4dfe3a49a 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
@@ -34,7 +34,7 @@ public class NoIntegrityMessageChannelPredicate implements Predicate<ProfileRequ
 
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
-        return input == null || !input.getOrCreateSubcontext(MessageChannelSecurityContext.class).isIntegrityActive();
+        return input == null || !input.ensureSubcontext(MessageChannelSecurityContext.class).isIntegrityActive();
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
index 2bc68d430..0fa12951f 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
@@ -71,7 +71,7 @@ public class PredicateAccessControl extends AbstractIdentifiableInitializableCom
         final Object attribute = request.getAttribute(ProfileRequestContext.BINDING_KEY);
         if (attribute != null && attribute instanceof ProfileRequestContext) {
             final ProfileRequestContext prc = (ProfileRequestContext) attribute;
-            final AccessControlContext acc = prc.getOrCreateSubcontext(AccessControlContext.class);
+            final AccessControlContext acc = prc.ensureSubcontext(AccessControlContext.class);
             acc.setOperation(operation);
             acc.setResource(resource);
             if (predicate.test(prc)) {
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/HttpServletRequestMessageChannelSecurity.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/HttpServletRequestMessageChannelSecurity.java
index 75c5848f7..823306ae7 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/HttpServletRequestMessageChannelSecurity.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/HttpServletRequestMessageChannelSecurity.java
@@ -68,7 +68,7 @@ public class HttpServletRequestMessageChannelSecurity extends AbstractMessageCha
     @Override
     protected void doExecute(final ProfileRequestContext profileRequestContext) {
         final MessageChannelSecurityContext channelContext =
-                getParentContext().getOrCreateSubcontext(MessageChannelSecurityContext.class);
+                getParentContext().ensureSubcontext(MessageChannelSecurityContext.class);
         
         final HttpServletRequest request = getHttpServletRequest();
         if (request.isSecure() && (!defaultPortInsecure || request.getLocalPort() != 443)) {
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/StaticMessageChannelSecurity.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/StaticMessageChannelSecurity.java
index 68b9934a6..84295d5a4 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/StaticMessageChannelSecurity.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/StaticMessageChannelSecurity.java
@@ -73,7 +73,7 @@ public class StaticMessageChannelSecurity extends AbstractMessageChannelSecurity
     @Override
     protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         final MessageChannelSecurityContext channelContext =
-                getParentContext().getOrCreateSubcontext(MessageChannelSecurityContext.class);
+                getParentContext().ensureSubcontext(MessageChannelSecurityContext.class);
         channelContext.setConfidentialityActive(isConfidentialityActive());
         channelContext.setIntegrityActive(isIntegrityActive());
     }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
index 2a372b092..46677fb68 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
@@ -78,7 +78,7 @@ public final class SAMLBindingSupport {
      */
     public static void setRelayState(@Nonnull final MessageContext messageContext, 
             @Nullable final String relayState) {
-        messageContext.getOrCreateSubcontext(SAMLBindingContext.class).setRelayState(relayState);
+        messageContext.ensureSubcontext(SAMLBindingContext.class).setRelayState(relayState);
     }
     
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
index e0443ee91..d6fcf61b9 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
@@ -342,7 +342,7 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
         
         final Function<MessageContext,CriteriaSet> tlsStrategy = getTLSCriteriaSetStrategy();
         if (tlsStrategy != null) {
-            outboundContext.getOrCreateSubcontext(HttpClientSecurityContext.class)
+            outboundContext.ensureSubcontext(HttpClientSecurityContext.class)
                 .setTLSCriteriaSetStrategy(tlsStrategy);
         }
         
@@ -352,22 +352,22 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
         final BaseContext parent = opContext;
         
         if (getProtocol() != null) {
-            parent.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(getProtocol());
+            parent.ensureSubcontext(SAMLProtocolContext.class).setProtocol(getProtocol());
         }
         
         if (getPipelineName() != null) {
-            parent.getOrCreateSubcontext(SOAPClientContext.class).setPipelineName(getPipelineName());
+            parent.ensureSubcontext(SOAPClientContext.class).setPipelineName(getPipelineName());
         }
         
         if (getSecurityConfigurationProfileId() != null) {
-            parent.getOrCreateSubcontext(SOAPClientSecurityContext.class).setSecurityConfigurationProfileId(
+            parent.ensureSubcontext(SOAPClientSecurityContext.class).setSecurityConfigurationProfileId(
                     getSecurityConfigurationProfileId());
         }
         
         //TODO is this required always?
         final String selfID = getSelfEntityID();
         if (selfID != null) {
-            final SAMLSelfEntityContext selfContext = parent.getOrCreateSubcontext(SAMLSelfEntityContext.class);
+            final SAMLSelfEntityContext selfContext = parent.ensureSubcontext(SAMLSelfEntityContext.class);
             selfContext.setEntityId(selfID);
         }
         
@@ -380,12 +380,12 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
         if (peerRoleName == null) {
             errorMissingData("Peer role");
         }
-        final SAMLPeerEntityContext peerContext = parent.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final SAMLPeerEntityContext peerContext = parent.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setEntityId(peerID);
         peerContext.setRole(peerRoleName);
         
         //  Both optional, could be resolved in SOAP handling pipeline by handler(s)
-        final SAMLMetadataContext metadataContext = peerContext.getOrCreateSubcontext(SAMLMetadataContext.class);
+        final SAMLMetadataContext metadataContext = peerContext.ensureSubcontext(SAMLMetadataContext.class);
         metadataContext.setEntityDescriptor(getPeerEntityDescriptor());
         metadataContext.setRoleDescriptor(getPeerRoleDescriptor());
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
index cb77a24ce..ac8832ac6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
@@ -168,7 +168,7 @@ public class SAMLAddAttributeConsumingServiceHandler extends AbstractMessageHand
         
         if (null != acs) {
             log.debug("{} Selected AttributeConsumingService with index {}", getLogPrefix(), acs.getIndex());
-            metadataContext.getOrCreateSubcontext(
+            metadataContext.ensureSubcontext(
                     AttributeConsumingServiceContext.class).setAttributeConsumingService(acs);
         } else {
             log.debug("{} No AttributeConsumingService selected", getLogPrefix());
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
index 5e415ee32..783eec491 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
@@ -123,27 +123,27 @@ public class SAMLProtocolAndRoleHandler extends AbstractMessageHandler {
         }
         
         if (samlProtocol != null) {
-            messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(samlProtocol);
+            messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(samlProtocol);
         } else if (copySource != null) {
             final SAMLProtocolContext sourceProtocolContext = copySource.getSubcontext(SAMLProtocolContext.class);
             if (sourceProtocolContext != null) {
-                messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(
+                messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(
                         sourceProtocolContext.getProtocol());
             }
         }
-        if (messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).getProtocol() == null) {
+        if (messageContext.ensureSubcontext(SAMLProtocolContext.class).getProtocol() == null) {
             throw new MessageHandlerException("SAML protocol was not supplied and could not be dynamically resolved");
         }
         
         if (peerRole != null) {
-            messageContext.getOrCreateSubcontext(entityContextClass).setRole(peerRole);
+            messageContext.ensureSubcontext(entityContextClass).setRole(peerRole);
         } else if (copySource != null) {
             final AbstractSAMLEntityContext sourceEntityContext = copySource.getSubcontext(entityContextClass);
             if (sourceEntityContext != null) {
-                messageContext.getOrCreateSubcontext(entityContextClass).setRole(sourceEntityContext.getRole());
+                messageContext.ensureSubcontext(entityContextClass).setRole(sourceEntityContext.getRole());
             }
         }
-        if (messageContext.getOrCreateSubcontext(entityContextClass).getRole() == null) {
+        if (messageContext.ensureSubcontext(entityContextClass).getRole() == null) {
             throw new MessageHandlerException("SAML role was not supplied and could not be dynamically resolved");
         }
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
index a94d5eaca..d27111cd2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
@@ -123,7 +123,7 @@ public class CheckAndRecordServerTLSEntityAuthenticationtHandler extends Abstrac
                 log.debug("HttpClientContext indicates successful server TLS, storing result in entity context {}", 
                         entityContextClass.getName());
                 final AbstractAuthenticatableSAMLEntityContext entityContext = 
-                        messageContext.getOrCreateSubcontext(entityContextClass);
+                        messageContext.ensureSubcontext(entityContextClass);
                 entityContext.setAuthenticated(true);
                 if (entityContext.getEntityId() == null && entityIDLookup != null) {
                     log.debug("Context entityID was null, attempting to resolve");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
index a3b7f088a..90b244cb6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
@@ -122,7 +122,7 @@ public class MessageLifetimeSecurityHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     @Override
     public void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
-        final SAMLMessageInfoContext msgInfoContext = messageContext.getOrCreateSubcontext(SAMLMessageInfoContext.class);
+        final SAMLMessageInfoContext msgInfoContext = messageContext.ensureSubcontext(SAMLMessageInfoContext.class);
         
         if (msgInfoContext.getMessageIssueInstant() == null) {
             if (requiredRule) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
index 4580cc022..59ada3960 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
@@ -124,14 +124,14 @@ public class MessageReplaySecurityHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     @Override
     protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
-        final SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         
         String entityID = StringSupport.trimOrNull(peerContext.getEntityId());
         if (entityID == null) {
             entityID = "(unknown)";
         }
         
-        final SAMLMessageInfoContext msgInfoContext = messageContext.getOrCreateSubcontext(SAMLMessageInfoContext.class);
+        final SAMLMessageInfoContext msgInfoContext = messageContext.ensureSubcontext(SAMLMessageInfoContext.class);
 
         final String messageId = StringSupport.trimOrNull(msgInfoContext.getMessageId());
         if (messageId == null) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
index 507fc2862..da488c9a2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
@@ -130,14 +130,14 @@ public class SAMLMDClientCertAuthSecurityHandler extends BaseClientCertAuthSecur
     protected void setAuthenticatedCertificatePresenterEntityID(@Nonnull final MessageContext messageContext,
             @Nullable final String entityID) {
         log.trace("Storing authenticatable entityID '{}' in context: {}", entityID, entityContextClass);
-        messageContext.getOrCreateSubcontext(entityContextClass).setEntityId(entityID);
+        messageContext.ensureSubcontext(entityContextClass).setEntityId(entityID);
     }
 
     /** {@inheritDoc} */
     @Override
     protected void setAuthenticatedState(@Nonnull final MessageContext messageContext, final boolean authenticated) {
         log.trace("Storing authenticated entity state '{}' in context: {}", authenticated, entityContextClass);
-        messageContext.getOrCreateSubcontext(entityContextClass).setAuthenticated(authenticated);
+        messageContext.ensureSubcontext(entityContextClass).setAuthenticated(authenticated);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
index b237fb0e5..07963c81b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
@@ -185,7 +185,7 @@ public class AddInResponseToToResponse extends AbstractConditionalProfileAction
                 }
             }
             
-            final SAMLMessageInfoContext infoCtx = inMsgCtx.getOrCreateSubcontext(SAMLMessageInfoContext.class);
+            final SAMLMessageInfoContext infoCtx = inMsgCtx.ensureSubcontext(SAMLMessageInfoContext.class);
             if (infoCtx == null) {
                 log.debug("No inbound SAMLMessageInfoContext available");
                 return null;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
index 8b561cfc6..058b2dd36 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -131,7 +131,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
index 5b1a16709..6b1cec86c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
@@ -109,7 +109,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder imp
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
index 370e9869c..f455f0f42 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
@@ -96,7 +96,7 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
index bd5231b0e..08b0ab76e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
@@ -97,7 +97,7 @@ public class HttpClientResponseSOAP11Decoder
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
index a7dd785b6..d7a306913 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -239,7 +239,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      */
     private void storeSAMLArtifactType(@Nonnull final MessageContext messageContext,
             @Nonnull @NotEmpty final byte[] artifactType) {
-        messageContext.getOrCreateSubcontext(SAMLArtifactContext.class).setArtifactType(artifactType);
+        messageContext.ensureSubcontext(SAMLArtifactContext.class).setArtifactType(artifactType);
     }
 
     /**
@@ -250,7 +250,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * @return the artifact type
      */
     @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext messageContext) {
-        return messageContext.getOrCreateSubcontext(SAMLArtifactContext.class).getArtifactType();
+        return messageContext.ensureSubcontext(SAMLArtifactContext.class).getArtifactType();
     }
     
 }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandler.java
index b697e9578..d1275a404 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandler.java
@@ -96,7 +96,7 @@ public class SAML1ArtifactRequestIssuerHandler extends AbstractMessageHandler {
             
             log.debug("{} Derived issuer of aritfact resolution request as {}", getLogPrefix(),
                     entry.getRelyingPartyId());
-            messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class).setEntityId(entry.getRelyingPartyId());
+            messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setEntityId(entry.getRelyingPartyId());
         } catch (final IOException e) {
             log.error("{} Error resolving first artifact in request: {}", getLogPrefix(), artifact, e);
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
index 0191136a5..c154d5b57 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -653,7 +653,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
index 6a26a165c..10ef6a704 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
@@ -144,7 +144,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder imp
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
index d4657c0b3..082814724 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
@@ -42,7 +42,7 @@ public class HTTPPostSimpleSignDecoder extends HTTPPostDecoder {
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(getBindingDescriptor());
         bindingContext.setHasBindingSignature(
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
index dc7b7fd43..fb4e9bbd6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
@@ -147,7 +147,7 @@ public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessage
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
index b62e200df..2523ee472 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
@@ -96,7 +96,7 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
index 9782020d6..60147002c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
@@ -97,7 +97,7 @@ public class HttpClientResponseSOAP11Decoder
      * @param messageContext the current message context
      */
     protected void populateBindingContext(final MessageContext messageContext) {
-        final SAMLBindingContext bindingContext = messageContext.getOrCreateSubcontext(SAMLBindingContext.class);
+        final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
         bindingContext.setHasBindingSignature(false);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
index df7764156..c5f628c64 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -406,7 +406,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      */
     private void storeSAMLArtifactType(@Nonnull final MessageContext messageContext,
             @Nonnull @NotEmpty final byte[] artifactType) {
-        messageContext.getOrCreateSubcontext(SAMLArtifactContext.class).setArtifactType(artifactType);
+        messageContext.ensureSubcontext(SAMLArtifactContext.class).setArtifactType(artifactType);
     }
 
     /**
@@ -417,7 +417,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @return the artifact type
      */
     @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext messageContext) {
-        return messageContext.getOrCreateSubcontext(SAMLArtifactContext.class).getArtifactType();
+        return messageContext.ensureSubcontext(SAMLArtifactContext.class).getArtifactType();
     }
     
 }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandler.java
index 104610737..5477a772e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandler.java
@@ -82,7 +82,7 @@ public class ExtractChannelBindingsExtensionsHandler extends AbstractMessageHand
         }
 
         final Collection<ChannelBindings> channelBindings =
-                messageContext.getOrCreateSubcontext(ChannelBindingsContext.class).getChannelBindings();
+                messageContext.ensureSubcontext(ChannelBindingsContext.class).getChannelBindings();
         for (final XMLObject cb : bindings) {
             if (cb instanceof ChannelBindings) {
                 channelBindings.add((ChannelBindings) cb);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
index 872a931c0..7c728ad71 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
@@ -98,7 +98,7 @@ public class ExtractChannelBindingsHeadersHandler extends AbstractMessageHandler
             log.debug("{} No ChannelBindings header blocks found", getLogPrefix());
         } else {
             log.debug("{} {} ChannelBindings header block(s) found", getLogPrefix(), channelBindings.size());
-            messageContext.getSubcontext(SOAP11Context.class).getOrCreateSubcontext(ChannelBindingsContext.class).
+            messageContext.getSubcontext(SOAP11Context.class).ensureSubcontext(ChannelBindingsContext.class).
                 getChannelBindings().addAll(channelBindings);
         }
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
index 1235100b6..6da9701fa 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
@@ -80,14 +80,14 @@ public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHand
      */
     protected boolean isRequestSigningRequired(@Nonnull final MessageContext messageContext) {
         
-        final SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        final SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         if (peerContext == null || Strings.isNullOrEmpty(peerContext.getEntityId())) {
             log.warn("SAML peer entityID was not available, unable to evaluate rule");
             return false;
         }
         final String messageIssuer = peerContext.getEntityId();
         
-        final SAMLMetadataContext metadataContext = peerContext.getOrCreateSubcontext(SAMLMetadataContext.class);
+        final SAMLMetadataContext metadataContext = peerContext.ensureSubcontext(SAMLMetadataContext.class);
         if (metadataContext == null || metadataContext.getRoleDescriptor() == null) {
             log.warn("SAMLPeerContext did not contain either a SAMLMetadataContext or a RoleDescriptor, " 
                     + "unable to evaluate rule");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
index ae4136553..f94e70008 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
@@ -251,7 +251,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
             return;
         }
         
-        final WSSecurityContext wsContext = messageContext.getOrCreateSubcontext(WSSecurityContext.class);
+        final WSSecurityContext wsContext = messageContext.ensureSubcontext(WSSecurityContext.class);
         
         for (final Assertion assertion : assertions) {
             final SAML20AssertionValidator validator = resolveValidator(messageContext, assertion);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
index 77b59eca4..04ed251bb 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
@@ -98,7 +98,7 @@ public class AddChannelBindingsHeaderHandlerTest extends OpenSAMLInitBaseTestCas
 
         final Envelope env = XMLObjectProviderRegistrySupport.getBuilderFactory().<Envelope>ensureBuilder(
                 Envelope.DEFAULT_ELEMENT_NAME).buildObject(Envelope.DEFAULT_ELEMENT_NAME);
-        messageCtx.getOrCreateSubcontext(SOAP11Context.class).setEnvelope(env);
+        messageCtx.ensureSubcontext(SOAP11Context.class).setEnvelope(env);
         
         handler.invoke(messageCtx);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
index 5ceb5b65b..0fddc854d 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
@@ -96,7 +96,7 @@ public class PopulateSignatureSigningParametersHandlerTest extends OpenSAMLInitB
                 new ChildContextLookup<MessageContext,SecurityParametersContext>(SecurityParametersContext.class, true));
         handler.initialize();
         
-        prc.getOrCreateSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(new SignatureSigningParameters());
+        prc.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(new SignatureSigningParameters());
         
         handler.invoke(prc.getOutboundMessageContext());
         Assert.assertSame(prc.getSubcontext(SecurityParametersContext.class).getSignatureSigningParameters(),
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
index c63bef3d7..873e79d91 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
@@ -45,7 +45,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     private SPSSODescriptor noACS;
     
     private SAMLMetadataContext getMetadataContext(final MessageContext message) {
-        return message.getOrCreateSubcontext(SAMLPeerEntityContext.class).getSubcontext(SAMLMetadataContext.class, true);
+        return message.ensureSubcontext(SAMLPeerEntityContext.class).getSubcontext(SAMLMetadataContext.class, true);
     }
     
     private SAMLAddAttributeConsumingServiceHandler handler() throws ComponentInitializationException {
@@ -157,7 +157,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
         
         navigatedHandler.setMetadataContextLookupStrategy(new ParentContextLookup<>(SAMLMetadataContext.class));
         final SAMLMetadataContext metadataContext = new SAMLMetadataContext();
-        final MessageContext messageContext = metadataContext.getOrCreateSubcontext(MessageContext.class);
+        final MessageContext messageContext = metadataContext.ensureSubcontext(MessageContext.class);
         metadataContext.setRoleDescriptor(withACS);
         
         final AuthnRequest request = SAML2ActionTestingSupport.buildAuthnRequest();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
index 0e7afc788..a0626422d 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
@@ -136,7 +136,7 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
         
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
@@ -152,7 +152,7 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
         
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
@@ -168,9 +168,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol("urn:foo");
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol("urn:foo");
         
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -185,9 +185,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
         
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -207,10 +207,10 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPresenterEntityContext presenterContext = messageContext.getOrCreateSubcontext(SAMLPresenterEntityContext.class);
+        SAMLPresenterEntityContext presenterContext = messageContext.ensureSubcontext(SAMLPresenterEntityContext.class);
         presenterContext.setEntityId("https://carmenwiki.osu.edu/shibboleth");
         presenterContext.setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML20P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML20P_NS);
         
         AuthnRequest authnRequest = SAML2ActionTestingSupport.buildAuthnRequest();
         authnRequest.getIssuer().setValue("https://carmenwiki.osu.edu/shibboleth");
@@ -230,9 +230,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setCopyContextStrategy(copyContextStrategy);
         handler.initialize();
 
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
 
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -257,9 +257,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setCopyContextStrategy(copyContextStrategy);
         handler.initialize();
 
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
 
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -284,9 +284,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setCopyContextStrategy(copyContextStrategy);
         handler.initialize();
 
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
 
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -311,9 +311,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setCopyContextStrategy(copyContextStrategy);
         handler.initialize();
 
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
 
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -338,9 +338,9 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setCopyContextStrategy(copyContextStrategy);
         handler.initialize();
 
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
 
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
@@ -362,11 +362,11 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
         handler.setRoleDescriptorResolver(roleResolver);
         handler.initialize();
         
-        SAMLPeerEntityContext peerContext = messageContext.getOrCreateSubcontext(SAMLPeerEntityContext.class);
+        SAMLPeerEntityContext peerContext = messageContext.ensureSubcontext(SAMLPeerEntityContext.class);
         peerContext.setRole(IDPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getOrCreateSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML11P_NS);
         
-        messageContext.getOrCreateSubcontext(SAMLMetadataLookupParametersContext.class).setDetectDuplicateEntityIDs(DetectDuplicateEntityIDs.Batch);
+        messageContext.ensureSubcontext(SAMLMetadataLookupParametersContext.class).setDetectDuplicateEntityIDs(DetectDuplicateEntityIDs.Batch);
         
         Request request = SAML1ActionTestingSupport.buildAttributeQueryRequest(null);
         ((AttributeQuery) request.getQuery()).setResource("urn:mace:incommon:osu.edu");
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
index 0fe6d5978..f5c45b221 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
@@ -184,7 +184,7 @@ public abstract class AbstractPipelineHttpSOAPClient
         HttpClientMessagePipeline pipeline = null;
         try {
             // Store the endpoint URI
-            operationContext.getOrCreateSubcontext(SOAPClientContext.class).setDestinationURI(endpoint);
+            operationContext.ensureSubcontext(SOAPClientContext.class).setDestinationURI(endpoint);
             
             // Pipeline resolution
             pipeline = resolvePipeline(operationContext);
@@ -394,7 +394,7 @@ public abstract class AbstractPipelineHttpSOAPClient
      */
     @Nonnull protected HttpClientContext resolveClientContext(@Nonnull final InOutOperationContext operationContext) {
         final HttpClientRequestContext requestContext = 
-                operationContext.getOutboundMessageContext().getOrCreateSubcontext(HttpClientRequestContext.class);
+                operationContext.getOutboundMessageContext().ensureSubcontext(HttpClientRequestContext.class);
         if (requestContext.getHttpClientContext() == null) {
             requestContext.setHttpClientContext(HttpClientContext.create());
         }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
index 1d0cafd03..bde0ab0aa 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
@@ -313,7 +313,7 @@ public class HttpSOAPClient extends AbstractInitializableComponent implements SO
             }
             final Envelope response = unmarshallResponse(httpResponse.getEntity().getContent());
             context.setInboundMessageContext(new MessageContext());
-            context.getInboundMessageContext().getOrCreateSubcontext(SOAP11Context.class).setEnvelope(response);
+            context.getInboundMessageContext().ensureSubcontext(SOAP11Context.class).setEnvelope(response);
             //TODO: goes away?
             //evaluateSecurityPolicy(messageContext);
         } catch (final IOException e) {
@@ -338,7 +338,7 @@ public class HttpSOAPClient extends AbstractInitializableComponent implements SO
             }
             final Envelope response = unmarshallResponse(httpResponse.getEntity().getContent());
             context.setInboundMessageContext(new MessageContext());
-            context.getInboundMessageContext().getOrCreateSubcontext(SOAP11Context.class).setEnvelope(response);
+            context.getInboundMessageContext().ensureSubcontext(SOAP11Context.class).setEnvelope(response);
 
             if (response.getBody() != null) {
                 final List<XMLObject> faults = response.getBody().getUnknownXMLObjects(Fault.DEFAULT_ELEMENT_NAME);
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
index 87f55c9fa..56cfe2fad 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
@@ -60,7 +60,7 @@ public final class SOAPMessagingSupport {
      */
     @Nonnull public static InboundSOAPContext getInboundSOAPContext(@Nonnull final MessageContext messageContext) {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
-        return messageContext.getOrCreateSubcontext(InboundSOAPContext.class);
+        return messageContext.ensureSubcontext(InboundSOAPContext.class);
     }
 
     /**
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
index dd8ab58cf..22349b324 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
@@ -91,7 +91,7 @@ public class HttpClientResponseSOAP11Decoder extends BaseHttpClientResponseXMLMe
             
             switch(responseStatusCode) {
                 case HttpStatus.SC_OK:
-                    final SOAP11Context soapContext = messageContext.getOrCreateSubcontext(SOAP11Context.class);
+                    final SOAP11Context soapContext = messageContext.ensureSubcontext(SOAP11Context.class);
                     processSuccessResponse(response, soapContext);
                     break;
                 case HttpStatus.SC_INTERNAL_SERVER_ERROR:
@@ -221,7 +221,7 @@ public class HttpClientResponseSOAP11Decoder extends BaseHttpClientResponseXMLMe
     /** {@inheritDoc} */
     @Override
     protected XMLObject getMessageToLog() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
     
 }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
index 8cad601eb..c422d48bf 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
@@ -143,7 +143,7 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
      * @param envelope the SOAP envelope
      */
     protected void storeSOAPEnvelope(final Envelope envelope) {
-        getMessageContext().getOrCreateSubcontext(SOAP11Context.class).setEnvelope(envelope);
+        getMessageContext().ensureSubcontext(SOAP11Context.class).setEnvelope(envelope);
     }
 
     /**
@@ -152,7 +152,7 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
      * @return the previously stored SOAP envelope
      */
     protected Envelope getSOAPEnvelope() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
 
     /**
@@ -231,7 +231,7 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
     
     /** {@inheritDoc} */
     protected XMLObject getMessageToLog() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
 
 }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
index f28f84657..469042be6 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
@@ -96,7 +96,7 @@ public class HTTPSOAP11Decoder extends BaseHttpServletRequestXMLMessageDecoder {
         final Envelope soapMessage;
         try {
             soapMessage = (Envelope) unmarshallMessage(request.getInputStream());
-            messageContext.getOrCreateSubcontext(SOAP11Context.class).setEnvelope(soapMessage);
+            messageContext.ensureSubcontext(SOAP11Context.class).setEnvelope(soapMessage);
         } catch (final IOException e) {
             log.error("Unable to obtain input stream from HttpServletRequest: {}", e.getMessage());
             throw new MessageDecodingException("Unable to obtain input stream from HttpServletRequest", e);
@@ -131,7 +131,7 @@ public class HTTPSOAP11Decoder extends BaseHttpServletRequestXMLMessageDecoder {
     /** {@inheritDoc} */
     @Override
     protected XMLObject getMessageToLog() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
index c19963baf..daee560ec 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
@@ -112,7 +112,7 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
      * @param envelope the SOAP envelope
      */
     protected void storeSOAPEnvelope(final Envelope envelope) {
-        getMessageContext().getOrCreateSubcontext(SOAP11Context.class).setEnvelope(envelope);
+        getMessageContext().ensureSubcontext(SOAP11Context.class).setEnvelope(envelope);
     }
 
     /**
@@ -121,7 +121,7 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
      * @return the previously stored SOAP envelope
      */
     protected Envelope getSOAPEnvelope() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
 
     /**
@@ -216,7 +216,7 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
      */
     protected int getHTTPResponseStatusCode() {
         final Integer contextStatus =
-                getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getHTTPResponseStatus();
+                getMessageContext().ensureSubcontext(SOAP11Context.class).getHTTPResponseStatus();
         if (contextStatus != null) {
             return contextStatus;
         }
@@ -235,7 +235,7 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
     
     /** {@inheritDoc} */
     protected XMLObject getMessageToLog() {
-        return getMessageContext().getOrCreateSubcontext(SOAP11Context.class).getEnvelope();
+        return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
     }
     
 }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
index 334ab17de..e7b548d7a 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
@@ -103,7 +103,7 @@ public class SOAP11FaultContextDecoratingErrorHandler implements TypedMessageErr
         SOAPMessagingSupport.registerSOAP11Fault(messageContext, fault);
         
         if (wsAddressingActionURI != null) {
-            messageContext.getOrCreateSubcontext(WSAddressingContext.class).setFaultActionURI(wsAddressingActionURI);
+            messageContext.ensureSubcontext(WSAddressingContext.class).setFaultActionURI(wsAddressingActionURI);
         }
         
         return true;
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
index 507a84661..a7d52d4a3 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
@@ -52,7 +52,7 @@ public class ExtractMessageIDHandler extends AbstractMessageHandler {
         final String headerValue = header != null ? StringSupport.trimOrNull(header.getURI()) : null;
         log.debug("Extracted inbound WS-Addressing MessageID value: {}", headerValue);
         if (header != null && headerValue != null) {
-            messageContext.getOrCreateSubcontext(WSAddressingContext.class).setMessageIDURI(headerValue);
+            messageContext.ensureSubcontext(WSAddressingContext.class).setMessageIDURI(headerValue);
             SOAPMessagingSupport.registerUnderstoodHeader(messageContext, header);
         }
     }
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
index 27acc51bd..0cbaca116 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
@@ -196,7 +196,7 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
-        messageContext.getOrCreateSubcontext(SOAP11Context.class).setEnvelope(envelope);
+        messageContext.ensureSubcontext(SOAP11Context.class).setEnvelope(envelope);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
@@ -380,7 +380,7 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
         
-        messageContext.getOrCreateSubcontext(SOAP11Context.class).setHTTPResponseStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
+        messageContext.ensureSubcontext(SOAP11Context.class).setHTTPResponseStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
index c613b2e34..2ca558ecc 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
@@ -57,7 +57,7 @@ public class LoadClientStorageServicesTest extends AbstractBaseClientStorageServ
 
     @BeforeMethod public void setUp() {
         prc = new RequestContextBuilder().buildProfileRequestContext();
-        loadCtx = prc.getOrCreateSubcontext(ClientStorageLoadContext.class);
+        loadCtx = prc.ensureSubcontext(ClientStorageLoadContext.class);
         loadCtx.getStorageKeys().add(STORAGE_NAME);
         
         action = new LoadClientStorageServices();
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServicesTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServicesTest.java
index 16e8cc796..5aae4210d 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServicesTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServicesTest.java
@@ -51,7 +51,7 @@ public class SaveCookieBackedClientStorageServicesTest extends AbstractBaseClien
 
     @BeforeMethod public void setUp() {
         prc = new RequestContextBuilder().buildProfileRequestContext();
-        saveCtx = prc.getOrCreateSubcontext(ClientStorageSaveContext.class);
+        saveCtx = prc.ensureSubcontext(ClientStorageSaveContext.class);
         action = new SaveCookieBackedClientStorageServices();
     }
         

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


More information about the commits mailing list