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

Scott Cantor cantor.2 at osu.edu
Mon Apr 17 13:59:01 UTC 2023


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

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

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

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

commit f1131d6e93a46df38fcfbf72fafdb7fe108ee958
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Apr 17 09:58:57 2023 -0400

    IDP-2069 - Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    More handler and test cleanup.
---
 .../ExtractChannelBindingsExtensionsHandler.java   | 11 +++--
 .../impl/ExtractChannelBindingsHeadersHandler.java |  9 ++--
 .../SAML2AuthnRequestsSignedSecurityHandler.java   |  9 ++--
 .../SAML2HTTPPostSimpleSignSecurityHandler.java    | 11 ++---
 ...TTPRedirectDeflateSignatureSecurityHandler.java |  2 +-
 .../AbstractSubjectConfirmationValidatorTest.java  | 55 +++++++++++-----------
 .../AudienceRestrictionConditionValidatorTest.java | 10 ++--
 .../impl/AuthnStatementValidatorTest.java          | 40 +++++++++++-----
 .../BearerSubjectConfirmationValidatorTest.java    |  5 +-
 ...elegationRestrictionConditionValidatorTest.java | 10 ++--
 ...olderOfKeySubjectConfirmationValidatorTest.java | 10 ++--
 .../impl/OneTimeUseConditionValidatorTest.java     |  3 +-
 .../ProxyRestrictionConditionValidatorTest.java    |  5 +-
 ...derVouchesSubjectConfirmationValidatorTest.java |  5 +-
 .../tests/BaseAssertionValidationTest.java         |  2 +-
 ...xtractChannelBindingsExtensionsHandlerTest.java | 15 ++++--
 .../ExtractChannelBindingsHeadersHandlerTest.java  | 16 +++----
 ...AML2AuthnRequestsSignedSecurityHandlerTest.java | 13 +++--
 ...SAML2HTTPPostSimpleSignSecurityHandlerTest.java | 29 +++++++-----
 ...edirectDeflateSignatureSecurityHandlerTest.java | 40 +++++++++-------
 20 files changed, 171 insertions(+), 129 deletions(-)

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 5477a772e..6925074ca 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
@@ -34,7 +34,8 @@ import org.opensaml.saml.saml2.core.Extensions;
 import org.opensaml.saml.saml2.core.RequestAbstractType;
 import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * MessageHandler to process {@link ChannelBindings} extensions in an incoming SAML message
@@ -64,10 +65,10 @@ public class ExtractChannelBindingsExtensionsHandler extends AbstractMessageHand
     protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
 
         Extensions extensions = null;
-        if (messageContext.getMessage() instanceof RequestAbstractType) {
-            extensions = ((RequestAbstractType) messageContext.getMessage()).getExtensions();
-        } else if (messageContext.getMessage() instanceof StatusResponseType) {
-            extensions = ((StatusResponseType) messageContext.getMessage()).getExtensions();
+        if (messageContext.getMessage() instanceof RequestAbstractType req) {
+            extensions = req.getExtensions();
+        } else if (messageContext.getMessage() instanceof StatusResponseType resp) {
+            extensions = resp.getExtensions();
         } else {
             log.debug("{} Message was not of a supported type", getLogPrefix());
             return;
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 7c728ad71..11ec498f2 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
@@ -33,7 +33,8 @@ import org.opensaml.soap.messaging.SOAPMessagingSupport;
 import org.opensaml.soap.messaging.context.SOAP11Context;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * MessageHandler to process {@link ChannelBindings} SOAP header blocks in an incoming SOAP envelope
@@ -98,8 +99,10 @@ 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).ensureSubcontext(ChannelBindingsContext.class).
-                getChannelBindings().addAll(channelBindings);
+            messageContext.ensureSubcontext(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 6da9701fa..4a1d3f881 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
@@ -26,12 +26,14 @@ import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.saml2.core.AuthnRequest;
+import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Strings;
 
+import net.shibboleth.shared.primitive.LoggerFactory;
+
 /**
  * Message handler implementation that enforces the AuthnRequestsSigned flag of 
  * SAML 2 metadata element @{link {@link SPSSODescriptor}.
@@ -95,13 +97,14 @@ public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHand
         }
         
         if (!(metadataContext.getRoleDescriptor() instanceof SPSSODescriptor)) {
+            final RoleDescriptor role = metadataContext.getRoleDescriptor();
             log.warn("RoleDescriptor was not an SPSSODescriptor, it was a {}. Unable to evaluate rule", 
-                    metadataContext.getRoleDescriptor().getClass().getName());
+                    role != null ? role.getClass().getName() : "(null)");
             return false;
         }
         
         final SPSSODescriptor spssoRole = (SPSSODescriptor) metadataContext.getRoleDescriptor();
-        
+        assert spssoRole != null;
         if (spssoRole.isAuthnRequestsSigned() == Boolean.TRUE) {
             log.debug("SPSSODescriptor for entity ID '{}' indicates AuthnRequests must be signed", messageIssuer);
             return true;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
index eb21e9111..9656296b5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.binding.security.impl;
 import java.io.ByteArrayInputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
@@ -37,7 +36,6 @@ import org.opensaml.xmlsec.keyinfo.KeyInfoCredentialResolver;
 import org.opensaml.xmlsec.keyinfo.KeyInfoCriterion;
 import org.opensaml.xmlsec.signature.KeyInfo;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
 import com.google.common.base.Strings;
@@ -47,8 +45,10 @@ import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.codec.Base64Support;
 import net.shibboleth.shared.codec.DecodingException;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
 import net.shibboleth.shared.xml.ParserPool;
@@ -177,7 +177,7 @@ public class SAML2HTTPPostSimpleSignSecurityHandler extends BaseSAMLSimpleSignat
         final String kiBase64 = getHttpServletRequest().getParameter("KeyInfo");
         if (Strings.isNullOrEmpty(kiBase64)) {
             log.debug("Form control data did not contain a KeyInfo");
-            return Collections.emptyList();
+            return CollectionSupport.emptyList();
         }
         log.debug("Found a KeyInfo in form control data, extracting validation credentials");
 
@@ -206,11 +206,6 @@ public class SAML2HTTPPostSimpleSignSecurityHandler extends BaseSAMLSimpleSignat
             throw new MessageHandlerException("Error unmarshalling KeyInfo data", e);
         }
 
-        if (keyInfo == null) {
-            log.warn("Could not successfully extract KeyInfo object from the form control data");
-            return Collections.emptyList();
-        }
-
         final List<Credential> credentials = new ArrayList<>();
         final CriteriaSet criteriaSet = new CriteriaSet(new KeyInfoCriterion(keyInfo));
         try {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandler.java
index 7f846791a..819112ff4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandler.java
@@ -24,12 +24,12 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.net.URISupport;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.binding.security.impl.BaseSAMLSimpleSignatureSecurityHandler;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Strings;
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AbstractSubjectConfirmationValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AbstractSubjectConfirmationValidatorTest.java
index bae443d0b..d68c1fd97 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AbstractSubjectConfirmationValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AbstractSubjectConfirmationValidatorTest.java
@@ -30,13 +30,14 @@ import org.opensaml.saml.saml2.assertion.SAML2AssertionValidationParameters;
 import org.opensaml.saml.saml2.assertion.tests.BaseAssertionValidationTest;
 import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.SubjectConfirmation;
+import org.opensaml.saml.saml2.core.SubjectConfirmationData;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-/**
- *
- */
+import net.shibboleth.shared.logic.Constraint;
+
+ at SuppressWarnings("javadoc")
 public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValidationTest {
     
     private MockSubjectConfirmationValidator validator;
@@ -46,7 +47,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     @BeforeMethod(dependsOnMethods="setUpBasicAssertion")
     public void setUp() {
         validator = new MockSubjectConfirmationValidator();
-        subjectConfirmation = getAssertion().getSubject().getSubjectConfirmations().get(0);
+        subjectConfirmation = getSubject().getSubjectConfirmations().get(0);
         subjectConfirmation.setMethod(validator.getServicedMethod());
     }
     
@@ -70,7 +71,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testInvalidAddress() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setAddress("1.2.3.4");
+        getSubjectConfirmationData().setAddress("1.2.3.4");
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -80,7 +81,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testInvalidAddressWithAddressCheckDisabled() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setAddress("1.2.3.4");
+        getSubjectConfirmationData().setAddress("1.2.3.4");
 
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_CHECK_ADDRESS, Boolean.FALSE);
@@ -115,7 +116,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoAddress() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setAddress(null);
+        getSubjectConfirmationData().setAddress(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -125,7 +126,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoAddressAndRequired() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setAddress(null);
+        getSubjectConfirmationData().setAddress(null);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_ADDRESS_REQUIRED, Boolean.TRUE);
@@ -149,7 +150,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testInvalidRecipient() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setRecipient("https://bogussp.example.com");
+        getSubjectConfirmationData().setRecipient("https://bogussp.example.com");
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -182,7 +183,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoRecipient() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setRecipient(null);
+        getSubjectConfirmationData().setRecipient(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -192,7 +193,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoRecipientAndRequired() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setRecipient(null);
+        getSubjectConfirmationData().setRecipient(null);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_RECIPIENT_REQUIRED, Boolean.TRUE);
@@ -217,8 +218,8 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     @Test
     public void testInvalidNotBefore() throws AssertionValidationException {
         // Adjust them both just so they make sense
-        subjectConfirmation.getSubjectConfirmationData().setNotBefore(Instant.now().plus(30, ChronoUnit.MINUTES));
-        subjectConfirmation.getSubjectConfirmationData().setNotOnOrAfter(Instant.now().plus(60, ChronoUnit.MINUTES));
+        getSubjectConfirmationData().setNotBefore(Instant.now().plus(30, ChronoUnit.MINUTES));
+        getSubjectConfirmationData().setNotOnOrAfter(Instant.now().plus(60, ChronoUnit.MINUTES));
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -228,7 +229,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoNotBefore() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setNotBefore(null);
+        getSubjectConfirmationData().setNotBefore(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -238,7 +239,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoNotBeforeAndRequired() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setNotBefore(null);
+        getSubjectConfirmationData().setNotBefore(null);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_NOT_BEFORE_REQUIRED, Boolean.TRUE);
@@ -263,8 +264,8 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     @Test
     public void testInvalidNotOnOrAfter() throws AssertionValidationException {
         // Adjust them both just so they make sense
-        subjectConfirmation.getSubjectConfirmationData().setNotBefore(Instant.now().minus(60, ChronoUnit.MINUTES));
-        subjectConfirmation.getSubjectConfirmationData().setNotOnOrAfter(Instant.now().minus(30, ChronoUnit.MINUTES));
+        getSubjectConfirmationData().setNotBefore(Instant.now().minus(60, ChronoUnit.MINUTES));
+        getSubjectConfirmationData().setNotOnOrAfter(Instant.now().minus(30, ChronoUnit.MINUTES));
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -274,7 +275,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoNotOnOrAfter() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setNotOnOrAfter(null);
+        getSubjectConfirmationData().setNotOnOrAfter(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -284,7 +285,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoNotOnOrAfterAndRequired() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setNotOnOrAfter(null);
+        getSubjectConfirmationData().setNotOnOrAfter(null);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_NOT_ON_OR_AFTER_REQUIRED, Boolean.TRUE);
@@ -308,7 +309,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testInvalidInResponseTo() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setInResponseTo("invalid");
+        getSubjectConfirmationData().setInResponseTo("invalid");
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -341,7 +342,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoInResponseTo() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setInResponseTo(null);
+        getSubjectConfirmationData().setInResponseTo(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -351,7 +352,7 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
     
     @Test
     public void testNoInResponseToAndRequired() throws AssertionValidationException {
-        subjectConfirmation.getSubjectConfirmationData().setInResponseTo(null);
+        getSubjectConfirmationData().setInResponseTo(null);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.SC_IN_RESPONSE_TO_REQUIRED, Boolean.TRUE);
@@ -373,10 +374,10 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
                 ValidationResult.INVALID);        
     }
     
-    
-    
-    
-    
+    @Nonnull private SubjectConfirmationData getSubjectConfirmationData() {
+        return Constraint.isNotNull(subjectConfirmation.getSubjectConfirmationData(), "Conf data was null");
+    }
+
     // Mock concrete class for testing
     
     public static class MockSubjectConfirmationValidator extends AbstractSubjectConfirmationValidator {
@@ -394,4 +395,4 @@ public class AbstractSubjectConfirmationValidatorTest extends BaseAssertionValid
         
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
index 7f8b9c06f..ee53b8320 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
@@ -33,9 +33,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-/**
- *
- */
+ at SuppressWarnings("javadoc")
 public class AudienceRestrictionConditionValidatorTest extends BaseAssertionValidationTest {
     
     private String expectedAudienceURI = "https://sp.example.com";
@@ -53,7 +51,7 @@ public class AudienceRestrictionConditionValidatorTest extends BaseAssertionVali
         audience.setURI(expectedAudienceURI);
         condition = buildXMLObject(AudienceRestriction.DEFAULT_ELEMENT_NAME);
         ((AudienceRestriction)condition).getAudiences().add(audience);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
     }
     
     @Test
@@ -106,7 +104,7 @@ public class AudienceRestrictionConditionValidatorTest extends BaseAssertionVali
     @Test
     public void testUnexpectedCondition() throws AssertionValidationException {
         condition = buildXMLObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.COND_VALID_AUDIENCES, Collections.singleton(expectedAudienceURI));
@@ -118,4 +116,4 @@ public class AudienceRestrictionConditionValidatorTest extends BaseAssertionVali
     }
 
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AuthnStatementValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AuthnStatementValidatorTest.java
index a30c9c66d..aeb49d0a1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AuthnStatementValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AuthnStatementValidatorTest.java
@@ -21,6 +21,8 @@ import java.time.Duration;
 import java.time.Instant;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.saml.common.assertion.AssertionValidationException;
 import org.opensaml.saml.common.assertion.ValidationContext;
 import org.opensaml.saml.common.assertion.ValidationResult;
@@ -29,11 +31,16 @@ import org.opensaml.saml.saml2.assertion.tests.BaseAssertionValidationTest;
 import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.AttributeStatement;
 import org.opensaml.saml.saml2.core.AuthnContext;
+import org.opensaml.saml.saml2.core.AuthnContextClassRef;
 import org.opensaml.saml.saml2.core.AuthnStatement;
+import org.opensaml.saml.saml2.core.SubjectLocality;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.shared.logic.Constraint;
+
+ at SuppressWarnings("javadoc")
 public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
     
     private AuthnStatementValidator validator;
@@ -89,7 +96,7 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
 
     @Test
     public void testInvalidAddress() throws AssertionValidationException {
-        authnStatement.getSubjectLocality().setAddress("1.2.3.4");
+        getSubjectLocality().setAddress("1.2.3.4");
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -99,7 +106,7 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
 
     @Test
     public void testInvalidAddressWithAddressCheckDisabled() throws AssertionValidationException {
-        authnStatement.getSubjectLocality().setAddress("1.2.3.4");
+        getSubjectLocality().setAddress("1.2.3.4");
         
         Map<String,Object> staticParams = buildBasicStaticParameters();
         staticParams.put(SAML2AssertionValidationParameters.STMT_AUTHN_CHECK_ADDRESS, Boolean.FALSE);
@@ -134,7 +141,7 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
     
     @Test
     public void testNoAddress() throws AssertionValidationException {
-        authnStatement.getSubjectLocality().setAddress(null);
+        getSubjectLocality().setAddress(null);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -157,10 +164,17 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
         // Just testing that if a subclass overrides this method, it gets processed.
         validator = new AuthnStatementValidator() {
             /** {@inheritDoc} */
-            protected ValidationResult validateAuthnContext(AuthnStatement statement, Assertion assertion,
-                    ValidationContext context) throws AssertionValidationException {
-                return AuthnContext.SMARTCARD_AUTHN_CTX.equals(statement.getAuthnContext().getAuthnContextClassRef().getURI())
-                        ? ValidationResult.VALID : ValidationResult.INVALID;
+            @Nonnull protected ValidationResult validateAuthnContext(@Nonnull final AuthnStatement statement,
+                    @Nonnull final Assertion assertion, @Nonnull final ValidationContext context) throws AssertionValidationException {
+                final AuthnContext ac = statement.getAuthnContext();
+                if (ac != null) {
+                    final AuthnContextClassRef acRef = ac.getAuthnContextClassRef();
+                    if (acRef != null) {
+                        return AuthnContext.SMARTCARD_AUTHN_CTX.equals(acRef.getURI())
+                                ? ValidationResult.VALID : ValidationResult.INVALID;
+                    }
+                }
+                return ValidationResult.INVALID;
             }
         };
         
@@ -174,8 +188,9 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
     public void testValidationThrows() throws AssertionValidationException {
         validator = new AuthnStatementValidator() {
             /** {@inheritDoc} */
-            protected ValidationResult validateAuthnInstant(AuthnStatement statement, Assertion assertion,
-                    ValidationContext context) throws AssertionValidationException {
+            @Nonnull protected ValidationResult validateAuthnInstant(@Nonnull final AuthnStatement statement,
+                    @Nonnull final Assertion assertion, @Nonnull final ValidationContext context)
+                            throws AssertionValidationException {
                 throw new RuntimeException();
             }
         };
@@ -193,6 +208,9 @@ public class AuthnStatementValidatorTest extends BaseAssertionValidationTest {
         Assert.assertEquals(validator.validate(buildXMLObject(AttributeStatement.DEFAULT_ELEMENT_NAME), getAssertion(), validationContext), 
                 ValidationResult.INDETERMINATE);  
     }
-    
+ 
+    @Nonnull private SubjectLocality getSubjectLocality() {
+        return Constraint.isNotNull(authnStatement.getSubjectLocality(), "SubjectLocality was null");
+    }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidatorTest.java
index 99f6f61c5..14788905c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidatorTest.java
@@ -26,6 +26,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+ at SuppressWarnings("javadoc")
 public class BearerSubjectConfirmationValidatorTest extends BaseAssertionValidationTest {
     
     private BearerSubjectConfirmationValidator validator;
@@ -35,7 +36,7 @@ public class BearerSubjectConfirmationValidatorTest extends BaseAssertionValidat
     @BeforeMethod(dependsOnMethods="setUpBasicAssertion")
     public void setUp() {
         validator = new BearerSubjectConfirmationValidator();
-        subjectConfirmation = getAssertion().getSubject().getSubjectConfirmations().get(0);
+        subjectConfirmation = getSubject().getSubjectConfirmations().get(0);
     }
     
     @Test
@@ -58,4 +59,4 @@ public class BearerSubjectConfirmationValidatorTest extends BaseAssertionValidat
                 ValidationResult.INDETERMINATE);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidatorTest.java
index 2214c7ac1..a417b157c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidatorTest.java
@@ -28,9 +28,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-/**
- *
- */
+ at SuppressWarnings("javadoc")
 public class DelegationRestrictionConditionValidatorTest extends BaseAssertionValidationTest {
     
     private DelegationRestrictionConditionValidator validator;
@@ -41,7 +39,7 @@ public class DelegationRestrictionConditionValidatorTest extends BaseAssertionVa
     public void setUp() {
         validator = new DelegationRestrictionConditionValidator();
         condition = (Condition) getBuilder(DelegationRestrictionType.TYPE_NAME).buildObject(Condition.DEFAULT_ELEMENT_NAME, DelegationRestrictionType.TYPE_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
     }
     
     @Test
@@ -55,7 +53,7 @@ public class DelegationRestrictionConditionValidatorTest extends BaseAssertionVa
     @Test
     public void testUnexpected() throws AssertionValidationException {
         condition = buildXMLObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
@@ -63,4 +61,4 @@ public class DelegationRestrictionConditionValidatorTest extends BaseAssertionVa
                 ValidationResult.INDETERMINATE);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/HolderOfKeySubjectConfirmationValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/HolderOfKeySubjectConfirmationValidatorTest.java
index 2c9d8f555..49a145e93 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/HolderOfKeySubjectConfirmationValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/HolderOfKeySubjectConfirmationValidatorTest.java
@@ -44,9 +44,7 @@ import org.testng.annotations.Test;
 
 import net.shibboleth.shared.codec.EncodingException;
 
-/**
- *
- */
+ at SuppressWarnings("javadoc")
 public class HolderOfKeySubjectConfirmationValidatorTest extends BaseAssertionValidationTest {
     
     private HolderOfKeySubjectConfirmationValidator validator;
@@ -73,12 +71,12 @@ public class HolderOfKeySubjectConfirmationValidatorTest extends BaseAssertionVa
     protected void setUp() throws NoSuchAlgorithmException, NoSuchProviderException {
         validator = new HolderOfKeySubjectConfirmationValidator();
         
-        subjectConfirmation = getAssertion().getSubject().getSubjectConfirmations().get(0);
+        subjectConfirmation = getSubject().getSubjectConfirmations().get(0);
         subjectConfirmation.setMethod(SubjectConfirmation.METHOD_HOLDER_OF_KEY);
         subjectConfirmationData = buildBasicSubjectConfirmationData(KeyInfoConfirmationDataType.TYPE_NAME);
-        subjectConfirmation.setSubjectConfirmationData(subjectConfirmationData);
         keyInfo = buildXMLObject(KeyInfo.DEFAULT_ELEMENT_NAME);
-        ((KeyInfoConfirmationDataType)subjectConfirmation.getSubjectConfirmationData()).getKeyInfos().add(keyInfo);
+        ((KeyInfoConfirmationDataType)subjectConfirmationData).getKeyInfos().add(keyInfo);
+        subjectConfirmation.setSubjectConfirmationData(subjectConfirmationData);
     }
 
     @Test
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/OneTimeUseConditionValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/OneTimeUseConditionValidatorTest.java
index 42ccecf20..0770e5726 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/OneTimeUseConditionValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/OneTimeUseConditionValidatorTest.java
@@ -42,6 +42,7 @@ import org.testng.annotations.Test;
 /**
  * Unit test for {@link OneTimeUseConditionValidator}.
  */
+ at SuppressWarnings("javadoc")
 public class OneTimeUseConditionValidatorTest extends BaseAssertionValidationTest {
     
     private MemoryStorageService storageService;
@@ -64,7 +65,7 @@ public class OneTimeUseConditionValidatorTest extends BaseAssertionValidationTes
         
         validator = new OneTimeUseConditionValidator(replayCache, null);
         condition = buildXMLObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
     }
     
     @AfterMethod
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/ProxyRestrictionConditionValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/ProxyRestrictionConditionValidatorTest.java
index d2edb85f2..6d650222a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/ProxyRestrictionConditionValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/ProxyRestrictionConditionValidatorTest.java
@@ -28,6 +28,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+ at SuppressWarnings("javadoc")
 public class ProxyRestrictionConditionValidatorTest extends BaseAssertionValidationTest {
     
     private ProxyRestrictionConditionValidator validator;
@@ -38,7 +39,7 @@ public class ProxyRestrictionConditionValidatorTest extends BaseAssertionValidat
     public void setUp() {
         validator = new ProxyRestrictionConditionValidator();
         condition = (Condition) buildXMLObject(ProxyRestriction.DEFAULT_ELEMENT_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
     }
     
     @Test
@@ -52,7 +53,7 @@ public class ProxyRestrictionConditionValidatorTest extends BaseAssertionValidat
     @Test
     public void testUnexpected() throws AssertionValidationException {
         condition = buildXMLObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
-        getAssertion().getConditions().getConditions().add(condition);
+        getConditions().getConditions().add(condition);
         
         ValidationContext validationContext = new ValidationContext(buildBasicStaticParameters());
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchesSubjectConfirmationValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchesSubjectConfirmationValidatorTest.java
index 00a9da82a..2e5bbeb5d 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchesSubjectConfirmationValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchesSubjectConfirmationValidatorTest.java
@@ -26,6 +26,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+ at SuppressWarnings("javadoc")
 public class SenderVouchesSubjectConfirmationValidatorTest extends BaseAssertionValidationTest {
 
     private SenderVouchersSubjectConfirmationValidator validator;
@@ -35,7 +36,7 @@ public class SenderVouchesSubjectConfirmationValidatorTest extends BaseAssertion
     @BeforeMethod(dependsOnMethods="setUpBasicAssertion")
     public void setUp() {
         validator = new SenderVouchersSubjectConfirmationValidator();
-        subjectConfirmation = getAssertion().getSubject().getSubjectConfirmations().get(0);
+        subjectConfirmation = getSubject().getSubjectConfirmations().get(0);
     }
     
     @Test
@@ -58,4 +59,4 @@ public class SenderVouchesSubjectConfirmationValidatorTest extends BaseAssertion
                 ValidationResult.INDETERMINATE);
     }
  
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
index 0230d7222..426b4ddde 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
@@ -114,7 +114,7 @@ public class BaseAssertionValidationTest extends XMLObjectBaseTestCase {
         assertion.setSubject(subject);
         assertion.setConditions(buildBasicConditions());
         
-        SubjectConfirmation subjectConfirmation = buildXMLObject(SubjectConfirmation.DEFAULT_ELEMENT_NAME);
+        final SubjectConfirmation subjectConfirmation = buildXMLObject(SubjectConfirmation.DEFAULT_ELEMENT_NAME);
         // Default to bearer with basic valid confirmation data, but the test can change as appropriate
         subjectConfirmation.setMethod(SubjectConfirmation.METHOD_BEARER);
         subjectConfirmation.setSubjectConfirmationData(buildBasicSubjectConfirmationData());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandlerTest.java
index af25cc757..07adfd0f1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsExtensionsHandlerTest.java
@@ -41,12 +41,17 @@ public class ExtractChannelBindingsExtensionsHandlerTest extends OpenSAMLInitBas
     
     private ExtractChannelBindingsExtensionsHandler handler;
     
+    /**
+     * Test set up.
+     * 
+     * @throws ComponentInitializationException
+     */
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         handler = new ExtractChannelBindingsExtensionsHandler();
         handler.initialize();
         
         messageCtx = new MessageContext();
-        messageCtx.getSubcontext(SAMLBindingContext.class, true).setHasBindingSignature(true);
+        messageCtx.ensureSubcontext(SAMLBindingContext.class).setHasBindingSignature(true);
     }
     
     /**
@@ -86,7 +91,7 @@ public class ExtractChannelBindingsExtensionsHandlerTest extends OpenSAMLInitBas
                 Extensions.DEFAULT_ELEMENT_NAME).buildObject(Extensions.DEFAULT_ELEMENT_NAME);
 
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        ((AuthnRequest) messageCtx.getMessage()).setExtensions(ext);
+        ((AuthnRequest) messageCtx.ensureMessage()).setExtensions(ext);
         
         final ChannelBindings cb = XMLObjectProviderRegistrySupport.getBuilderFactory().<ChannelBindings>ensureBuilder(
                 ChannelBindings.DEFAULT_ELEMENT_NAME).buildObject(ChannelBindings.DEFAULT_ELEMENT_NAME);
@@ -98,7 +103,7 @@ public class ExtractChannelBindingsExtensionsHandlerTest extends OpenSAMLInitBas
         cb2.setValue("bar");
         ext.getUnknownXMLObjects().add(cb2);
         
-        messageCtx.getSubcontext(SAMLBindingContext.class).setHasBindingSignature(false);
+        messageCtx.ensureSubcontext(SAMLBindingContext.class).setHasBindingSignature(false);
         
         handler.invoke(messageCtx);
         final ChannelBindingsContext cbCtx = messageCtx.getSubcontext(ChannelBindingsContext.class);
@@ -115,7 +120,7 @@ public class ExtractChannelBindingsExtensionsHandlerTest extends OpenSAMLInitBas
                 Extensions.DEFAULT_ELEMENT_NAME).buildObject(Extensions.DEFAULT_ELEMENT_NAME);
 
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        ((AuthnRequest) messageCtx.getMessage()).setExtensions(ext);
+        ((AuthnRequest) messageCtx.ensureMessage()).setExtensions(ext);
         
         final ChannelBindings cb = XMLObjectProviderRegistrySupport.getBuilderFactory().<ChannelBindings>ensureBuilder(
                 ChannelBindings.DEFAULT_ELEMENT_NAME).buildObject(ChannelBindings.DEFAULT_ELEMENT_NAME);
@@ -129,7 +134,7 @@ public class ExtractChannelBindingsExtensionsHandlerTest extends OpenSAMLInitBas
         
         handler.invoke(messageCtx);
         final ChannelBindingsContext cbCtx = messageCtx.getSubcontext(ChannelBindingsContext.class);
-        Assert.assertNotNull(cbCtx);
+        assert cbCtx != null;
         Assert.assertEquals(cbCtx.getChannelBindings().size(), 2);
         
         final ChannelBindings[] array = cbCtx.getChannelBindings().toArray(new ChannelBindings[2]);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
index 784631936..b717b517c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
@@ -66,13 +66,13 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
 
         final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
+        messageCtx.ensureSubcontext(SOAP11Context.class).setEnvelope(env);
         
         final ExtractChannelBindingsHeadersHandler handler = new ExtractChannelBindingsHeadersHandler();
         handler.initialize();
         
         handler.invoke(messageCtx);
-        final ChannelBindingsContext cbCtx = messageCtx.getSubcontext(SOAP11Context.class).getSubcontext(
+        final ChannelBindingsContext cbCtx = messageCtx.ensureSubcontext(SOAP11Context.class).getSubcontext(
                 ChannelBindingsContext.class);
         Assert.assertNull(cbCtx);
     }
@@ -89,7 +89,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
 
         final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
+        messageCtx.ensureSubcontext(SOAP11Context.class).setEnvelope(env);
         
         final ChannelBindings cb = XMLObjectProviderRegistrySupport.getBuilderFactory().<ChannelBindings>ensureBuilder(
                 ChannelBindings.DEFAULT_ELEMENT_NAME).buildObject(ChannelBindings.DEFAULT_ELEMENT_NAME);
@@ -107,9 +107,9 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
         handler.initialize();
         
         handler.invoke(messageCtx);
-        final ChannelBindingsContext cbCtx = messageCtx.getSubcontext(SOAP11Context.class).getSubcontext(
+        final ChannelBindingsContext cbCtx = messageCtx.ensureSubcontext(SOAP11Context.class).getSubcontext(
                 ChannelBindingsContext.class);
-        Assert.assertNotNull(cbCtx);
+        assert cbCtx != null;
         Assert.assertEquals(cbCtx.getChannelBindings().size(), 2);
         
         final ChannelBindings[] array = cbCtx.getChannelBindings().toArray(new ChannelBindings[2]);
@@ -129,7 +129,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
 
         final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
-        messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
+        messageCtx.ensureSubcontext(SOAP11Context.class).setEnvelope(env);
         
         final ChannelBindings cb = XMLObjectProviderRegistrySupport.getBuilderFactory().<ChannelBindings>ensureBuilder(
                 ChannelBindings.DEFAULT_ELEMENT_NAME).buildObject(ChannelBindings.DEFAULT_ELEMENT_NAME);
@@ -148,9 +148,9 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
         handler.initialize();
         
         handler.invoke(messageCtx);
-        final ChannelBindingsContext cbCtx = messageCtx.getSubcontext(SOAP11Context.class).getSubcontext(
+        final ChannelBindingsContext cbCtx = messageCtx.ensureSubcontext(SOAP11Context.class).getSubcontext(
                 ChannelBindingsContext.class);
-        Assert.assertNotNull(cbCtx);
+        assert cbCtx != null;
         Assert.assertEquals(cbCtx.getChannelBindings().size(), 1);
         
         final ChannelBindings[] array = cbCtx.getChannelBindings().toArray(new ChannelBindings[2]);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
index 8e88c952e..45241c7fa 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
@@ -42,6 +42,11 @@ public class SAML2AuthnRequestsSignedSecurityHandlerTest extends XMLObjectBaseTe
     
     private SPSSODescriptor spssoDescriptor;
 
+    /**
+     * Test set up.
+     * 
+     * @throws Exception
+     */
     @BeforeMethod
     protected void setUp() throws Exception {
         handler = new SAML2AuthnRequestsSignedSecurityHandler();
@@ -51,9 +56,9 @@ public class SAML2AuthnRequestsSignedSecurityHandlerTest extends XMLObjectBaseTe
         spssoDescriptor.setAuthnRequestsSigned(false);
         
         messageContext = new MessageContext();
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
-            .getSubcontext(SAMLMetadataContext.class, true).setRoleDescriptor(spssoDescriptor);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setEntityId(issuer);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+            .ensureSubcontext(SAMLMetadataContext.class).setRoleDescriptor(spssoDescriptor);
     }
     
     /**
@@ -130,7 +135,7 @@ public class SAML2AuthnRequestsSignedSecurityHandlerTest extends XMLObjectBaseTe
         
         spssoDescriptor.setAuthnRequestsSigned(true);
         
-        messageContext.getSubcontext(SAMLBindingContext.class, true).setHasBindingSignature(true);
+        messageContext.ensureSubcontext(SAMLBindingContext.class).setHasBindingSignature(true);
         
         handler.invoke(messageContext);
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
index f1d862ca5..42fa63d33 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
@@ -230,10 +230,10 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         
         messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(SAMLConstants.SAML20P_NS);
-        messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureValidationParameters(sigValParams);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setEntityId(issuer);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML20P_NS);
+        messageContext.ensureSubcontext(SecurityParametersContext.class).setSignatureValidationParameters(sigValParams);
     }
 
     /**
@@ -247,10 +247,10 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
 
         handler.invoke(messageContext);
         
-        Assert.assertEquals(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).getEntityId(), issuer, 
+        Assert.assertEquals(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).getEntityId(), issuer, 
                 "Unexpected value for Issuer found");
         //TODO before this was evaling isInboundSAMLMessageAuthenticated
-        Assert.assertTrue(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).isAuthenticated(), 
+        Assert.assertTrue(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).isAuthenticated(), 
                 "Unexpected value for context authentication state");
     }
 
@@ -356,10 +356,10 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
 
         handler.invoke(messageContext);
         
-        Assert.assertEquals(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).getEntityId(), issuer, 
+        Assert.assertEquals(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).getEntityId(), issuer, 
                 "Unexpected value for Issuer found");
         //TODO before this was evaling isInboundSAMLMessageAuthenticated
-        Assert.assertTrue(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).isAuthenticated(), 
+        Assert.assertTrue(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).isAuthenticated(), 
                 "Unexpected value for context authentication state");
     }
 
@@ -406,13 +406,13 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         final MessageContext mc = new MessageContext();
         mc.setMessage(buildInboundSAMLMessage());
         SAMLBindingSupport.setRelayState(mc, expectedRelayValue);
-        mc.getSubcontext(SAMLPeerEntityContext.class, true)
-            .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+        mc.ensureSubcontext(SAMLPeerEntityContext.class)
+            .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
         
         final SignatureSigningParameters signingParameters = new SignatureSigningParameters();
         signingParameters.setSigningCredential(signingX509Cred);
         signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-        mc.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+        mc.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(signingParameters);
         
         final MockHttpServletResponse response = new MockHttpServletResponse();
         
@@ -484,13 +484,18 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         Element current = doc.getDocumentElement();
         // head
         current = ElementSupport.getFirstChildElement(current);
+        assert current != null;
         // body
         current = ElementSupport.getNextSiblingElement(current);
+        assert current != null;
         // form
         current = ElementSupport.getFirstChildElement(current);
+        assert current != null;
         current = ElementSupport.getNextSiblingElement(current);
+        assert current != null;
         // div
         current = ElementSupport.getFirstChildElement(current);
+        assert current != null;
         // list of form input fields
         List<Element> inputs =
                 ElementSupport.getChildElementsByTagNameNS(current, null, "input");
@@ -502,4 +507,4 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
index f96ad6979..7a635bb9c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
@@ -209,10 +209,10 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         
         messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        messageContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(SAMLConstants.SAML20P_NS);
-        messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureValidationParameters(sigValParams);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setEntityId(issuer);
+        messageContext.ensureSubcontext(SAMLPeerEntityContext.class).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
+        messageContext.ensureSubcontext(SAMLProtocolContext.class).setProtocol(SAMLConstants.SAML20P_NS);
+        messageContext.ensureSubcontext(SecurityParametersContext.class).setSignatureValidationParameters(sigValParams);
     }
     
     /**
@@ -226,10 +226,10 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         
         handler.invoke(messageContext);
         
-        Assert.assertEquals(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).getEntityId(), issuer, 
+        Assert.assertEquals(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).getEntityId(), issuer, 
                 "Unexpected value for Issuer found");
         //TODO before this was evaling isInboundSAMLMessageAuthenticated
-        Assert.assertTrue(messageContext.getSubcontext(SAMLPeerEntityContext.class, true).isAuthenticated(), 
+        Assert.assertTrue(messageContext.ensureSubcontext(SAMLPeerEntityContext.class).isAuthenticated(), 
                 "Unexpected value for context authentication state");
     }
     
@@ -268,7 +268,8 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         
         final MockHttpServletRequest request = (MockHttpServletRequest) handler.getHttpServletRequest();
         final String queryString = request.getQueryString();
-        request.setQueryString( queryString.replaceFirst("RelayState=", "RelayState=AlteredData") );
+        assert queryString != null;
+        request.setQueryString(queryString.replaceFirst("RelayState=", "RelayState=AlteredData"));
         // Really only the query string is necessary to cause failure, but just to be safe...
         request.setParameter("RelayState", "AlteredData" + request.getParameter("RelayState") );
         
@@ -307,23 +308,23 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         //
         // Encode the "outbound" message context, with simple signature
         //
-        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+        final SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
                 (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>ensureBuilder(
                         AssertionConsumerService.DEFAULT_ELEMENT_NAME);
-        AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
+        final AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
         final MessageContext mc = new MessageContext();
         mc.setMessage(buildInboundSAMLMessage());
         SAMLBindingSupport.setRelayState(mc, expectedRelayValue);
-        mc.getSubcontext(SAMLPeerEntityContext.class, true)
-            .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+        mc.ensureSubcontext(SAMLPeerEntityContext.class)
+            .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
         
         final SignatureSigningParameters signingParameters = new SignatureSigningParameters();
         signingParameters.setSigningCredential(signingX509Cred);
         signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-        mc.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+        mc.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(signingParameters);
         
         final MockHttpServletResponse response = new MockHttpServletResponse();
         
@@ -353,13 +354,20 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         // so have to set them both ways.
         URLBuilder urlBuilder = null;
         try {
-            urlBuilder = new URLBuilder(response.getRedirectedUrl());
-        } catch (MalformedURLException e) {
+            final String url = response.getRedirectedUrl();
+            assert url != null;
+            urlBuilder = new URLBuilder(url);
+        } catch (final MalformedURLException e) {
             Assert.fail("Could not parse redirect url: " + response.getRedirectedUrl());
         }
+        assert urlBuilder != null;
         request.setQueryString(urlBuilder.buildQueryString());
-        for (Pair<String, String> param : urlBuilder.getQueryParams()) {
-            request.setParameter(param.getFirst(), param.getSecond());
+        for (final Pair<String, String> param : urlBuilder.getQueryParams()) {
+            final String one = param.getFirst();
+            final String two = param.getSecond();
+            if (one != null && two != null) {
+                request.setParameter(one, two);
+            }
         }
         
         return request;

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


More information about the commits mailing list