[java-idp-oidc] branch main updated: JOIDC-193 - Flow cleanup to leverage ensureContext

Scott Cantor cantor.2 at osu.edu
Mon Jan 22 22:03:04 UTC 2024


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

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

View the commit online:
http://git.shibboleth.net/view/?p=java-idp-oidc.git;a=commit;h=aa9a8f18e880cdc1e4fc00d679635b2da62d1f32

The following commit(s) were added to refs/heads/main by this push:
     new aa9a8f18 JOIDC-193 - Flow cleanup to leverage ensureContext
aa9a8f18 is described below

commit aa9a8f18e880cdc1e4fc00d679635b2da62d1f32
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Jan 22 17:03:01 2024 -0500

    JOIDC-193 - Flow cleanup to leverage ensureContext
    
    https://shibboleth.atlassian.net/browse/JOIDC-193
    
    Substantial use of getXXXMessageContext and getSubcontext addressed.
---
 .../idp/flows/admin/oidc/clients/clients-beans.xml   |  2 +-
 .../idp/flows/admin/oidc/clients/clients-flow.xml    |  2 +-
 .../issue-registration-access-token-flow.xml         | 10 +++++-----
 .../flows/authn/OAuth2Client/OAuth2Client-beans.xml  | 10 +++++-----
 .../logoutprop/oidc/oidc-logout-propagation-flow.xml | 10 +++++-----
 .../oidc-abstract-api-info-flow.xml                  |  2 +-
 .../oidc/abstract-api/oidc-abstract-api-flow.xml     |  4 ++--
 .../idp/flows/oidc/abstract/oidc-abstract-flow.xml   |  2 +-
 .../idp/flows/oidc/authorize/authorize-beans.xml     | 20 ++++++++++----------
 .../idp/flows/oidc/authorize/authorize-flow.xml      | 14 +++++++-------
 .../oidc/consent-lookup/consent-lookup-flow.xml      |  4 ++--
 .../idp/flows/oidc/end-session/end-session-flow.xml  | 18 +++++++++---------
 .../oidc/metadata-lookup/metadata-lookup-flow.xml    |  4 ++--
 .../idp/flows/oidc/register/register-flow.xml        |  2 +-
 .../shibboleth/idp/flows/oidc/token/token-flow.xml   |  8 ++++----
 .../idp/flows/oidc/userinfo/userinfo-flow.xml        |  2 +-
 16 files changed, 57 insertions(+), 57 deletions(-)

diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-beans.xml
index ab49080e..c5c7a5c4 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-beans.xml
@@ -27,7 +27,7 @@
         
     <bean id="shibboleth.AdminResourceLookupStrategy" parent="shibboleth.ContextFunctions.Expression"
         c:outputType="#{T(java.lang.String)}"
-        c:expression="#input.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('clientId')" />
+        c:expression="#input.ensureSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('clientId')" />
     
     <!--  Work beans. -->
     
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-flow.xml
index ed96cc60..c4530916 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/clients/clients-flow.xml
@@ -5,7 +5,7 @@
 
     <on-start>
         <!-- Extract 'id' parameter in case authentication disturbs the URL. -->
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('client_id'))" result="flowScope.clientId" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('client_id'))" result="flowScope.clientId" />
     </on-start>
 
     <!-- Start action. -->
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-flow.xml
index 52800437..a890003f 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-flow.xml
@@ -7,11 +7,11 @@
 
     <on-start>
         <!-- Extract the parameters in case authentication disturbs the URL. -->
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('tokenLifetime'))" result="flowScope.tokenLifetime" />
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('policyLocation'))" result="flowScope.policyLocation" />
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('policyId'))" result="flowScope.policyId" />
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('clientId'))" result="flowScope.clientId" />
-        <evaluate expression="T(net.shibboleth.utilities.java.support.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('replacement'))" result="flowScope.replacement" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('tokenLifetime'))" result="flowScope.tokenLifetime" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('policyLocation'))" result="flowScope.policyLocation" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('policyId'))" result="flowScope.policyId" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('clientId'))" result="flowScope.clientId" />
+        <evaluate expression="T(net.shibboleth.shared.primitive.StringSupport).trimOrNull(externalContext.getNativeRequest().getParameter('replacement'))" result="flowScope.replacement" />
     </on-start>
     
     <action-state id="InitializeProfileRequestContext">
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
index f7d99b72..eebd9585 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
@@ -50,7 +50,7 @@
     </bean>
 
     <bean id="JWTAuthenticationCondition" parent="shibboleth.Conditions.Expression"
-        c:expression="#input.getSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).getSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication() instanceof T(com.nimbusds.oauth2.sdk.auth.JWTAuthentication)" />
+        c:expression="#input.ensureSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).ensureSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication() instanceof T(com.nimbusds.oauth2.sdk.auth.JWTAuthentication)" />
 
     <bean id="ValidateJWTSignature" class="net.shibboleth.idp.profile.impl.WebFlowMessageHandlerAdaptor"
         scope="prototype" c:executionDirection="INBOUND" p:activationCondition-ref="JWTAuthenticationCondition"
@@ -66,13 +66,13 @@
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
-                                    c:expression="#input.getParent().getSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).getSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
+                                    c:expression="#input.getParent().ensureSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).ensureSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
-                                    c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
+                                    c:expression="#input.ensureSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
                             <property name="signatureAlgorithmLookupStrategy">
                                 <bean
@@ -87,13 +87,13 @@
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
-                                    c:expression="#input.getParent().getSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).getSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
+                                    c:expression="#input.getParent().ensureSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).ensureSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
-                                    c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
+                                    c:expression="#input.ensureSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
                         </bean>
                     </list>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-flow.xml
index d88bd3ee..f5e50501 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-flow.xml
@@ -25,18 +25,18 @@
     </action-state>
 
     <decision-state id="ChooseFrontChannelIfPreferredAndEnabled">
-        <if test="frontChannelPreferred and opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getFrontChannelLogoutUri() != null"
+        <if test="frontChannelPreferred and opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getFrontChannelLogoutUri() != null"
             then="DoFrontChannelLogout"
             else="ChooseBackChannelIfEnabled" />
     </decision-state>
 
     <decision-state id="ChooseBackChannelIfEnabled">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getBackChannelLogoutUri() != null"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getBackChannelLogoutUri() != null"
             then="DoBackChannelLogout" else="ChooseFrontChannelIfEnabled" />
     </decision-state>
 
     <decision-state id="ChooseFrontChannelIfEnabled">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getFrontChannelLogoutUri() != null"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').getFrontChannelLogoutUri() != null"
             then="DoFrontChannelLogout" else="HandleError" />
     </decision-state>
 
@@ -67,7 +67,7 @@
             <evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="viewScope.encoder" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeRequest()" result="viewScope.request" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeResponse()" result="viewScope.response" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getMessage().toHTTPResponse().getHeaderValue('Location')" result="viewScope.frontChannelLogoutLocation" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().getMessage().toHTTPResponse().getHeaderValue('Location')" result="viewScope.frontChannelLogoutLocation" />
             <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().containsBean('shibboleth.CustomViewContext') ? flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.CustomViewContext') : null" result="viewScope.custom" />
         </on-render>
         <transition on="proceed" to="SetFrontChannelLogoutSuccess" />
@@ -81,7 +81,7 @@
 
     <action-state id="DoBackChannelLogout">
         <on-entry>
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCBackChannelLogoutPropagationContext')"/>
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCLogoutPropagationContext').ensureSubcontext('net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCBackChannelLogoutPropagationContext')"/>
         </on-entry>
         <evaluate expression="PopulateBackChannelLogoutTokenSignatureSigningParameters"/>
         <evaluate expression="PopulateBackChannelLogoutTokenEncryptionParameters"/>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api-info/oidc-abstract-api-info-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api-info/oidc-abstract-api-info-flow.xml
index d02e715f..2081ae12 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api-info/oidc-abstract-api-info-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api-info/oidc-abstract-api-info-flow.xml
@@ -17,7 +17,7 @@
     </action-state>
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="PopulateOutboundInterceptContext" else="DoInboundInterceptSubflow" />
     </decision-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api/oidc-abstract-api-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api/oidc-abstract-api-flow.xml
index b313bf5a..6900d8b1 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api/oidc-abstract-api-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract-api/oidc-abstract-api-flow.xml
@@ -7,7 +7,7 @@
     <!--  Actions common to most OIDC profile backend flows. -->
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="AuthenticationSetup" else="DoInboundInterceptSubflow" />
     </decision-state>
 
@@ -34,7 +34,7 @@
     <action-state id="HandleError">
         <on-entry>
             <evaluate
-                expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext), true).setRequestContext(flowRequestContext)" />
+                expression="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).setRequestContext(flowRequestContext)" />
             <evaluate expression="LogEvent" />
         </on-entry>
         <evaluate expression="BuildErrorResponseFromEvent" />
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-flow.xml
index 18256638..5fa09c23 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-flow.xml
@@ -10,7 +10,7 @@
     </action-state>
 
     <decision-state id="CheckOutboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="BuildResponseMessage" else="DoOutboundInterceptSubflow" />
     </decision-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
index 5e4f05b8..51fc17f5 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
@@ -120,7 +120,7 @@
         p:requestObjectEnforcedPredicate-ref="UseRequestObjectPredicate"/>
 
     <bean id="RequestObjectEncryptedCondition" parent="shibboleth.Conditions.Expression"
-        c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() instanceof T(com.nimbusds.jwt.EncryptedJWT)" />
+        c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() instanceof T(com.nimbusds.jwt.EncryptedJWT)" />
 
     <bean id="CheckClientJWTDecryptionConfiguration"
         class="net.shibboleth.oidc.security.impl.CheckClientJWTDecryptionConfiguration" scope="prototype">
@@ -129,13 +129,13 @@
                 class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
                 c:outputType="#{T(com.nimbusds.jwt.JWT)}"
-                c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
+                c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
         </property>
         <property name="clientInformationLookupStrategy">
             <bean
                 class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
-                c:expression="#input.getInboundMessageContext().getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
+                c:expression="#input.ensureInboundMessageContext().ensureSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
         </property>
         <property name="encryptionOptionalPredicate">
             <bean parent="shibboleth.Conditions.NOT">
@@ -143,7 +143,7 @@
                     <bean parent="shibboleth.Conditions.AND">
                         <constructor-arg>
                             <bean parent="shibboleth.Conditions.Expression"
-                                c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() != null" />
+                                c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() != null" />
                         </constructor-arg>
                         <constructor-arg>
                             <bean class="net.shibboleth.oidc.profile.config.logic.EncryptRequestObjectPredicate"/>
@@ -171,7 +171,7 @@
             <bean class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
                 c:outputType="#{T(com.nimbusds.jwt.EncryptedJWT)}"
-                c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
+                c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
         </property>
         <property name="jwtUpdateStrategy">
             <bean class="net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.RequestObjectUpdateStrategy" />
@@ -184,7 +184,7 @@
     </bean>
 
     <bean id="RequestObjectSignedCondition" parent="shibboleth.Conditions.Expression"
-        c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() instanceof T(com.nimbusds.jwt.SignedJWT)" />
+        c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() instanceof T(com.nimbusds.jwt.SignedJWT)" />
 
     <bean id="UseRequestObjectPredicate" class="net.shibboleth.oidc.profile.config.logic.UseRequestObjectPredicate" />
 
@@ -203,13 +203,13 @@
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
-                                    c:expression="#input.getParent().getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
+                                    c:expression="#input.getParent().ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
-                                    c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
+                                    c:expression="#input.ensureSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
                             <property name="signatureAlgorithmLookupStrategy">
                                 <bean
@@ -224,13 +224,13 @@
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
-                                    c:expression="#input.getParent().getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
+                                    c:expression="#input.getParent().ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
                                     class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
-                                    c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
+                                    c:expression="#input.ensureSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
                         </bean>
                     </list>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-flow.xml
index 30fa08b2..da9d3910 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-flow.xml
@@ -44,7 +44,7 @@
     </action-state>
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="OutboundContextsAndSecurityParameters" else="DoInboundInterceptSubflow" />
     </decision-state>
 
@@ -116,7 +116,7 @@
 
     <!-- Audience may or may not be a factor. -->
     <decision-state id="CheckForAudience">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
             then="AttributeResolutionForClient"
             else="LookupAudienceMetadata" />
     </decision-state>
@@ -132,7 +132,7 @@
     </action-state>
     
     <decision-state id="CheckIfAudienceFoundFromClientInformationService">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().containsSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext))"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().containsSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext))"
             then="SelectAudienceProfileConfiguration" else="LookupAudienceSAMLMetadata" />
     </decision-state>
     
@@ -146,7 +146,7 @@
     </action-state>
 
     <decision-state id="CheckIfAudienceFoundFromSAMLMetadata">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
             then="PopulateAudienceOIDCMetadataContextFromSAML"
             else="SelectAudienceProfileConfiguration" />
     </decision-state>
@@ -189,7 +189,7 @@
 
     <decision-state id="CheckPostAuthnInterceptContext">
         <if
-            test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+            test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="SubjectResolution" else="DoPostAuthnInterceptSubflow" />
     </decision-state>
 
@@ -223,7 +223,7 @@
     </decision-state>
 
     <decision-state id="CheckTokenRequirements">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
             then="BuildTokensForUserInfoAccess"
             else="BuildTokensForThirdPartyAccess" />
     </decision-state>
@@ -335,7 +335,7 @@
             <evaluate expression="BuildErrorResponseFromEvent" />
         </on-entry>
         <if
-            test="opensamlProfileRequestContext.getOutboundMessageContext() != null && opensamlProfileRequestContext.getOutboundMessageContext().getMessage() != null"
+            test="opensamlProfileRequestContext.getOutboundMessageContext() != null && opensamlProfileRequestContext.ensureOutboundMessageContext().getMessage() != null"
             then="CommitResponse" else="ErrorView" />
         <exception-handler bean="RethrowingFlowExecutionExceptionHandler" />
     </decision-state>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/consent-lookup/consent-lookup-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/consent-lookup/consent-lookup-flow.xml
index 88c6c84f..9fa20c72 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/consent-lookup/consent-lookup-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/consent-lookup/consent-lookup-flow.xml
@@ -9,13 +9,13 @@
     </decision-state>
     
     <decision-state id="CheckConsentSetup">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).containsSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext))"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).containsSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext))"
             then="BuildResponse" else="ConsentFlowSetup" />
     </decision-state>    
 
     <action-state id="ConsentFlowSetup">
         <evaluate expression="PopulateConsentInterceptContext" />
-        <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).setAttemptedFlow(flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.ProfileInterceptorFlowDescriptorManager').getComponents().?[id matches 'intercept/attribute-release-query'])" />
+        <evaluate expression="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).setAttemptedFlow(flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.ProfileInterceptorFlowDescriptorManager').getComponents().?[id matches 'intercept/attribute-release-query'])" />
         <transition on="success" to="ConsentFlow" />
     </action-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/end-session/end-session-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/end-session/end-session-flow.xml
index 4b3bb3a7..055175eb 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/end-session/end-session-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/end-session/end-session-flow.xml
@@ -37,7 +37,7 @@
     </action-state>
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="OutboundContextsAndSecurityParameters" else="DoInboundInterceptSubflow" />
     </decision-state>
 
@@ -127,7 +127,7 @@
     
     <action-state id="SetRPUIInformation">
         <on-entry>
-            <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext)).getRelyingPartyContextIterator().next()" />
+            <evaluate expression="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext)).getRelyingPartyContextIterator().next()" />
         </on-entry>
         <evaluate expression="SetRPUIInformation" />
         <evaluate expression="'proceed'" />
@@ -142,8 +142,8 @@
             <evaluate expression="opensamlProfileRequestContext" result="viewScope.profileRequestContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.session.context.LogoutContext))" result="viewScope.logoutContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext))" result="viewScope.multiRPContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
             <evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="viewScope.encoder" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeRequest()" result="viewScope.request" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeResponse()" result="viewScope.response" />
@@ -173,8 +173,8 @@
             <evaluate expression="opensamlProfileRequestContext" result="viewScope.profileRequestContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.session.context.LogoutContext))" result="viewScope.logoutContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext))" result="viewScope.multiRPContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
             <evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="viewScope.htmlEncoder" />
             <evaluate expression="T(java.net.URLEncoder)" result="viewScope.urlEncoder" />
             <evaluate expression="T(org.cryptacular.util.CodecUtil)" result="viewScope.codecUtil" />
@@ -193,8 +193,8 @@
             <evaluate expression="opensamlProfileRequestContext" result="requestScope.profileRequestContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.session.context.LogoutContext))" result="requestScope.logoutContext" />
             <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext))" result="requestScope.multiRPContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
-            <evaluate expression="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext))" result="viewScope.oidcRpInitiatedLogoutContext" />
+            <evaluate expression="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCRpInitiatedLogoutContext)).getPostLogoutRedirectUri()" result="viewScope.postLogoutRedirectUri" />
             <evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="requestScope.encoder" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeRequest()" result="requestScope.request" />
             <evaluate expression="flowRequestContext.getExternalContext().getNativeResponse()" result="requestScope.response" />
@@ -211,7 +211,7 @@
     </action-state>
 
     <decision-state id="CheckOutboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="HandleOutboundMessage" else="DoOutboundInterceptSubflow" />
     </decision-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
index eccbb86d..53f58ddf 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
@@ -16,7 +16,7 @@
     </action-state>
 
     <decision-state id="CheckIfFoundFromClientInformationService">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.profile.context.RelyingPartyContext)).isVerified()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.profile.context.RelyingPartyContext)).isVerified()"
             then="SelectConfiguration" else="LookupFromSAMLMetadataService" />
     </decision-state>
 
@@ -29,7 +29,7 @@
     </action-state>        
 
     <decision-state id="CheckIfFoundFromSAMLMetadata">
-        <if test="opensamlProfileRequestContext.getInboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.getInboundMessageContext().getSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
+        <if test="opensamlProfileRequestContext.ensureInboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.ensureInboundMessageContext().ensureSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
             then="PopulateOIDCMetadataContextFromSAML" else="SelectConfiguration" />
     </decision-state>
     
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/register/register-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/register/register-flow.xml
index 5483d3ad..c74333f8 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/register/register-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/register/register-flow.xml
@@ -26,7 +26,7 @@
     </action-state>
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="OutboundContextsAndSecurityParameters" else="DoInboundInterceptSubflow" />
     </decision-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-flow.xml
index e669ae99..c2c11bdd 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-flow.xml
@@ -70,7 +70,7 @@
 
     <!-- For standard grants, audience may or may not be a factor. -->
     <decision-state id="CheckTraditionalGrantForAudience">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
             then="CheckAttributeResolutionForClient"
             else="LookupAudienceMetadata" />
     </decision-state>
@@ -100,7 +100,7 @@
     </action-state>
     
     <decision-state id="CheckIfAudienceFoundFromClientInformationService">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().containsSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext))"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().containsSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext))"
             then="SelectAudienceProfileConfiguration" else="LookupAudienceSAMLMetadata" />
     </decision-state>
     
@@ -114,7 +114,7 @@
     </action-state>
 
     <decision-state id="CheckIfAudienceFoundFromSAMLMetadata">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)) and opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext)).containsSubcontext(T(org.opensaml.saml.common.messaging.context.SAMLMetadataContext))"
             then="PopulateAudienceOIDCMetadataContextFromSAML"
             else="SelectAudienceProfileConfiguration" />
     </decision-state>
@@ -164,7 +164,7 @@
     </action-state>
     
     <decision-state id="BuildResponse">
-        <if test="opensamlProfileRequestContext.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getAudience().isEmpty()"
             then="BuildTokensForUserInfoAccess"
             else="BuildTokensForThirdPartyAccess" />
     </decision-state>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-flow.xml
index 64dc7fb2..a4d8d709 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-flow.xml
@@ -34,7 +34,7 @@
     </action-state>
 
     <decision-state id="CheckInboundInterceptContext">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
+        <if test="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.profile.context.ProfileInterceptorContext)).getAvailableFlows().isEmpty()"
             then="OutboundContextsAndSecurityParameters" else="DoInboundInterceptSubflow" />
     </decision-state>
 

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


More information about the commits mailing list