[java-opensaml] branch master updated: Apply eclipse settings, code cleanup pass.

Scott Cantor cantor.2 at osu.edu
Thu Aug 22 16:31:45 EDT 2019


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

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

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

The following commit(s) were added to refs/heads/master by this push:
       new  500d418   Apply eclipse settings, code cleanup pass.
500d418 is described below

commit 500d418b61a8b1edc4e6b07a79fd0e0e4187cea4
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Aug 22 16:31:41 2019 -0400

    Apply eclipse settings, code cleanup pass.
---
 opensaml-core/.settings/org.eclipse.jdt.core.prefs |  73 ++++-
 .../core/metrics/FilteredMetricRegistry.java       |  12 +-
 .../org/opensaml/core/metrics/MetricsSupport.java  |  16 +-
 .../core/xml/io/AbstractXMLObjectMarshaller.java   |   5 +-
 .../core/xml/io/AbstractXMLObjectUnmarshaller.java |  18 +-
 .../xml/persist/FilesystemLoadSaveManager.java     |  15 +-
 .../core/xml/persist/MapLoadSaveManager.java       |  25 +-
 .../opensaml/core/xml/schema/XSBooleanValue.java   |  10 +-
 .../core/xml/util/AbstractSingletonFactory.java    |   3 +-
 .../xml/util/AbstractWrappedSingletonFactory.java  |   5 +-
 .../org/opensaml/core/xml/util/AttributeMap.java   |   3 +-
 .../opensaml/core/metrics/MetricsSupportTest.java  |   4 +-
 .../org/opensaml/core/xml/MarshallingTest.java     |  10 +-
 .../opensaml/core/xml/NamespaceManagerTest.java    |   3 +-
 .../core/xml/UnmarshallingSecurityTest.java        |   6 +-
 .../opensaml/core/xml/XMLObjectBaseTestCase.java   |   6 +-
 .../opensaml/core/xml/util/AttributeMapTest.java   |  11 +-
 .../xml/util/IndexedXMLObjectChildrenListTest.java |   1 -
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../context/navigate/RootContextLookup.java        |  32 +-
 .../messaging/handler/AbstractMessageHandler.java  |   5 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../impl/MessageHandlerErrorStrategyAdapter.java   |  13 +-
 .../impl/URLEvaluatingMessageChannelSecurity.java  |   5 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../action/AbstractConditionalProfileAction.java   |   7 +-
 .../AbstractHandlerDelegatingProfileAction.java    |   6 +-
 .../navigate/CurrentOrPreviousEventLookup.java     |   6 +-
 .../profile/logic/PredicateAccessControl.java      |   7 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../profile/action/impl/DecodeMessageTest.java     |  13 +-
 .../profile/action/impl/EncodeMessageTest.java     |   3 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../common/binding/AbstractEndpointResolver.java   |  22 +-
 .../saml/common/binding/SAMLBindingSupport.java    |  39 ++-
 .../messaging/SAMLMessageSecuritySupport.java      |   3 +-
 .../messaging/context/SAMLPeerEntityContext.java   |   7 +-
 .../context/SAMLSubjectNameIdentifierContext.java  |  15 +-
 .../SAMLBindingContextBindingFunction.java         |   3 +-
 .../navigate/SAMLMessageInfoContextIDFunction.java |   3 +-
 ...SAMLMessageInfoContextIssueInstantFunction.java |   3 +-
 .../SAMLProtocolContextProtocolFunction.java       |   3 +-
 .../messaging/logic/ProxiedRequesterPredicate.java |   3 +-
 .../soap/SAMLSOAPClientContextBuilder.java         |   6 +-
 .../profile/AbstractNameIdentifierGenerator.java   |  12 +-
 .../logic/AbstractNameIDPolicyPredicate.java       |  19 +-
 .../profile/logic/DefaultLocalErrorPredicate.java  |   5 +-
 .../profile/logic/EntityAttributesPredicate.java   |   9 +-
 .../MetadataNameIdentifierFormatStrategy.java      |   3 +-
 .../saml/common/xml/SAMLSchemaBuilder.java         |   4 +-
 .../opensaml/saml/config/SAMLConfiguration.java    |   3 +-
 .../opensaml/saml/metadata/EntityGroupName.java    |   3 +-
 .../support/AttributeConsumingServiceSelector.java |   5 +-
 .../metadata/support/SAML2MetadataSupport.java     |   5 +-
 .../artifact/SAML1ArtifactType0001Builder.java     |   3 +-
 .../saml2/assertion/SAML20AssertionValidator.java  |  18 +-
 .../artifact/SAML2ArtifactType0004Builder.java     |   3 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../impl/StorageServiceSAMLArtifactMap.java        |   6 +-
 .../PopulateSignatureSigningParametersHandler.java |   7 +-
 .../binding/impl/SAMLProtocolAndRoleHandler.java   |   5 +-
 .../BaseSAMLSimpleSignatureSecurityHandler.java    |  41 ++-
 .../impl/BaseSAMLXMLSignatureSecurityHandler.java  |   3 +-
 .../impl/MessageLifetimeSecurityHandler.java       |   3 +-
 .../impl/MessageReplaySecurityHandler.java         |   5 +-
 .../impl/OperationContextEntityIDLookup.java       |   2 +-
 .../impl/ReceivedEndpointSecurityHandler.java      |  10 +-
 .../impl/SAMLMDClientCertAuthSecurityHandler.java  |   5 +-
 .../impl/PopulateSignatureSigningParameters.java   |   7 +-
 .../impl/BasicDynamicTrustedNamesStrategy.java     |   3 +-
 .../resolver/filter/impl/PredicateFilter.java      |   3 +-
 .../impl/AbstractBatchMetadataResolver.java        |   8 +-
 .../impl/AbstractDynamicMetadataResolver.java      |  50 ++--
 .../resolver/impl/AbstractMetadataResolver.java    |  11 +-
 .../impl/AbstractReloadingMetadataResolver.java    |   7 +-
 .../resolver/impl/BasicRoleDescriptorResolver.java | 325 ---------------------
 .../resolver/impl/EntityIDDigestGenerator.java     |  28 +-
 .../impl/FileBackedHTTPMetadataResolver.java       |  13 +-
 .../impl/HTTPEntityIDRequestURLBuilder.java        |   5 +-
 .../impl/LocalDynamicMetadataResolver.java         |   7 +-
 .../impl/PredicateRoleDescriptorResolver.java      |   8 +-
 .../resolver/impl/RegexRequestURLBuilder.java      |   9 +-
 .../resolver/index/impl/EndpointMetadataIndex.java |   7 +-
 .../resolver/index/impl/MetadataIndexManager.java  |   6 +-
 .../resolver/index/impl/MetadataIndexStore.java    |   3 +-
 .../resolver/index/impl/MetadataIndexSupport.java  |  25 +-
 .../resolver/index/impl/RoleMetadataIndex.java     |   5 +-
 .../index/impl/SAMLArtifactMetadataIndex.java      |  13 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |   2 +-
 .../profile/impl/AddNameIdentifierToSubjects.java  |   3 +-
 .../impl/BearerSubjectConfirmationValidator.java   |   3 +-
 .../DelegationRestrictionConditionValidator.java   |   3 +-
 ...SenderVouchersSubjectConfirmationValidator.java |   3 +-
 .../binding/decoding/impl/HTTPArtifactDecoder.java |  13 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |   2 +-
 .../encoding/impl/HTTPPostSimpleSignEncoder.java   |   3 +-
 .../SAML2HTTPPostSimpleSignSecurityHandler.java    |   3 +-
 .../saml2/profile/impl/AbstractEncryptAction.java  |   2 +-
 .../saml2/profile/impl/AddNameIDToSubjects.java    |   5 +-
 .../saml2/profile/impl/AddStatusResponseShell.java |   2 +-
 .../impl/AddSubjectConfirmationToSubjects.java     |   8 +-
 ...ultSAML20AssertionValidationContextBuilder.java |   9 +-
 ...ecuritySAML20AssertionTokenSecurityHandler.java |  17 +-
 .../InlineSelfEncryptionParametersStrategy.java    |   5 +-
 .../security/impl/MetadataCredentialResolver.java  |   8 +-
 ...MetadataSignatureSigningParametersResolver.java |   3 +-
 .../org/opensaml/saml/common/RoundTripTest.java    |  10 +-
 .../binding/impl/DefaultEndpointResolverTest.java  |   6 +-
 ...ulateSignatureSigningParametersHandlerTest.java |   4 +-
 .../impl/SAMLOutboundDestinationHandlerTest.java   |  23 +-
 .../impl/SAMLProtocolAndRoleHandlerTest.java       |   6 +-
 .../impl/EndpointURLSchemeSecurityHandlerTest.java |   9 +-
 .../SAMLMDClientCertAuthSecurityHandlerTest.java   |   6 +-
 .../AddAudienceRestrictionToAssertionsTest.java    |  14 +-
 .../AddNotBeforeConditionToAssertionsTest.java     |   3 +-
 .../AddNotOnOrAfterConditionToAssertionsTest.java  |   5 +-
 .../PopulateSignatureSigningParametersTest.java    |   2 +-
 .../impl/DelegationRestrictionTypeTest.java        |  10 +-
 .../saml/ext/saml2mdui/impl/DiscoHintsTest.java    |   2 +-
 .../saml/ext/saml2mdui/impl/KeywordsTest.java      |   2 +-
 .../saml/ext/saml2mdui/impl/UIInfoTest.java        |   2 +-
 .../filter/impl/RequiredValidUntilTest.java        |   5 +-
 .../AbstractDynamicHTTPMetadataResolverTest.java   |   9 +-
 .../impl/AbstractDynamicMetadataResolverTest.java  |  30 +-
 .../impl/BasicRoleDescriptorResolverTest.java      | 168 -----------
 .../resolver/impl/DOMMetadataResolverTest.java     |  18 +-
 .../resolver/impl/HTTPMetadataResolverTest.java    |   2 +-
 ...MetadataQueryProtocolRequestURLBuilderTest.java |   7 +-
 .../impl/ConstantEntityDescriptorFunction.java     |   4 +-
 .../index/impl/EndpointMetadataIndexTest.java      |   6 +-
 .../index/impl/MetadataIndexManagerTest.java       |  25 +-
 .../index/impl/MetadataIndexStoreTest.java         |   2 +-
 .../binding/encoding/impl/HTTPPostEncoderTest.java |   1 -
 .../AddDoNotCacheConditionToAssertionsTest.java    |  14 +-
 .../assertion/BaseAssertionValidationTest.java     |   4 +-
 .../binding/encoding/impl/HTTPPostEncoderTest.java |  22 +-
 .../impl/HTTPPostSimpleSignEncoderTest.java        |  20 +-
 ...SAML2HTTPPostSimpleSignSecurityHandlerTest.java |  21 +-
 ...edirectDeflateSignatureSecurityHandlerTest.java |  21 +-
 .../opensaml/saml/saml2/core/AuthnRequestTest.java |   2 +-
 .../saml2/core/ResponseSuccessAuthnAttribTest.java |  16 +-
 .../core/impl/KeyInfoConfirmationDataTypeTest.java |   7 +-
 .../AddOneTimeUseConditionToAssertionsTest.java    |   6 +-
 .../impl/AddProxyRestrictionToAssertionsTest.java  |   4 +-
 ...itySAML20AssertionTokenSecurityHandlerTest.java |  31 +-
 ...InlineSelfEncryptionParametersStrategyTest.java |   2 +-
 ...MLMetadataEncryptionParametersResolverTest.java |   4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../security/credential/CredentialSupport.java     |  18 +-
 .../org/opensaml/security/crypto/KeySupport.java   |   5 +-
 .../security/x509/BasicX509Credential.java         |   3 +-
 .../org/opensaml/security/x509/X509Support.java    |   8 +-
 .../opensaml/security/crypto/SigningUtilTest.java  |   8 +-
 .../opensaml/security/x509/X509SupportTest.java    |  14 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../impl/EvaluableCredentialCriteriaRegistry.java  |  14 +-
 .../impl/AbstractChainingCredentialResolver.java   |   3 +-
 .../impl/AbstractCredentialResolver.java           |   3 +-
 ...bstractCriteriaFilteringCredentialResolver.java |  14 +-
 .../impl/BaseClientCertAuthSecurityHandler.java    |  23 +-
 .../impl/BaseTrustEngineSecurityHandler.java       |   3 +-
 ...opulateHttpClientSecurityParametersHandler.java |   7 +-
 .../impl/BasicX509CredentialNameEvaluator.java     |   5 +-
 .../x509/impl/CertPathPKIXTrustEvaluator.java      |   2 +-
 ...BasicClientTLSValidationParametersResolver.java |   3 +-
 .../trust/impl/ChainingTrustEngineTest.java        |  12 +-
 .../x509/impl/CertPathPKIXTrustEvaluatorTest.java  |   4 +-
 .../impl/PKIXX509CredentialTrustEngineTest.java    |   6 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../http/AbstractPipelineHttpSOAPClient.java       |   8 +-
 .../opensaml/soap/client/http/HttpSOAPClient.java  |   3 +-
 .../client/http/PipelineFactoryHttpSOAPClient.java |  11 +-
 .../messaging/SOAPClientDestinationURILookup.java  |   3 +-
 .../SOAPClientPipelineNameMappingFunction.java     |   2 +-
 .../SOAPClientPipelineNameMappingPredicate.java    |   2 +-
 .../SOAPClientSecurityProfileIdLookupFunction.java |   7 +-
 .../soap/messaging/SOAPMessagingSupport.java       |   3 +-
 .../wssecurity/messaging/WSSecurityContext.java    |   4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../java/org/opensaml/soap/WSBaseTestCase.java     |   1 -
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../storage/AbstractMapBackedStorageService.java   |  97 +++---
 .../opensaml/storage/AbstractStorageService.java   |  21 +-
 .../org/opensaml/storage/MutableStorageRecord.java |   4 +-
 .../java/org/opensaml/storage/ReplayCache.java     |  11 +-
 .../java/org/opensaml/storage/StorageService.java  |  25 +-
 .../org/opensaml/storage/StorageServiceTest.java   |  26 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../opensaml/storage/impl/JPAStorageRecord.java    |   4 +-
 .../opensaml/storage/impl/JPAStorageService.java   |  57 ++--
 .../opensaml/storage/impl/LDAPStorageService.java  |   8 +-
 .../storage/impl/MemoryStorageService.java         |  10 +-
 .../storage/impl/client/ClientStorageService.java  |  70 +++--
 .../client/PopulateClientStorageLoadContext.java   |   9 +-
 .../impl/memcached/MemcachedStorageRecord.java     |   4 +-
 .../impl/memcached/MemcachedStorageService.java    |  42 +--
 .../impl/memcached/StorageRecordTranscoder.java    |   8 +-
 .../storage/impl/JPAStorageServiceTest.java        |  32 +-
 .../storage/impl/LDAPStorageServiceTest.java       |   2 +-
 .../impl/client/LoadClientStorageServicesTest.java |   9 +-
 .../impl/memcached/MemcachedStorageRecordTest.java |   4 +-
 .../memcached/MemcachedStorageServiceTest.java     |  14 +-
 .../memcached/StorageRecordTranscoderTest.java     |  10 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../xmlsec/algorithm/AlgorithmSupport.java         |   6 +-
 .../config/DecryptionParserPoolInitializer.java    |   5 -
 .../support/ChainingEncryptedKeyResolver.java      |  10 +-
 .../xmlsec/encryption/support/Decrypter.java       |  34 +--
 .../xmlsec/encryption/support/Encrypter.java       |  22 +-
 .../opensaml/xmlsec/keyinfo/KeyInfoCriterion.java  |   3 +-
 .../opensaml/xmlsec/keyinfo/KeyInfoSupport.java    | 141 ++++-----
 .../xmlsec/signature/support/SignatureSupport.java |   5 +-
 .../opensaml/xmlsec/crypto/XMLSigningUtilTest.java |   8 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  73 ++++-
 .../encryption/impl/AgreementMethodImpl.java       |  22 +-
 .../encryption/impl/EncryptionMethodImpl.java      |  14 +-
 .../encryption/impl/EncryptionPropertiesImpl.java  |   8 +-
 .../encryption/impl/EncryptionPropertyImpl.java    |   6 +-
 .../xmlsec/encryption/impl/ReferenceListImpl.java  |   8 +-
 .../xmlsec/encryption/impl/TransformsImpl.java     |   8 +-
 .../impl/BasicDecryptionParametersResolver.java    |   3 +-
 .../impl/BasicEncryptionParametersResolver.java    |  43 +--
 .../BasicSignatureSigningParametersResolver.java   |   9 +-
 ...BasicSignatureValidationParametersResolver.java |   3 +-
 .../keyinfo/impl/BasicKeyInfoGeneratorFactory.java |   3 +-
 .../keyinfo/impl/StaticKeyInfoGenerator.java       |   3 +-
 .../keyinfo/impl/X509KeyInfoGeneratorFactory.java  |   5 +-
 .../impl/provider/AbstractKeyInfoProvider.java     |   3 +-
 .../impl/provider/KeyInfoReferenceProvider.java    |   3 +-
 ...pulateSignatureValidationParametersHandler.java |   2 +-
 .../xmlsec/signature/impl/KeyInfoImpl.java         |   6 +-
 .../xmlsec/signature/impl/PGPDataImpl.java         |   8 +-
 .../xmlsec/signature/impl/SPKIDataImpl.java        |   8 +-
 .../xmlsec/signature/impl/TransformImpl.java       |   6 +-
 .../xmlsec/signature/impl/TransformsImpl.java      |   8 +-
 .../xmlsec/signature/impl/X509DataImpl.java        |   8 +-
 .../support/impl/BaseSignatureTrustEngine.java     |   3 +-
 .../impl/ExplicitKeySignatureTrustEngine.java      |   3 +-
 .../support/impl/PKIXSignatureTrustEngine.java     |   3 +-
 .../support/impl/SignatureAlgorithmValidator.java  |   3 +-
 .../encryption/impl/AgreementMethodTest.java       |   4 +-
 .../xmlsec/encryption/impl/DataReferenceTest.java  |   4 +-
 .../xmlsec/encryption/impl/KeyReferenceTest.java   |   4 +-
 .../opensaml/xmlsec/encryption/impl/MGFTest.java   |   2 +-
 .../support/ChainingEncryptedKeyResolverTest.java  |  10 +-
 .../encryption/support/SimpleDecryptionTest.java   |   8 +-
 .../encryption/support/SimpleEncryptionTest.java   |  27 +-
 ...leKeyInfoReferenceEncryptedKeyResolverTest.java |   8 +-
 ...pleRetrievalMethodEncryptedKeyResolverTest.java |  10 +-
 .../AbstractSecurityParametersResolverTest.java    |   3 +-
 .../BasicEncryptionParametersResolverTest.java     |   6 +-
 .../xmlsec/keyinfo/KeyInfoSupportTest.java         |   4 +-
 .../impl/ChainingSignatureTrustEngineTest.java     |   6 +-
 .../support/impl/PKIXSignatureTrustEngineTest.java |  16 +-
 258 files changed, 2403 insertions(+), 1923 deletions(-)

diff --git a/opensaml-core/.settings/org.eclipse.jdt.core.prefs b/opensaml-core/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-core/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-core/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java b/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
index a16f602..9f7af5f 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/metrics/FilteredMetricRegistry.java
@@ -88,36 +88,32 @@ public class FilteredMetricRegistry extends MetricRegistry {
     @Override public Counter counter(final String name) {
         if (metricFilter != null && metricFilter.matches(name, null)) {
             return super.counter(name);
-        } else {
-            return disabledCounter;
         }
+        return disabledCounter;
     }
 
     /** {@inheritDoc} */
     @Override public Histogram histogram(final String name) {
         if (metricFilter != null && metricFilter.matches(name, null)) {
             return super.histogram(name);
-        } else {
-            return disabledHistogram;
         }
+        return disabledHistogram;
     }
 
     /** {@inheritDoc} */
     @Override public Meter meter(final String name) {
         if (metricFilter != null && metricFilter.matches(name, null)) {
             return super.meter(name);
-        } else {
-            return disabledMeter;
         }
+        return disabledMeter;
     }
 
     /** {@inheritDoc} */
     @Override public Timer timer(final String name) {
         if (metricFilter != null && metricFilter.matches(name, null)) {
             return super.timer(name);
-        } else {
-            return disabledTimer;
         }
+        return disabledTimer;
     }
 
     /**
diff --git a/opensaml-core/src/main/java/org/opensaml/core/metrics/MetricsSupport.java b/opensaml-core/src/main/java/org/opensaml/core/metrics/MetricsSupport.java
index 8647d88..578fe0c 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/metrics/MetricsSupport.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/metrics/MetricsSupport.java
@@ -127,9 +127,8 @@ public final class MetricsSupport {
                 if (replaceExisting) {
                     metricRegistry.remove(name);
                     return metricRegistry.register(name, metric);
-                } else {
-                    throw e;
                 }
+                throw e;
             }
         }
         
@@ -237,11 +236,7 @@ public final class MetricsSupport {
      * @return the timer context, or null if the input timer was null
      */
     @Nullable public static Context startTimer(@Nullable final Timer timer) {
-        if (timer != null) {
-            return timer.time();
-        } else {
-            return null;
-        }
+        return timer != null ? timer.time() : null;
     }
     
     /**
@@ -252,10 +247,7 @@ public final class MetricsSupport {
      * @return the elapsed time in nanoseconds, or null if the input context was null
      */
     @Nullable public static Long stopTimer(@Nullable final Context context) {
-        if (context != null) {
-            return context.stop();
-        } else {
-            return null;
-        }
+        return context != null ? context.stop() : null;
     }
+
 }
\ No newline at end of file
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectMarshaller.java b/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectMarshaller.java
index dbbda46..969a5c1 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectMarshaller.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectMarshaller.java
@@ -261,10 +261,9 @@ public abstract class AbstractXMLObjectMarshaller implements Marshaller {
                                 + ", child of " + xmlObject.getElementQName();
                         log.error(errorMsg);
                         throw new MarshallingException(errorMsg);
-                    } else {
-                        log.trace("No marshaller was registered for {}, child of {}. Using default marshaller",
-                                childXMLObject.getElementQName(), xmlObject.getElementQName());
                     }
+                    log.trace("No marshaller was registered for {}, child of {}. Using default marshaller",
+                            childXMLObject.getElementQName(), xmlObject.getElementQName());
                 }
 
                 log.trace("Marshalling {} and adding it to DOM", childXMLObject.getElementQName());
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectUnmarshaller.java b/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectUnmarshaller.java
index ede3797..759ced3 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectUnmarshaller.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/io/AbstractXMLObjectUnmarshaller.java
@@ -156,11 +156,10 @@ public abstract class AbstractXMLObjectUnmarshaller implements Unmarshaller {
                 final String errorMsg = "Unable to locate builder for " + QNameSupport.getNodeQName(domElement);
                 log.error(errorMsg);
                 throw new UnmarshallingException(errorMsg);
-            } else {
-                if (log.isTraceEnabled()) {
-                    log.trace("No builder was registered for {} but the default builder {} was available, using it.",
-                            QNameSupport.getNodeQName(domElement), xmlObjectBuilder.getClass().getName());
-                }
+            }
+            if (log.isTraceEnabled()) {
+                log.trace("No builder was registered for {} but the default builder {} was available, using it.",
+                        QNameSupport.getNodeQName(domElement), xmlObjectBuilder.getClass().getName());
             }
         }
 
@@ -308,11 +307,10 @@ public abstract class AbstractXMLObjectUnmarshaller implements Unmarshaller {
                                 + xmlObject.getElementQName();
                 log.error(errorMsg);
                 throw new UnmarshallingException(errorMsg);
-            } else {
-                if (log.isTraceEnabled()) {
-                    log.trace("No unmarshaller was registered for {}, child of {}. Using default unmarshaller.",
-                            QNameSupport.getNodeQName(childElement), xmlObject.getElementQName());
-                }
+            }
+            if (log.isTraceEnabled()) {
+                log.trace("No unmarshaller was registered for {}, child of {}. Using default unmarshaller.",
+                        QNameSupport.getNodeQName(childElement), xmlObject.getElementQName());
             }
         }
 
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/persist/FilesystemLoadSaveManager.java b/opensaml-core/src/main/java/org/opensaml/core/xml/persist/FilesystemLoadSaveManager.java
index 7fb41ad..b7404d2 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/persist/FilesystemLoadSaveManager.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/persist/FilesystemLoadSaveManager.java
@@ -309,12 +309,10 @@ public class FilesystemLoadSaveManager<T extends XMLObject> extends AbstractCond
             if (success) {
                 clearLoadLastModified(key);
                 return true;
-            } else {
-                throw new IOException(String.format("Error removing target file: %s", file.getAbsolutePath()));
             }
-        } else {
-            return false;
+            throw new IOException(String.format("Error removing target file: %s", file.getAbsolutePath()));
         }
+        return false;
     }
 
     /** {@inheritDoc} */
@@ -327,12 +325,11 @@ public class FilesystemLoadSaveManager<T extends XMLObject> extends AbstractCond
         final File newFile = buildFile(newKey);
         if (newFile.exists()) {
             throw new IOException(String.format("Specified new key already exists: %s", newKey));
-        } else {
-            Files.move(currentFile, newFile);
-            updateLoadLastModified(newKey, getLoadLastModified(currentKey));
-            clearLoadLastModified(currentKey);
-            return true;
         }
+        Files.move(currentFile, newFile);
+        updateLoadLastModified(newKey, getLoadLastModified(currentKey));
+        clearLoadLastModified(currentKey);
+        return true;
     }
     
     /**
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/persist/MapLoadSaveManager.java b/opensaml-core/src/main/java/org/opensaml/core/xml/persist/MapLoadSaveManager.java
index 103c353..3997e1a 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/persist/MapLoadSaveManager.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/persist/MapLoadSaveManager.java
@@ -142,10 +142,9 @@ public class MapLoadSaveManager<T extends XMLObject> extends AbstractConditional
     public void save(final String key, final T xmlObject, final boolean overwrite) throws IOException {
         if (!overwrite && exists(key)) {
             throw new IOException(String.format("Value already exists for key '%s'", key));
-        } else {
-            backingMap.put(key, xmlObject);
-            dataLastModified.put(key, Instant.now());
         }
+        backingMap.put(key, xmlObject);
+        dataLastModified.put(key, Instant.now());
     }
 
     /** {@inheritDoc} */
@@ -164,17 +163,17 @@ public class MapLoadSaveManager<T extends XMLObject> extends AbstractConditional
         }
         if (backingMap.containsKey(newKey)) {
             throw new IOException(String.format("Specified new key already exists: %s", newKey));
-        } else {
-            backingMap.put(newKey, value);
-            backingMap.remove(currentKey);
-            
-            dataLastModified.put(newKey, dataLastModified.get(currentKey));
-            dataLastModified.remove(currentKey);
-            
-            updateLoadLastModified(newKey, getLoadLastModified(currentKey));
-            clearLoadLastModified(currentKey);
-            return true;
         }
+        
+        backingMap.put(newKey, value);
+        backingMap.remove(currentKey);
+        
+        dataLastModified.put(newKey, dataLastModified.get(currentKey));
+        dataLastModified.remove(currentKey);
+        
+        updateLoadLastModified(newKey, getLoadLastModified(currentKey));
+        clearLoadLastModified(currentKey);
+        return true;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/schema/XSBooleanValue.java b/opensaml-core/src/main/java/org/opensaml/core/xml/schema/XSBooleanValue.java
index b4b60d3..6b53a91 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/schema/XSBooleanValue.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/schema/XSBooleanValue.java
@@ -149,14 +149,10 @@ public class XSBooleanValue {
         }
 
         if (numericRepresentation) {
-            if (value.booleanValue()) {
-                return "1";
-            } else {
-                return "0";
-            }
-        } else {
-            return value.toString();
+            return value.booleanValue() ? "1" : "0";
         }
+        
+        return value.toString();
     }
 
     /**
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractSingletonFactory.java b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractSingletonFactory.java
index 3c9d434..003e251 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractSingletonFactory.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractSingletonFactory.java
@@ -37,9 +37,8 @@ public abstract class AbstractSingletonFactory<Input, Output> implements Singlet
         if (output != null) {
             log.trace("Input key mapped to a non-null value, returning output");
             return output;
-        } else {
-            log.trace("Input key mapped to a null value");
         }
+        log.trace("Input key mapped to a null value");
         
         log.trace("Creating new output instance and inserting to factory map");
         output = createNewInstance(input);
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractWrappedSingletonFactory.java b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractWrappedSingletonFactory.java
index d42aa8c..ae92821 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractWrappedSingletonFactory.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AbstractWrappedSingletonFactory.java
@@ -185,10 +185,9 @@ public abstract class AbstractWrappedSingletonFactory<Input, Output>
             if (outputRef.get() != null) {
                 log.trace("WeakReference referent was non-null, returning referent");
                 return outputRef.get();
-            } else {
-                log.trace("WeakReference referent was null, removing WeakReference entry from map");
-                map.remove(input);
             }
+            log.trace("WeakReference referent was null, removing WeakReference entry from map");
+            map.remove(input);
         }
         return null;
     }
diff --git a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AttributeMap.java b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AttributeMap.java
index ebf71fa..3cba342 100644
--- a/opensaml-core/src/main/java/org/opensaml/core/xml/util/AttributeMap.java
+++ b/opensaml-core/src/main/java/org/opensaml/core/xml/util/AttributeMap.java
@@ -496,9 +496,8 @@ public class AttributeMap implements Map<QName, String> {
             final QName name = QNameSupport.constructQName(nsURI, localPart, candidatePrefix);
             log.trace("Resolved QName '{}'", name);
             return name;
-        } else {
-            log.trace("Namespace URI for candidate prefix '{}' could not be resolved", candidatePrefix);
         }
+        log.trace("Namespace URI for candidate prefix '{}' could not be resolved", candidatePrefix);
         
         log.trace("Value was either not a QName, or namespace URI could not be resolved");
         
diff --git a/opensaml-core/src/test/java/org/opensaml/core/metrics/MetricsSupportTest.java b/opensaml-core/src/test/java/org/opensaml/core/metrics/MetricsSupportTest.java
index 1060297..618c077 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/metrics/MetricsSupportTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/metrics/MetricsSupportTest.java
@@ -36,11 +36,11 @@ public class MetricsSupportTest {
     
     @BeforeClass
     public void setUpGauges() {
-        gauge1 = new Gauge<Integer>() {
+        gauge1 = new Gauge<>() {
             public Integer getValue() {
                 return 42;
             }};
-        gauge2 = new Gauge<Integer>() {
+        gauge2 = new Gauge<>() {
             public Integer getValue() {
                 return 100;
             }};
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/MarshallingTest.java b/opensaml-core/src/test/java/org/opensaml/core/xml/MarshallingTest.java
index b67e20c..5b803e1 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/MarshallingTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/MarshallingTest.java
@@ -81,20 +81,20 @@ public class MarshallingTest extends XMLObjectBaseTestCase {
 
         SimpleXMLObjectBuilder sxoBuilder = (SimpleXMLObjectBuilder) builderFactory.getBuilder(simpleXMLObjectQName);
 
-        SimpleXMLObject sxObject = (SimpleXMLObject) sxoBuilder.buildObject();
+        SimpleXMLObject sxObject = sxoBuilder.buildObject();
 
-        SimpleXMLObject child1 = (SimpleXMLObject) sxoBuilder.buildObject();
+        SimpleXMLObject child1 = sxoBuilder.buildObject();
         child1.setValue("Content1");
         sxObject.getSimpleXMLObjects().add(child1);
 
-        SimpleXMLObject child2 = (SimpleXMLObject) sxoBuilder.buildObject();
+        SimpleXMLObject child2 = sxoBuilder.buildObject();
         child2.setValue("Content2");
         sxObject.getSimpleXMLObjects().add(child2);
 
-        SimpleXMLObject child3 = (SimpleXMLObject) sxoBuilder.buildObject();
+        SimpleXMLObject child3 = sxoBuilder.buildObject();
         sxObject.getSimpleXMLObjects().add(child3);
 
-        SimpleXMLObject grandchild1 = (SimpleXMLObject) sxoBuilder.buildObject();
+        SimpleXMLObject grandchild1 = sxoBuilder.buildObject();
         grandchild1.setValue("Content3");
         child3.getSimpleXMLObjects().add(grandchild1);
 
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/NamespaceManagerTest.java b/opensaml-core/src/test/java/org/opensaml/core/xml/NamespaceManagerTest.java
index 909da95..fdbe785 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/NamespaceManagerTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/NamespaceManagerTest.java
@@ -278,9 +278,8 @@ public class NamespaceManagerTest extends XMLObjectBaseTestCase {
         if (Objects.equals(ns1.getNamespaceURI(), ns2.getNamespaceURI()) 
                 && Objects.equals(ns1.getNamespacePrefix(), ns2.getNamespacePrefix())) {
             return true;
-        } else {
-            return false;
         }
+        return false;
     }
     
     private Namespace findNamespace(NamespaceManager manager, Namespace ns) {
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/UnmarshallingSecurityTest.java b/opensaml-core/src/test/java/org/opensaml/core/xml/UnmarshallingSecurityTest.java
index de53c51..5721e48 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/UnmarshallingSecurityTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/UnmarshallingSecurityTest.java
@@ -77,7 +77,7 @@ public class UnmarshallingSecurityTest extends XMLObjectBaseTestCase {
         Document document = parserPoolInsecure.parse(UnmarshallingSecurityTest.class.getResourceAsStream(documentLocation));
 
         Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(document.getDocumentElement());
-        SimpleXMLObject sxObject = (SimpleXMLObject) unmarshaller.unmarshall(document.getDocumentElement());
+        unmarshaller.unmarshall(document.getDocumentElement());
     }
 
     /**
@@ -109,7 +109,7 @@ public class UnmarshallingSecurityTest extends XMLObjectBaseTestCase {
         Document document = parserPoolInsecure.parse(UnmarshallingSecurityTest.class.getResourceAsStream(documentLocation));
 
         Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(document.getDocumentElement());
-        SimpleXMLObject sxObject = (SimpleXMLObject) unmarshaller.unmarshall(document.getDocumentElement());
+        unmarshaller.unmarshall(document.getDocumentElement());
     }
 
     /**
@@ -141,7 +141,7 @@ public class UnmarshallingSecurityTest extends XMLObjectBaseTestCase {
         Document document = parserPoolInsecure.parse(UnmarshallingSecurityTest.class.getResourceAsStream(documentLocation));
 
         Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(document.getDocumentElement());
-        SimpleXMLObject sxObject = (SimpleXMLObject) unmarshaller.unmarshall(document.getDocumentElement());
+        unmarshaller.unmarshall(document.getDocumentElement());
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/XMLObjectBaseTestCase.java b/opensaml-core/src/test/java/org/opensaml/core/xml/XMLObjectBaseTestCase.java
index cd547a0..9963dfc 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/XMLObjectBaseTestCase.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/XMLObjectBaseTestCase.java
@@ -175,15 +175,13 @@ public abstract class XMLObjectBaseTestCase extends OpenSAMLInitBaseTestCase {
         } catch (final XMLParserException e) {
             if (propagateErrors) {
                 throw e;
-            } else {
-                Assert.fail("Unable to parse element file " + elementFile);
             }
+            Assert.fail("Unable to parse element file " + elementFile);
         } catch (final UnmarshallingException e) {
             if (propagateErrors) {
                 throw e;
-            } else {
-                Assert.fail("Unmarshalling failed when parsing element file " + elementFile + ": " + e);
             }
+            Assert.fail("Unmarshalling failed when parsing element file " + elementFile + ": " + e);
         }
 
         return null;
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/util/AttributeMapTest.java b/opensaml-core/src/test/java/org/opensaml/core/xml/util/AttributeMapTest.java
index 1fbaeef..065aa8f 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/util/AttributeMapTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/util/AttributeMapTest.java
@@ -63,7 +63,7 @@ public class AttributeMapTest extends XMLObjectBaseTestCase {
 
     @BeforeMethod
     protected void setUp() throws Exception {
-        xsAnyBuilder = (XMLObjectBuilder<XSAny>) builderFactory.getBuilder(XSAny.TYPE_NAME);
+        xsAnyBuilder = builderFactory.<XSAny>getBuilderOrThrow(XSAny.TYPE_NAME);
         owner = xsAnyBuilder.buildObject(elementName);
         attributeMap = owner.getUnknownAttributes();
     }
@@ -181,13 +181,12 @@ public class AttributeMapTest extends XMLObjectBaseTestCase {
         return new Namespace(uri, prefix);
     }
     
-    private boolean equals(Namespace ns1, Namespace ns2) {
-        if (Objects.equals(ns1.getNamespaceURI(), ns1.getNamespaceURI()) 
-                && Objects.equals(ns2.getNamespacePrefix(), ns2.getNamespacePrefix())) {
+    private boolean equals(Namespace nsa, Namespace nsb) {
+        if (Objects.equals(nsa.getNamespaceURI(), nsa.getNamespaceURI()) 
+                && Objects.equals(nsb.getNamespacePrefix(), nsb.getNamespacePrefix())) {
             return true;
-        } else {
-            return false;
         }
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-core/src/test/java/org/opensaml/core/xml/util/IndexedXMLObjectChildrenListTest.java b/opensaml-core/src/test/java/org/opensaml/core/xml/util/IndexedXMLObjectChildrenListTest.java
index e204398..7226196 100644
--- a/opensaml-core/src/test/java/org/opensaml/core/xml/util/IndexedXMLObjectChildrenListTest.java
+++ b/opensaml-core/src/test/java/org/opensaml/core/xml/util/IndexedXMLObjectChildrenListTest.java
@@ -71,7 +71,6 @@ public class IndexedXMLObjectChildrenListTest {
      */
     @Test
     public void testSet() {
-        SimpleXMLObjectBuilder sxoBuilder = new SimpleXMLObjectBuilder();
         SimpleXMLObject parentObject = sxoBuilder.buildObject();
         IndexedXMLObjectChildrenList<SimpleXMLObject> indexedList = new IndexedXMLObjectChildrenList<>(
                 parentObject);
diff --git a/opensaml-messaging-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-messaging-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-messaging-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-messaging-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RootContextLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RootContextLookup.java
index f042eb8..9ce170b 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RootContextLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RootContextLookup.java
@@ -17,10 +17,14 @@
 
 package org.opensaml.messaging.context.navigate;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.BaseContext;
 
+import net.shibboleth.utilities.java.support.annotation.ParameterName;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * A {@link ContextDataLookupFunction} that gets the root of context tree.
  * 
@@ -30,6 +34,23 @@ import org.opensaml.messaging.context.BaseContext;
 public class RootContextLookup<StartContext extends BaseContext, RootContext extends BaseContext> implements
         ContextDataLookupFunction<StartContext, RootContext> {
 
+    /** Class type being returned. */
+    @Nullable private final Class<RootContext> claz;
+
+    /** Constructor. */
+    public RootContextLookup() {
+        claz = null;
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param targetClass the type to return
+     */
+    public RootContextLookup(@Nonnull @ParameterName(name="targetClass") final Class<RootContext> targetClass) {
+        claz = Constraint.isNotNull(targetClass, "RootContext type cannot be null");
+    }
+    
     /** {@inheritDoc} */
     @Nullable public RootContext apply(@Nullable final BaseContext input) {
         if (input == null) {
@@ -37,10 +58,17 @@ public class RootContextLookup<StartContext extends BaseContext, RootContext ext
         }
 
         if (input.getParent() == null){
+            if (claz != null) {
+                if (claz.isInstance(input)) {
+                    return claz.cast(input);
+                }
+                throw new ClassCastException("Root context was not of the expected type");
+            }
+            
             return (RootContext) input;
-        } else {
-            return apply(input.getParent());
         }
+        
+        return apply(input.getParent());
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
index 50089f6..4b112f9 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
@@ -145,10 +145,9 @@ public abstract class AbstractMessageHandler extends AbstractInitializableCompon
         if (activationCondition.test(messageContext)) {
             log.debug("{} Activation condition for handler returned true", getLogPrefix());
             return true;
-        } else {
-            log.debug("{} Activation condition for handler returned false", getLogPrefix());
-            return false;
         }
+        log.debug("{} Activation condition for handler returned false", getLogPrefix());
+        return false;
     }
 
     /**
diff --git a/opensaml-messaging-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-messaging-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-messaging-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-messaging-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
index 42a8128..bd61313 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
@@ -135,23 +135,20 @@ public class MessageHandlerErrorStrategyAdapter extends AbstractMessageHandler {
                         if (rethrowIfHandled) {
                             log.trace("Based on config, rethrowing the handled error");
                             throw t;
-                        } else {
-                            log.trace("Based on config, swallowing the handled error");
-                            return;
                         }
-                    } else {
-                        log.trace("Handler indicates it did NOT handle the error, continuing with remaining handlers");
-                        continue;
+                        log.trace("Based on config, swallowing the handled error");
+                        return;
                     }
+                    log.trace("Handler indicates it did NOT handle the error, continuing with remaining handlers");
+                    continue;
                 }
             }
             log.trace("No error handler handled the thrown error");
             if (rethrowIfNotHandled) {
                 log.trace("Based on config, rethrowing the unhandled error");
                 throw t;
-            } else {
-                log.trace("Based on config, swallowing the unhandled error");
             }
+            log.trace("Based on config, swallowing the unhandled error");
         }
     }
 
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
index 0bb94ca..b45d0a3 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurity.java
@@ -112,10 +112,9 @@ public class URLEvaluatingMessageChannelSecurity extends AbstractMessageChannelS
                 log.warn("Unable to parse resolved target URL: {}", url, e);
                 return false;
             }
-        } else {
-            log.warn("No target URL resolved, skipping MessageChannelSecurityContext population");
-            return false;
         }
+        log.warn("No target URL resolved, skipping MessageChannelSecurityContext population");
+        return false;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-profile-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-profile-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-profile-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-profile-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
index 7a0a12f..79e85af 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
@@ -72,11 +72,10 @@ public abstract class AbstractConditionalProfileAction extends AbstractProfileAc
         
         if (activationCondition.test(profileRequestContext)) {
             return super.doPreExecute(profileRequestContext);
-        } else {
-            LoggerFactory.getLogger(AbstractConditionalProfileAction.class).debug(
-                    "{} Activation condition for action returned false", getLogPrefix());
-            return false;
         }
+        LoggerFactory.getLogger(AbstractConditionalProfileAction.class).debug(
+                "{} Activation condition for action returned false", getLogPrefix());
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractHandlerDelegatingProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractHandlerDelegatingProfileAction.java
index d78094d..8b36cab 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractHandlerDelegatingProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractHandlerDelegatingProfileAction.java
@@ -129,9 +129,8 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
     @Nullable protected Predicate<MessageContext> adapt(@Nullable final Predicate<ProfileRequestContext> predicate) {
         if (predicate == null) {
             return null;
-        } else {
-            return Predicates.compose(predicate::test, PRC_LOOKUP::apply);
         }
+        return Predicates.compose(predicate::test, PRC_LOOKUP::apply);
     }
 
     /**
@@ -147,9 +146,8 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
             @Nullable final Function<ProfileRequestContext, T> function) {
         if (function == null) {
             return null;
-        } else {
-            return function.compose(PRC_LOOKUP);
         }
+        return function.compose(PRC_LOOKUP);
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/CurrentOrPreviousEventLookup.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/CurrentOrPreviousEventLookup.java
index a25bd54..1c44e4c 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/CurrentOrPreviousEventLookup.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/CurrentOrPreviousEventLookup.java
@@ -34,12 +34,10 @@ public class CurrentOrPreviousEventLookup implements Function<ProfileRequestCont
             final EventContext eventCtx = input.getSubcontext(EventContext.class);
             if (eventCtx != null && eventCtx.getEvent() != null) {
                 return eventCtx;
-            } else {
-                return input.getSubcontext(PreviousEventContext.class);
             }
-        } else {
-            return null;
+            return input.getSubcontext(PreviousEventContext.class);
         }
+        return null;
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
index 1f9a2de..4e9ed0c 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/PredicateAccessControl.java
@@ -79,11 +79,10 @@ public class PredicateAccessControl extends AbstractIdentifiableInitializableCom
                 log.debug("{} Granted access based on predicate (Operation: {}, Resource: {})",
                         new Object[] {getLogPrefix(), operation, resource});
                 return true;
-            } else {
-                prc.removeSubcontext(acc);
-                log.warn("{} Denied request based on predicate (Operation: {}, Resource: {})",
-                        new Object[] {getLogPrefix(), operation, resource});
             }
+            prc.removeSubcontext(acc);
+            log.warn("{} Denied request based on predicate (Operation: {}, Resource: {})",
+                    new Object[] {getLogPrefix(), operation, resource});
         } else {
             log.warn("{} Denied request based on predicate, missing ProfileRequestContext (Operation: {}, Resource: {})"
                     , new Object[] {getLogPrefix(), operation, resource});
diff --git a/opensaml-profile-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-profile-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-profile-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-profile-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
index c1eb5dd..221cdf8 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
@@ -117,15 +117,14 @@ public class DecodeMessageTest {
         protected void doDecode() throws MessageDecodingException {
             if (throwException) {
                 throw new MessageDecodingException();
+            }
+            final MessageContext messageContext = new MessageContext();
+            if (message != null) {
+                messageContext.setMessage(message);
             } else {
-                final MessageContext messageContext = new MessageContext();
-                if (message != null) {
-                    messageContext.setMessage(message);
-                } else {
-                    messageContext.setMessage(new MockMessage());
-                }
-                setMessageContext(messageContext);
+                messageContext.setMessage(new MockMessage());
             }
+            setMessageContext(messageContext);
         }
 
     }
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
index 5567839..6955879 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
@@ -134,9 +134,8 @@ public class EncodeMessageTest {
         protected void doEncode() throws MessageEncodingException {
             if (throwException) {
                 throw new MessageEncodingException();
-            } else {
-                message = ((MockMessage) getMessageContext().getMessage()).getEncoded();
             }
+            message = ((MockMessage) getMessageContext().getMessage()).getEncoded();
         }
     }
  
diff --git a/opensaml-saml-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-saml-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-saml-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-saml-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/AbstractEndpointResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/AbstractEndpointResolver.java
index 751d8fd..837e81a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/AbstractEndpointResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/AbstractEndpointResolver.java
@@ -88,10 +88,9 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
             final EndpointType endpoint = (EndpointType) criteria.get(EndpointCriterion.class).getEndpoint();
             if (doCheckEndpoint(criteria, endpoint)) {
                 return Collections.<EndpointType>singletonList(endpoint);
-            } else {
-                log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix());
-                return Collections.emptyList();
             }
+            log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix());
+            return Collections.emptyList();
         }
         
         final List<EndpointType> candidates = getCandidatesFromMetadata(criteria);
@@ -115,10 +114,9 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
             final EndpointType endpoint = (EndpointType) criteria.get(EndpointCriterion.class).getEndpoint();
             if (doCheckEndpoint(criteria, endpoint)) {
                 return endpoint;
-            } else {
-                log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix());
-                return null;
             }
+            log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix());
+            return null;
         }
         
         for (final EndpointType candidate : getCandidatesFromMetadata(criteria)) {
@@ -155,7 +153,7 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
             throw new ResolverException("CriteriaSet cannot be null");
         }
 
-        final EndpointCriterion epCriterion = criteria.get(EndpointCriterion.class);
+        final EndpointCriterion<EndpointType> epCriterion = criteria.get(EndpointCriterion.class);
         if (epCriterion == null) {
             throw new ResolverException("EndpointCriterion not supplied");
         }
@@ -172,9 +170,9 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
      * @return true iff the supplied endpoint via {@link EndpointCriterion} should be returned
      */
     private boolean canUseRequestedEndpoint(@Nonnull final CriteriaSet criteria) {
-        final EndpointCriterion epc = criteria.get(EndpointCriterion.class);
+        final EndpointCriterion<EndpointType> epc = criteria.get(EndpointCriterion.class);
         if (epc.isTrusted()) {
-            final EndpointType requestedEndpoint = (EndpointType) epc.getEndpoint();
+            final EndpointType requestedEndpoint = epc.getEndpoint();
             if (requestedEndpoint.getBinding() != null && (requestedEndpoint.getLocation() != null
                     || requestedEndpoint.getResponseLocation() != null)) {
                 return true;
@@ -206,7 +204,7 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
         }
         
         // Determine the QName type of endpoints to extract based on candidate type.
-        final EndpointCriterion epCriterion = criteria.get(EndpointCriterion.class);
+        final EndpointCriterion<EndpointType> epCriterion = criteria.get(EndpointCriterion.class);
         QName endpointType = epCriterion.getEndpoint().getSchemaType();
         if (endpointType == null) {
             endpointType = epCriterion.getEndpoint().getElementQName();
@@ -241,7 +239,7 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
         // the first not marked false.
         EndpointType hardDefault = null;
         EndpointType softDefault = null;
-        final LinkedList<EndpointType> toReturn = new LinkedList();
+        final LinkedList<EndpointType> toReturn = new LinkedList<>();
         for (final Endpoint endpoint : candidates) {
             if (hardDefault == null && endpoint instanceof IndexedEndpoint) {
                 final Boolean flag = ((IndexedEndpoint) endpoint).isDefault();
@@ -284,4 +282,4 @@ public abstract class AbstractEndpointResolver<EndpointType extends Endpoint>
         return "Endpoint Resolver " + getId() + ":";
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
index f474b1f..5f7769b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
@@ -65,9 +65,8 @@ public final class SAMLBindingSupport {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
         if (bindingContext == null) { 
             return null;
-        } else {
-            return bindingContext.getRelayState();
         }
+        return bindingContext.getRelayState();
     }
     
     /**
@@ -138,16 +137,16 @@ public final class SAMLBindingSupport {
                 throw new BindingException("The endpoint response location " + endpoint.getResponseLocation()
                         + " is not a valid URL", e);
             }
-        } else {
-            if (Strings.isNullOrEmpty(endpoint.getLocation())) {
-                throw new BindingException("Relying party endpoint location was null or empty.");
-            }
-            try {
-                return new URI(endpoint.getLocation());
-            } catch (final URISyntaxException e) {
-                throw new BindingException("The endpoint location " + endpoint.getLocation()
-                        + " is not a valid URL", e);
-            }
+        }
+        
+        if (Strings.isNullOrEmpty(endpoint.getLocation())) {
+            throw new BindingException("Relying party endpoint location was null or empty.");
+        }
+        try {
+            return new URI(endpoint.getLocation());
+        } catch (final URISyntaxException e) {
+            throw new BindingException("The endpoint location " + endpoint.getLocation()
+                    + " is not a valid URL", e);
         }
     }
     
@@ -199,14 +198,13 @@ public final class SAMLBindingSupport {
                 "SAML message was not present in message context");
         if (samlMessage instanceof SignableSAMLObject && ((SignableSAMLObject)samlMessage).isSigned()) {
             return true;
-        } else {
-            final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
-            if (bindingContext != null) {
-                return bindingContext.hasBindingSignature();
-            } else {
-                return false;
-            }
         }
+        
+        final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
+        if (bindingContext != null) {
+            return bindingContext.hasBindingSignature();
+        }
+        return false;
     }
 
     /**
@@ -225,9 +223,8 @@ public final class SAMLBindingSupport {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
         if (bindingContext != null && bindingContext.getBindingDescriptor() != null) {
             return bindingContext.getBindingDescriptor().isSignatureCapable();
-        } else {
-            return false;
         }
+        return false;
     }
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
index fd487dc..cb5e932 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
@@ -95,9 +95,8 @@ public final class SAMLMessageSecuritySupport {
         final String normalized = StringSupport.trimOrNull(scheme);
         if (normalized == null) {
             return false;
-        } else {
-            return SAMLConfigurationSupport.getAllowedBindingURLSchemes().contains(normalized.toLowerCase());
         }
+        return SAMLConfigurationSupport.getAllowedBindingURLSchemes().contains(normalized.toLowerCase());
     }
 
 }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLPeerEntityContext.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLPeerEntityContext.java
index 2cde982..41efe44 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLPeerEntityContext.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLPeerEntityContext.java
@@ -164,11 +164,10 @@ public final class SAMLPeerEntityContext extends AbstractAuthenticatableSAMLEnti
     @Nullable protected String processSaml2Issuer(@Nonnull final Issuer issuer) {
         if (issuer.getFormat() == null || issuer.getFormat().equals(NameIDType.ENTITY)) {
             return issuer.getValue();
-        } else { 
-            log.warn("Couldn't dynamically resolve SAML 2 peer entity ID due to unsupported NameID format: {}", 
-                    issuer.getFormat());
-            return null;
         }
+        log.warn("Couldn't dynamically resolve SAML 2 peer entity ID due to unsupported NameID format: {}", 
+                issuer.getFormat());
+        return null;
     }
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLSubjectNameIdentifierContext.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLSubjectNameIdentifierContext.java
index ffff649..6745994 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLSubjectNameIdentifierContext.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/SAMLSubjectNameIdentifierContext.java
@@ -86,9 +86,8 @@ public final class SAMLSubjectNameIdentifierContext extends BaseContext {
         final SAMLObject samlObject = getSubjectNameIdentifier();
         if (samlObject instanceof NameIdentifier) {
             return (NameIdentifier) samlObject;
-        } else {
-            return null;
         }
+        return null;
     }
 
     /**
@@ -104,9 +103,8 @@ public final class SAMLSubjectNameIdentifierContext extends BaseContext {
         final SAMLObject samlObject = getSubjectNameIdentifier();
         if (samlObject instanceof NameID) {
             return (NameID) samlObject;
-        } else {
-            return null;
         }
+        return null;
     }
     /**
      * Sets the name identifier, which must be either a SAML 1 {@link NameIdentifier} 
@@ -140,24 +138,21 @@ public final class SAMLSubjectNameIdentifierContext extends BaseContext {
                     (org.opensaml.saml.saml2.core.SubjectQuery) samlMessage;
             if (query.getSubject() != null) {
                 return query.getSubject().getNameID();
-            } else {
-                return null;
             }
+            return null;
         } else if (samlMessage instanceof org.opensaml.saml.saml2.core.AuthnRequest) {
             final org.opensaml.saml.saml2.core.AuthnRequest request = 
                     (org.opensaml.saml.saml2.core.AuthnRequest) samlMessage;
             if (request.getSubject() != null) {
                 return request.getSubject().getNameID();
-            } else {
-                return null;
             }
+            return null;
         } else if (samlMessage instanceof Request && ((Request) samlMessage).getSubjectQuery() != null) {
             final org.opensaml.saml.saml1.core.SubjectQuery query = ((Request) samlMessage).getSubjectQuery();
             if (query.getSubject() != null) {
                 return query.getSubject().getNameIdentifier();
-            } else {
-                return null;
             }
+            return null;
         } else if (samlMessage instanceof LogoutRequest) {
             log.debug("Ignoring LogoutRequest, Subject does not require processing");
         } else {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLBindingContextBindingFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLBindingContextBindingFunction.java
index 577c91f..12dbae7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLBindingContextBindingFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLBindingContextBindingFunction.java
@@ -48,9 +48,8 @@ public class SAMLBindingContextBindingFunction implements ContextDataLookupFunct
                 }
             }
             return input.getBindingUri();
-        } else {
-            return null;
         }
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIDFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIDFunction.java
index 5ba0c1c..55dcfd6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIDFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIDFunction.java
@@ -29,9 +29,8 @@ public class SAMLMessageInfoContextIDFunction implements ContextDataLookupFuncti
     @Nullable public String apply(@Nullable final SAMLMessageInfoContext input) {
         if (input != null) {
             return input.getMessageId();
-        } else {
-            return null;
         }
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIssueInstantFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIssueInstantFunction.java
index d03167b..1c9e165 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIssueInstantFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageInfoContextIssueInstantFunction.java
@@ -32,9 +32,8 @@ public class SAMLMessageInfoContextIssueInstantFunction
     @Nullable public Instant apply(@Nullable final SAMLMessageInfoContext input) {
         if (input != null) {
             return input.getMessageIssueInstant();
-        } else {
-            return null;
         }
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLProtocolContextProtocolFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLProtocolContextProtocolFunction.java
index 5548e33..a12b862 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLProtocolContextProtocolFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLProtocolContextProtocolFunction.java
@@ -29,9 +29,8 @@ public class SAMLProtocolContextProtocolFunction implements ContextDataLookupFun
     @Nullable public String apply(@Nullable final SAMLProtocolContext input) {
         if (input != null) {
             return input.getProtocol();
-        } else {
-            return null;
         }
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
index 91824fb..6125bcb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
@@ -61,9 +61,8 @@ public class ProxiedRequesterPredicate implements Predicate<MessageContext> {
         final ProxiedRequesterContext ctx = input != null ? input.getSubcontext(ProxiedRequesterContext.class) : null;
         if (ctx != null) {
             return !Collections.disjoint(entityIds, ctx.getRequesters());
-        } else {
-            return false;
         }
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
index 292382a..d2b8020 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
@@ -191,9 +191,8 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
         } else if (getPeerRoleDescriptor() != null) {
             if (getPeerRoleDescriptor().getSchemaType() != null) {
                 return getPeerRoleDescriptor().getSchemaType();
-            } else {
-                return getPeerRoleDescriptor().getElementQName();
             }
+            return getPeerRoleDescriptor().getElementQName();
         } else {
              return null;
         }
@@ -269,9 +268,8 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
     @Nullable public Function<MessageContext,CriteriaSet> getTLSCriteriaSetStrategy() {
         if (tlsCriteriaSetStrategy != null) {
             return tlsCriteriaSetStrategy;
-        } else {
-            return new DefaultTLSCriteriaSetStrategy();
         }
+        return new DefaultTLSCriteriaSetStrategy();
     }
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/AbstractNameIdentifierGenerator.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/AbstractNameIdentifierGenerator.java
index c6f0cbf..18cba95 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/AbstractNameIdentifierGenerator.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/AbstractNameIdentifierGenerator.java
@@ -314,12 +314,10 @@ public abstract class AbstractNameIdentifierGenerator<NameIdType extends SAMLObj
                         || !Objects.equals(idpNameQualifier,
                                 defaultIdPNameQualifierLookupStrategy.apply(profileRequestContext))) {
                     return idpNameQualifier;
-                } else {
-                    return null;
                 }
-            } else {
-                return idpNameQualifier;
+                return null;
             }
+            return idpNameQualifier;
         } else if (!omitQualifiers && defaultIdPNameQualifierLookupStrategy != null) {
             return defaultIdPNameQualifierLookupStrategy.apply(profileRequestContext);
         } else {
@@ -341,12 +339,10 @@ public abstract class AbstractNameIdentifierGenerator<NameIdType extends SAMLObj
                         || !Objects.equals(spNameQualifier,
                                 defaultSPNameQualifierLookupStrategy.apply(profileRequestContext))) {
                     return spNameQualifier;
-                } else {
-                    return null;
                 }
-            } else {
-                return spNameQualifier;
+                return null;
             }
+            return spNameQualifier;
         } else if (!omitQualifiers && defaultSPNameQualifierLookupStrategy != null) {
             return defaultSPNameQualifierLookupStrategy.apply(profileRequestContext);
         } else {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractNameIDPolicyPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractNameIDPolicyPredicate.java
index 239c256..d432d78 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractNameIDPolicyPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractNameIDPolicyPredicate.java
@@ -162,11 +162,10 @@ public abstract class AbstractNameIDPolicyPredicate extends AbstractInitializabl
             log.debug("Applying policy to NameIdentifier with Format {}",
                     format != null ? format : NameIdentifier.UNSPECIFIED);
             return doApply(requesterId, responderId, format, target.getNameQualifier(), null);
-        } else {
-            log.debug("Policy checking disabled for NameIdentifier Format {}",
-                    format != null ? format : NameIdentifier.UNSPECIFIED);
-            return true;
         }
+        log.debug("Policy checking disabled for NameIdentifier Format {}",
+                format != null ? format : NameIdentifier.UNSPECIFIED);
+        return true;
     }
 
     /**
@@ -185,10 +184,9 @@ public abstract class AbstractNameIDPolicyPredicate extends AbstractInitializabl
         if (formats.contains(format != null ? format : NameID.UNSPECIFIED)) {
             log.debug("Applying policy to NameID with Format {}", format != null ? format : NameID.UNSPECIFIED);
             return doApply(requesterId, responderId, format, target.getNameQualifier(), target.getSPNameQualifier());
-        } else {
-            log.debug("Policy checking disabled for NameID Format {}", format != null ? format : NameID.UNSPECIFIED);
-            return true;
         }
+        log.debug("Policy checking disabled for NameID Format {}", format != null ? format : NameID.UNSPECIFIED);
+        return true;
     }
     
     /**
@@ -207,11 +205,10 @@ public abstract class AbstractNameIDPolicyPredicate extends AbstractInitializabl
         if (formats.contains(format != null ? format : NameID.UNSPECIFIED)) {
             log.debug("Applying policy to NameIDPolicy with Format {}", format != null ? format : NameID.UNSPECIFIED);
             return doApply(requesterId, responderId, format, null, target.getSPNameQualifier());
-        } else {
-            log.debug("Policy checking disabled for NameIDPolicy with Format {}",
-                    format != null ? format : NameID.UNSPECIFIED);
-            return true;
         }
+        log.debug("Policy checking disabled for NameIDPolicy with Format {}",
+                format != null ? format : NameID.UNSPECIFIED);
+        return true;
     }
     
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/DefaultLocalErrorPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/DefaultLocalErrorPredicate.java
index cbb4213..9bc3805 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/DefaultLocalErrorPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/DefaultLocalErrorPredicate.java
@@ -168,10 +168,9 @@ public class DefaultLocalErrorPredicate implements Predicate<ProfileRequestConte
         if (localEvents.contains(event)) {
             log.debug("Error event {} will be handled locally", event);
             return true;
-        } else {
-            log.debug("Error event {} will be handled with response", event);
-            return false;
         }
+        log.debug("Error event {} will be handled with response", event);
+        return false;
     }
 // Checkstyle: CyclomaticComplexity ON
 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
index bc73a6c..0250204 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityAttributesPredicate.java
@@ -207,10 +207,9 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
         // Then we determine whether the overall set of tag containers is AND or OR.
         if (matchAll) {
             return Iterables.all(candidateSet, matcher::test);
-        } else {
-            if (Iterables.tryFind(candidateSet, matcher::test).isPresent()) {
-                return true;
-            }
+        }
+        if (Iterables.tryFind(candidateSet, matcher::test).isPresent()) {
+            return true;
         }
 
         return false;
@@ -426,7 +425,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
          */
         @Nonnull List<String> getPossibleAttributeValuesAsStrings(final @Nonnull Attribute attribute) {
             final List<XMLObject> cvals = attribute.getAttributeValues();
-            final List<String> result = new ArrayList<String>(cvals.size()*2);
+            final List<String> result = new ArrayList<>(cvals.size()*2);
             for (final XMLObject cval : cvals) {
                 result.addAll(xmlObjectToStrings(cval));
             }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/MetadataNameIdentifierFormatStrategy.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/MetadataNameIdentifierFormatStrategy.java
index 1381ee9..7936145 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/MetadataNameIdentifierFormatStrategy.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/MetadataNameIdentifierFormatStrategy.java
@@ -100,9 +100,8 @@ public class MetadataNameIdentifierFormatStrategy implements Function<ProfileReq
                     if (mdCtx != null && mdCtx.getRoleDescriptor() != null
                             && mdCtx.getRoleDescriptor() instanceof SSODescriptor) {
                         return (SSODescriptor) mdCtx.getRoleDescriptor();
-                    } else {
-                        log.debug("No SAMLMetadataContext or SSODescriptor role available");
                     }
+                    log.debug("No SAMLMetadataContext or SSODescriptor role available");
                 } else {
                     log.debug("No SAMLPeerEntityContext available");
                 }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLSchemaBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLSchemaBuilder.java
index 742b8dc..8145dbb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLSchemaBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLSchemaBuilder.java
@@ -209,10 +209,8 @@ public class SAMLSchemaBuilder {
                 }
             }
             cachedSchema = schemaBuilder.buildSchema();
-            return cachedSchema;
-        } else {
-            return cachedSchema;
         }
+        return cachedSchema;
     }
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/config/SAMLConfiguration.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/config/SAMLConfiguration.java
index 2486809..3e276ab 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/config/SAMLConfiguration.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/config/SAMLConfiguration.java
@@ -157,9 +157,8 @@ public class SAMLConfiguration {
         public String apply(final String input) {
             if (input == null) {
                 return null;
-            } else {
-                return input.toLowerCase();
             }
+            return input.toLowerCase();
         }
         
     }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/EntityGroupName.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/EntityGroupName.java
index ce23b92..be1035c 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/EntityGroupName.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/EntityGroupName.java
@@ -68,9 +68,8 @@ public class EntityGroupName {
         
         if (obj instanceof EntityGroupName) {
             return name.equals(((EntityGroupName)obj).getName());
-        } else {
-            return false;
         }
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/AttributeConsumingServiceSelector.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/AttributeConsumingServiceSelector.java
index 889625e..0b97b17 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/AttributeConsumingServiceSelector.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/AttributeConsumingServiceSelector.java
@@ -241,9 +241,8 @@ public class AttributeConsumingServiceSelector {
         if (firstNoDefault != null) {
             log.debug("Selected first AttributeConsumingService with no explicit isDefault");
             return firstNoDefault;
-        } else {
-            log.debug("Selected first AttributeConsumingService with explicit isDefault of false");
-            return candidates.get(0);
         }
+        log.debug("Selected first AttributeConsumingService with explicit isDefault of false");
+        return candidates.get(0);
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/SAML2MetadataSupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/SAML2MetadataSupport.java
index 50be802..f4eb74d 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/SAML2MetadataSupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/support/SAML2MetadataSupport.java
@@ -75,10 +75,9 @@ public final class SAML2MetadataSupport {
         if (firstNoDefault != null) {
             log.debug("Selected first IndexedEndpoint with no explicit isDefault");
             return firstNoDefault;
-        } else  {
-            log.debug("Selected first IndexedEndpoint with explicit isDefault of false");
-            return candidates.get(0);
         }
+        log.debug("Selected first IndexedEndpoint with explicit isDefault of false");
+        return candidates.get(0);
         
     }
     
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
index 9cdcfe1..21e2046 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
@@ -95,9 +95,8 @@ public class SAML1ArtifactType0001Builder implements SAML1ArtifactBuilder<SAML1A
         if (artifactContext != null) {
             if (artifactContext.getSourceEntityId() != null) {
                 return artifactContext.getSourceEntityId(); 
-            } else {
-                log.warn("SAMLArtifactContext did not contain a source entityID");
             }
+            log.warn("SAMLArtifactContext did not contain a source entityID");
         } else {
             log.warn("Message context did not contain a SAMLArtifactContext");
         }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML20AssertionValidator.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML20AssertionValidator.java
index 6c388b0..6f33dc3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML20AssertionValidator.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML20AssertionValidator.java
@@ -306,11 +306,10 @@ public class SAML20AssertionValidator {
             if (signatureRequired) {
                 context.setValidationFailureMessage("Assertion was required to be signed, but was not");
                 return ValidationResult.INVALID;
-            } else {
-                log.debug("Assertion was not required to be signed, and was not signed.  " 
-                        + "Skipping further signature evaluation");
-                return ValidationResult.VALID;
             }
+            log.debug("Assertion was not required to be signed, and was not signed.  " 
+                    + "Skipping further signature evaluation");
+            return ValidationResult.VALID;
         }
         
         if (trustEngine == null) {
@@ -360,13 +359,12 @@ public class SAML20AssertionValidator {
                 log.debug("Validation of signature of Assertion '{}' from Issuer '{}' was successful",
                         token.getID(), tokenIssuer);
                 return ValidationResult.VALID;
-            } else {
-                final String msg = String.format(
-                        "Signature of Assertion '%s' from Issuer '%s' was not valid", token.getID(), tokenIssuer);
-                log.warn(msg);
-                context.setValidationFailureMessage(msg);
-                return ValidationResult.INVALID;
             }
+            final String msg = String.format(
+                    "Signature of Assertion '%s' from Issuer '%s' was not valid", token.getID(), tokenIssuer);
+            log.warn(msg);
+            context.setValidationFailureMessage(msg);
+            return ValidationResult.INVALID;
         } catch (final SecurityException e) {
             final String msg = String.format(
                     "A problem was encountered evaluating the signature over Assertion with ID '%s': %s",
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
index 8685a05..e58a530 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
@@ -119,9 +119,8 @@ public class SAML2ArtifactType0004Builder implements SAML2ArtifactBuilder<SAML2A
         if (artifactContext != null) {
             if (artifactContext.getSourceEntityId() != null) {
                 return artifactContext.getSourceEntityId(); 
-            } else {
-                log.warn("SAMLArtifactContext did not contain a source entityID");
             }
+            log.warn("SAMLArtifactContext did not contain a source entityID");
         } else {
             log.warn("Message context did not contain a SAMLArtifactContext");
         }
diff --git a/opensaml-saml-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-saml-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-saml-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-saml-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
index 38b0948..1a28182 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
@@ -165,7 +165,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
             throw new IOException("Length of artifact (" + artifact.length() + ") exceeds storage capabilities");
         }
 
-        final StorageRecord record = getStorageService().read(STORAGE_CONTEXT, artifact);
+        final StorageRecord<SAMLArtifactMapEntry> record = getStorageService().read(STORAGE_CONTEXT, artifact);
 
         if (record == null) {
             log.debug("No unexpired entry found for artifact: {}", artifact);
@@ -173,7 +173,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
         }
 
         log.debug("Found valid entry for artifact: {}", artifact);
-        return (SAMLArtifactMapEntry) record.getValue((StorageSerializer) getEntryFactory(), STORAGE_CONTEXT, artifact);
+        return record.getValue((StorageSerializer<SAMLArtifactMapEntry>) getEntryFactory(), STORAGE_CONTEXT, artifact);
     }
 
     /** {@inheritDoc} */
@@ -194,7 +194,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
 
         final boolean success =
                 getStorageService().create(STORAGE_CONTEXT, artifact, artifactEntry,
-                        (StorageSerializer) getEntryFactory(),
+                        (StorageSerializer<SAMLArtifactMapEntry>) getEntryFactory(),
                         Instant.now().plus(getArtifactLifetime()).toEpochMilli());
         if (!success) {
             throw new IOException("A duplicate artifact was generated");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
index 27cdd88..5d526e5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
@@ -175,7 +175,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
         if (resolver == null) {
             throw new ComponentInitializationException("SignatureSigningParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<MessageContext,List<SignatureSigningConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<SignatureSigningConfiguration> apply(final MessageContext input) {
                     return Collections.singletonList(
                             SecurityConfigurationSupport.getGlobalSignatureSigningConfiguration());
@@ -191,10 +191,9 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
         if (super.doPreInvoke(messageContext)) {
             log.debug("{} Signing enabled", getLogPrefix());
             return true;
-        } else {
-            log.debug("{} Signing not enabled", getLogPrefix());
-            return false;
         }
+        log.debug("{} Signing not enabled", getLogPrefix());
+        return false;
     }
     
 // Checkstyle: CyclomaticComplexity|ReturnCount OFF
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
index e63216a..42764ce 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
@@ -60,7 +60,7 @@ public class SAMLProtocolAndRoleHandler extends AbstractMessageHandler {
     
     /** Optional lookup function for a context from which to copy the protocol and role data,
      * for example from a parent operation context. */
-    @Nullable private ContextDataLookupFunction<MessageContext, BaseContext> copyContextLookup;
+    @Nullable private ContextDataLookupFunction<MessageContext, ? extends BaseContext> copyContextLookup;
     
     /**
      * Set the optional lookup function for a context from which to copy the protocol and role data,
@@ -68,7 +68,8 @@ public class SAMLProtocolAndRoleHandler extends AbstractMessageHandler {
      * 
      * @param lookup the lookup function, may be null
      */
-    public void setCopyContextLookup(@Nullable final ContextDataLookupFunction<MessageContext, BaseContext> lookup) {
+    public void setCopyContextLookup(
+            @Nullable final ContextDataLookupFunction<MessageContext, ? extends BaseContext> lookup) {
        copyContextLookup = lookup; 
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
index f73e940..8adcba5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
@@ -135,9 +135,8 @@ public abstract class BaseSAMLSimpleSignatureSecurityHandler extends AbstractMes
         if (secParams == null || secParams.getSignatureValidationParameters() == null 
                 || secParams.getSignatureValidationParameters().getSignatureTrustEngine() == null) {
             throw new MessageHandlerException("No SignatureTrustEngine was available from the MessageContext");
-        } else {
-            trustEngine = secParams.getSignatureValidationParameters().getSignatureTrustEngine();
         }
+        trustEngine = secParams.getSignatureValidationParameters().getSignatureTrustEngine();
         
         return true;
     }
@@ -210,11 +209,10 @@ public abstract class BaseSAMLSimpleSignatureSecurityHandler extends AbstractMes
                     peerContext.setAuthenticated(true);
                 }
                 return;
-            } else {
-                log.warn("{} Validation of request simple signature failed for context issuer: {}", getLogPrefix(),
-                        contextEntityID);
-                throw new MessageHandlerException("Validation of request simple signature failed for context issuer");
             }
+            log.warn("{} Validation of request simple signature failed for context issuer: {}", getLogPrefix(),
+                    contextEntityID);
+            throw new MessageHandlerException("Validation of request simple signature failed for context issuer");
         }
             
         final String derivedEntityID = deriveSignerEntityID(messageContext);
@@ -231,11 +229,10 @@ public abstract class BaseSAMLSimpleSignatureSecurityHandler extends AbstractMes
                     peerContext.setAuthenticated(true);
                 }
                 return;
-            } else {
-                log.warn("{} Validation of request simple signature failed for derived issuer: {}", getLogPrefix(),
-                        derivedEntityID);
-                throw new MessageHandlerException("Validation of request simple signature failed for derived issuer");
             }
+            log.warn("{} Validation of request simple signature failed for derived issuer: {}", getLogPrefix(),
+                    derivedEntityID);
+            throw new MessageHandlerException("Validation of request simple signature failed for derived issuer");
         }
         
         log.warn("{} Neither context nor derived issuer available, cannot attempt SAML simple signature validation",
@@ -273,22 +270,20 @@ public abstract class BaseSAMLSimpleSignatureSecurityHandler extends AbstractMes
                     log.debug("{} Simple signature validation (with no request-derived credentials) was successful",
                             getLogPrefix());
                     return true;
-                } else {
-                    log.warn("{} Simple signature validation (with no request-derived credentials) failed",
-                            getLogPrefix());
-                    return false;
-                }
-            } else {
-                for (final Credential cred : candidateCredentials) {
-                    if (engine.validate(signature, signedContent, algorithmURI, criteriaSet, cred)) {
-                        log.debug("{} Simple signature validation succeeded with a request-derived credential",
-                                getLogPrefix());
-                        return true;
-                    }
                 }
-                log.warn("{} Signature validation using request-derived credentials failed", getLogPrefix());
+                log.warn("{} Simple signature validation (with no request-derived credentials) failed",
+                        getLogPrefix());
                 return false;
             }
+            for (final Credential cred : candidateCredentials) {
+                if (engine.validate(signature, signedContent, algorithmURI, criteriaSet, cred)) {
+                    log.debug("{} Simple signature validation succeeded with a request-derived credential",
+                            getLogPrefix());
+                    return true;
+                }
+            }
+            log.warn("{} Signature validation using request-derived credentials failed", getLogPrefix());
+            return false;
         } catch (final SecurityException e) {
             log.warn("{} Error evaluating the request's simple signature using the trust engine", getLogPrefix(), e);
             throw new MessageHandlerException("Error during trust engine evaluation of the simple signature", e);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLXMLSignatureSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLXMLSignatureSecurityHandler.java
index a865ffd..65ec8c5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLXMLSignatureSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLXMLSignatureSecurityHandler.java
@@ -95,9 +95,8 @@ public abstract class BaseSAMLXMLSignatureSecurityHandler extends BaseTrustEngin
         final SecurityParametersContext secParams = messageContext.getSubcontext(SecurityParametersContext.class);
         if (secParams == null || secParams.getSignatureValidationParameters() == null) {
             return null;
-        } else {
-            return secParams.getSignatureValidationParameters().getSignatureTrustEngine();
         }
+        return secParams.getSignatureValidationParameters().getSignatureTrustEngine();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
index 1dc96f1..6408889 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
@@ -129,9 +129,8 @@ public class MessageLifetimeSecurityHandler extends AbstractMessageHandler {
             if (requiredRule) {
                 log.warn("{} Inbound SAML message issue instant not present in message context", getLogPrefix());
                 throw new MessageHandlerException("Inbound SAML message issue instant not present in message context");
-            } else {
-                return;
             }
+            return;
         }
 
         final Instant issueInstant = msgInfoContext.getMessageIssueInstant();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
index 5702296..afa8670 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
@@ -141,10 +141,9 @@ public class MessageReplaySecurityHandler extends AbstractMessageHandler {
                 log.warn("{} Message contained no ID, replay check not possible", getLogPrefix());
                 throw new MessageHandlerException("SAML message from issuer " + entityID
                         + " did not contain an ID");
-            } else {
-                log.debug("{} Message contained no ID, rule is optional, skipping further processing", getLogPrefix());
-                return;
             }
+            log.debug("{} Message contained no ID, rule is optional, skipping further processing", getLogPrefix());
+            return;
         }
 
         Instant issueInstant = msgInfoContext.getMessageIssueInstant();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/OperationContextEntityIDLookup.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/OperationContextEntityIDLookup.java
index 492ffc6..2bdbf2c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/OperationContextEntityIDLookup.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/OperationContextEntityIDLookup.java
@@ -39,7 +39,7 @@ public class OperationContextEntityIDLookup implements ContextDataLookupFunction
     
     /** Parent operation context lookup function. */
     @Nonnull private RecursiveTypedParentContextLookup<MessageContext,InOutOperationContext> parentLookup = 
-            new RecursiveTypedParentContextLookup(InOutOperationContext.class);
+            new RecursiveTypedParentContextLookup<>(InOutOperationContext.class);
     
     /**
      * Constructor.
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
index 14c84d5..461d4ab 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
@@ -171,11 +171,10 @@ public class ReceivedEndpointSecurityHandler extends AbstractMessageHandler {
                         getLogPrefix());
                 throw new MessageHandlerException(
                         "SAML message intended destination (required by binding) was not present");
-            } else {
-                log.debug("{} SAML message intended destination endpoint was empty, not required by binding, skipping",
-                        getLogPrefix());
-                return;
             }
+            log.debug("{} SAML message intended destination endpoint was empty, not required by binding, skipping",
+                    getLogPrefix());
+            return;
         }
         
         final String receiverEndpoint;
@@ -199,9 +198,8 @@ public class ReceivedEndpointSecurityHandler extends AbstractMessageHandler {
             log.error("{} SAML message intended destination endpoint '{}' did not match the recipient endpoint '{}'",
                     getLogPrefix(), messageDestination, receiverEndpoint);
             throw new MessageHandlerException("SAML message failed received endpoint check");
-        } else {
-            log.debug("{} SAML message intended destination endpoint matched recipient endpoint", getLogPrefix());
         }
+        log.debug("{} SAML message intended destination endpoint matched recipient endpoint", getLogPrefix());
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
index 2aadf4f..a40cce6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
@@ -121,10 +121,9 @@ public class SAMLMDClientCertAuthSecurityHandler extends BaseClientCertAuthSecur
             log.trace("Found authenticatable entityID '{}' from context: {}", 
                     entityContext.getEntityId(), entityContext.getClass().getName());
             return entityContext.getEntityId();
-        } else {
-            log.trace("Authenticatable entityID context was not present: {}", entityContext.getClass().getName());
-            return null;
         }
+        log.trace("Authenticatable entityID context was not present: {}", entityContext.getClass().getName());
+        return null;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
index 6f4db21..e460cc3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
@@ -184,7 +184,7 @@ public class PopulateSignatureSigningParameters
         if (resolver == null) {
             throw new ComponentInitializationException("SignatureSigningParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<ProfileRequestContext,List<SignatureSigningConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<SignatureSigningConfiguration> apply(final ProfileRequestContext input) {
                     return Collections.singletonList(
                             SecurityConfigurationSupport.getGlobalSignatureSigningConfiguration());
@@ -209,10 +209,9 @@ public class PopulateSignatureSigningParameters
         if (super.doPreExecute(profileRequestContext)) {
             log.debug("{} Signing enabled", getLogPrefix());
             return true;
-        } else {
-            log.debug("{} Signing not enabled", getLogPrefix());
-            return false;
         }
+        log.debug("{} Signing not enabled", getLogPrefix());
+        return false;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/BasicDynamicTrustedNamesStrategy.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/BasicDynamicTrustedNamesStrategy.java
index e77ac5c..f7645ba 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/BasicDynamicTrustedNamesStrategy.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/BasicDynamicTrustedNamesStrategy.java
@@ -81,10 +81,9 @@ public class BasicDynamicTrustedNamesStrategy implements Function<XMLObject, Set
         
         if (rawResult != null) {
             return new HashSet<>(StringSupport.normalizeStringCollection(rawResult));
-        } else {
-            return Collections.emptySet();
         }
         
+        return Collections.emptySet();
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
index 7b790f5..ea3f7db 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
@@ -131,9 +131,8 @@ public class PredicateFilter implements MetadataFilter {
             if (Direction.EXCLUDE.equals(direction) == condition.test(entity)) {
                 log.trace("Filtering out entity {} ", entity.getEntityID());
                 return null;
-            } else {
-                return metadata;
             }
+            return metadata;
         } else {
             log.error("Unrecognised metadata type {}", metadata.getClass().getSimpleName());
             return null;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
index b994a3b..18dd24e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
@@ -159,9 +159,8 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
         final XMLObject cached = getBackingStore().getCachedOriginalMetadata();
         if (cached != null && cached instanceof TimeBoundSAMLObject) {
             return ((TimeBoundSAMLObject)cached).getValidUntil();
-        } else {
-            return null;
         }
+        return null;
     }
 
     /** {@inheritDoc} */
@@ -169,9 +168,8 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
         final XMLObject cached = getBackingStore().getCachedOriginalMetadata();
         if (cached == null) {
             return null;
-        } else {
-            return isValid(cached);
         }
+        return isValid(cached);
     }
 
     /** {@inheritDoc} */
@@ -353,7 +351,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
         protected BatchEntityBackingStore(
                 @Nullable @NonnullElements @Unmodifiable @NotLive final Set<MetadataIndex> initIndexes) {
             super();
-            secondaryIndexManager = new MetadataIndexManager(initIndexes, 
+            secondaryIndexManager = new MetadataIndexManager<>(initIndexes, 
                     new MetadataIndexManager.IdentityExtractionFunction());
         }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
index fe95dce..e4cc0bf 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
@@ -691,11 +691,10 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                                     + "and negative lookup cache is active, returning empty result", 
                                     getLogPrefix());
                             return Collections.emptyList();
-                        } else {
-                            log.debug("{} Did not find requested metadata in backing store, " 
-                                    + "attempting to resolve dynamically", 
-                                    getLogPrefix());
                         }
+                        log.debug("{} Did not find requested metadata in backing store, " 
+                                + "attempting to resolve dynamically", 
+                                getLogPrefix());
                     } else {
                         if (shouldAttemptRefresh(mgmtData)) {
                             log.debug("{} Metadata was indicated to be refreshed based on refresh trigger time", 
@@ -738,9 +737,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
         final Set<String> entityIDs = resolveEntityIDs(criteria);
         if (entityIDs.size() == 1) {
             return entityIDs.iterator().next();
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
@@ -760,10 +758,9 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
         if (entityIdCriterion != null) {
             log.debug("{} Found entityID in criteria: {}", getLogPrefix(), entityIdCriterion.getEntityId());
             return Collections.singleton(entityIdCriterion.getEntityId());
-        } else {
-            log.debug("{} EntityID was not supplied in criteria, processing criteria with secondary indexes",
-                    getLogPrefix());
         }
+        log.debug("{} EntityID was not supplied in criteria, processing criteria with secondary indexes",
+                getLogPrefix());
         
         if (!indexesEnabled()) {
             log.trace("Indexes not enabled, skipping secondary index processing");
@@ -794,10 +791,9 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                 log.debug("{} Resolved 1 entityID from secondary indexes: {}", getLogPrefix(), entityID);
                 return Collections.singleton(entityID);
             }
-        } else {
-            log.debug("{} No entityIDs resolved from secondary indexes (Optional 'absent').", getLogPrefix());
-            return null;
         }
+        log.debug("{} No entityIDs resolved from secondary indexes (Optional 'absent').", getLogPrefix());
+        return null;
     }
     
     /**
@@ -835,10 +831,9 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
         if (entityID != null) {
             log.debug("{} Resolving from origin source based on entityID: {}", getLogPrefix(), entityID);
             return resolveFromOriginSourceWithEntityID(criteria, entityID);
-        } else {
-            log.debug("{} Resolving from origin source based on non-entityID criteria", getLogPrefix());
-            return resolveFromOriginSourceWithoutEntityID(criteria);
         }
+        log.debug("{} Resolving from origin source based on non-entityID criteria", getLogPrefix());
+        return resolveFromOriginSourceWithoutEntityID(criteria);
         
     }
  
@@ -869,9 +864,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                 log.debug("{} Metadata was resolved and stored by another thread " 
                         + "while this thread was waiting on the write lock", getLogPrefix());
                 return descriptors;
-            } else {
-                log.debug("{} Resolving metadata dynamically for entity ID: {}", getLogPrefix(), entityID);
             }
+            log.debug("{} Resolving metadata dynamically for entity ID: {}", getLogPrefix(), entityID);
             
             final Context contextFetchFromOriginSource = MetricsSupport.startTimer(timerFetchFromOriginSource);
             XMLObject root = null;
@@ -1095,9 +1089,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
             releaseMetadataDOM(root);
             if (fromPersistentCache) {
                 throw new FilterException("Metadata filtering process produced a null XMLObject");
-            } else {
-                return;
             }
+            return;
         }
         
         if (filteredMetadata instanceof EntityDescriptor) {
@@ -1107,9 +1100,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                         getLogPrefix(), entityDescriptor.getEntityID(), expectedEntityID);
                 if (fromPersistentCache) {
                     throw new ResolverException("New metadata's entityID does not match expected entityID");
-                } else {
-                    return; 
                 }
+                return;
             }
             
             preProcessEntityDescriptor(entityDescriptor, getBackingStore());
@@ -1166,9 +1158,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                 log.warn("{} Error cloning XMLObject, will use input root object as filter target", getLogPrefix(), e);
                 return input;
             }
-        } else {
-            return input;
         }
+        return input;
     }
     
     /** {@inheritDoc} */
@@ -1396,10 +1387,10 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
         if (!isPersistentCachingEnabled()) {
             log.trace("{} Persistent caching is not enabled, skipping init from cache", getLogPrefix());
             return;
-        } else {
-            log.trace("{} Attempting to load and process entities from the persistent cache", getLogPrefix());
         }
         
+        log.trace("{} Attempting to load and process entities from the persistent cache", getLogPrefix());
+        
         final long start = System.nanoTime();
         try {
             for (final Pair<String, EntityDescriptor> cacheEntry: getPersistentCacheManager().listAll()) {
@@ -1601,7 +1592,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                 @Nullable @NonnullElements @Unmodifiable @NotLive final Set<MetadataIndex> initIndexes) {
             super();
             mgmtDataMap = new ConcurrentHashMap<>();
-            secondaryIndexManager = new LockableMetadataIndexManager(initIndexes, 
+            secondaryIndexManager = new LockableMetadataIndexManager<>(initIndexes, 
                     new LockableMetadataIndexManager.EntityIDExtractionFunction()); 
 
         }
@@ -1634,11 +1625,10 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
                 entityData = mgmtDataMap.get(entityID);
                 if (entityData != null) {
                     return entityData;
-                } else {
-                    entityData = new EntityManagementData(entityID);
-                    mgmtDataMap.put(entityID, entityData);
-                    return entityData;
                 }
+                entityData = new EntityManagementData(entityID);
+                mgmtDataMap.put(entityID, entityData);
+                return entityData;
             }
         }
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
index 0e0fbee..dd86e26 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
@@ -291,10 +291,9 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
                 log.error("{} Metadata provider failed to properly initialize, fail-fast=true, halting", 
                         getLogPrefix());
                 throw e;
-            } else {
-                log.error("{} Metadata provider failed to properly initialize, fail-fast=false, "
-                        + "continuing on in a degraded state", getLogPrefix(), e);
             }
+            log.error("{} Metadata provider failed to properly initialize, fail-fast=false, "
+                    + "continuing on in a degraded state", getLogPrefix(), e);
         }
     }
 
@@ -376,9 +375,8 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
         if (getMetadataFilter() != null) {
             log.debug("{} Applying metadata filter", getLogPrefix());
             return getMetadataFilter().filter(metadata, newFilterContext());
-        } else {
-            return metadata;
         }
+        return metadata;
     }
 
     /**
@@ -477,9 +475,8 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
         final List<EntityDescriptor> descriptors = getBackingStore().getIndexedDescriptors().get(entityID);
         if (descriptors != null) {
             return new ArrayList<>(descriptors);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
index 619847c..2c6ccf3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
@@ -365,11 +365,10 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
             if (t instanceof Exception) {
                 log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId);
                 throw new ResolverException((Exception) t);
-            } else {
-                log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId, t);
-                throw new ResolverException(String.format("Saw an error of type '%s' with message '%s'", 
-                        t.getClass().getName(), t.getMessage()));
             }
+            log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId, t);
+            throw new ResolverException(String.format("Saw an error of type '%s' with message '%s'", 
+                    t.getClass().getName(), t.getMessage()));
         } finally {
             logCachedMetadataExpiration(now);
             
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolver.java
deleted file mode 100644
index 9527161..0000000
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolver.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.opensaml.saml.metadata.resolver.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.xml.namespace.QName;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
-import org.opensaml.core.criterion.EntityIdCriterion;
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.criterion.EntityRoleCriterion;
-import org.opensaml.saml.criterion.ProtocolCriterion;
-import org.opensaml.saml.metadata.resolver.MetadataResolver;
-import org.opensaml.saml.metadata.resolver.RoleDescriptorResolver;
-import org.opensaml.saml.saml2.common.SAML2Support;
-import org.opensaml.saml.saml2.metadata.EntityDescriptor;
-import org.opensaml.saml.saml2.metadata.RoleDescriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-
-/**
- * Simple impl of {@link RoleDescriptorResolver} which wraps an instance of {@link MetadataResolver} to
- * support basic EntityDescriptor resolution, and then performs further role-related filtering over the
- * returned EntityDescriptor.
- * 
- * @deprecated use {@link PredicateRoleDescriptorResolver}
- */
- at Deprecated
-public class BasicRoleDescriptorResolver extends AbstractIdentifiedInitializableComponent 
-        implements RoleDescriptorResolver {
-    
-    /** Logger. */
-    private Logger log = LoggerFactory.getLogger(BasicRoleDescriptorResolver.class);
-    
-    /** Whether metadata is required to be valid. */
-    private boolean requireValidMetadata;
-    
-    /** Resolver of EntityDescriptors. */
-    private MetadataResolver entityDescriptorResolver;
-    
-    /**
-     * Constructor.
-     *
-     * @param mdResolver the resolver of EntityDescriptors
-     */
-    public BasicRoleDescriptorResolver(@Nonnull final MetadataResolver mdResolver) {
-        DeprecationSupport.warnOnce(ObjectType.CLASS, getClass().getName(), null, 
-                PredicateRoleDescriptorResolver.class.getName());
-        entityDescriptorResolver = Constraint.isNotNull(mdResolver, "Resolver for EntityDescriptors may not be null");
-        setId(UUID.randomUUID().toString()); 
-    }
-    
-    /** {@inheritDoc} */
-    @Override
-    public boolean isRequireValidMetadata() {
-        return requireValidMetadata;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void setRequireValidMetadata(final boolean require) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
-        requireValidMetadata = require;
-    }
-    
-    /** {@inheritDoc} */
-    @Override
-    @Nullable public RoleDescriptor resolveSingle(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
-        final Iterable<RoleDescriptor> iterable = resolve(criteria);
-        if (iterable != null) {
-            final Iterator<RoleDescriptor> iterator = iterable.iterator();
-            if (iterator != null && iterator.hasNext()) {
-                return iterator.next();
-            }
-        }
-        return null;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @Nonnull public Iterable<RoleDescriptor> resolve(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
-        final EntityIdCriterion entityIdCriterion = criteria.get(EntityIdCriterion.class);
-        final EntityRoleCriterion entityRoleCriterion = criteria.get(EntityRoleCriterion.class);
-        final ProtocolCriterion protocolCriterion = criteria.get(ProtocolCriterion.class);
-        // TODO support BindingCriterion
-        
-        if (entityIdCriterion == null || Strings.isNullOrEmpty(entityIdCriterion.getEntityId())) {
-            //TODO throw or just log?
-            throw new ResolverException("Entity Id was not supplied in criteria set");
-        }
-        
-        if (entityRoleCriterion == null || entityRoleCriterion.getRole() == null) {
-            //TODO throw or just log?
-            throw new ResolverException("Entity role was not supplied in criteria set");
-        }
-        
-        if (protocolCriterion != null) {
-            final RoleDescriptor role = getRole(entityIdCriterion.getEntityId(), entityRoleCriterion.getRole(), 
-                    protocolCriterion.getProtocol());
-            if (role != null) {
-                return Collections.singletonList(role);
-            } else {
-                return Collections.emptyList();
-            }
-        } else {
-            return getRole(entityIdCriterion.getEntityId(), entityRoleCriterion.getRole());
-        }
-        
-    }
-
-    /**
-     * Get role descriptors for a given entityID and role.
-     * 
-     * @param entityID  entityID to lookup
-     * @param roleName  role to lookup
-     * @return  list of roles
-     * @throws ResolverException if an error occurs
-     */
-    @Nonnull @NonnullElements protected List<RoleDescriptor> getRole(
-            @Nullable final String entityID, @Nullable final QName roleName) throws ResolverException {
-        if (Strings.isNullOrEmpty(entityID)) {
-            log.debug("EntityDescriptor entityID was null or empty, skipping search for roles");
-            return Collections.emptyList();
-        }
-
-        if (roleName == null) {
-            log.debug("Role descriptor name was null, skipping search for roles");
-            return Collections.emptyList();
-        }
-
-        final List<RoleDescriptor> roleDescriptors = doGetRole(entityID, roleName);
-        if (roleDescriptors == null || roleDescriptors.isEmpty()) {
-            log.debug("Entity descriptor {} did not contain any {} roles", entityID, roleName);
-            return Collections.emptyList();
-        }
-
-        final Iterator<RoleDescriptor> roleDescItr = roleDescriptors.iterator();
-        while (roleDescItr.hasNext()) {
-            if (!isValid(roleDescItr.next())) {
-                log.debug("Metadata document contained a role of type {} for entity {}, but it was invalid", roleName,
-                        entityID);
-                roleDescItr.remove();
-            }
-        }
-
-        if (roleDescriptors.isEmpty()) {
-            log.debug("Entity descriptor {} did not contain any valid {} roles", entityID, roleName);
-        }
-        return roleDescriptors;
-    }
-
-    /**
-     * Gets the identified roles from an EntityDescriptor. This method should not check if the provider is initialized,
-     * if arguments are null, if the roles are valid, etc. All of this is done by the invoker of this method.
-     * 
-     * @param entityID ID of the entity from which to retrieve the roles, never null
-     * @param roleName name of the roles to search for, never null
-     * 
-     * @return the modifiable list of identified roles or an empty list if no roles exists
-     * 
-     * @throws ResolverException thrown if there is a problem searching for the roles
-     */
-    @Nonnull @NonnullElements protected List<RoleDescriptor> doGetRole(@Nullable final String entityID,
-            @Nullable final QName roleName) throws ResolverException {
-        final EntityDescriptor entity = doGetEntityDescriptor(entityID);
-        if (entity == null) {
-            log.debug("Metadata document did not contain a descriptor for entity {}", entityID);
-            return Collections.emptyList();
-        }
-
-        final List<RoleDescriptor> descriptors = entity.getRoleDescriptors(roleName);
-        if (descriptors != null && !descriptors.isEmpty()) {
-            return new ArrayList<>(descriptors);
-        }
-
-        return Collections.emptyList();
-    }
-
-    /**
-     * Resolve an entity descriptor based on entityID using the wrapped metadata resolver.
-     * 
-     * @param entityID the entityID of the EntityDescriptor to resolve.
-     * @return the resolved EntityDescriptor, or null if not found
-     * @throws ResolverException  if there is a problem resolving the EntityDescriptor
-     */
-    protected EntityDescriptor doGetEntityDescriptor(final String entityID) throws ResolverException {
-        //TODO should perhaps pass through the entire original CriteriaSet
-        return entityDescriptorResolver.resolveSingle(new CriteriaSet(new EntityIdCriterion(entityID)));
-    }
-
-    /**
-     * Get role descriptor for a given entityID and role and protocol.
-     * 
-     * @param entityID  entityID to lookup
-     * @param roleName  role to lookup
-     * @param supportedProtocol protocol to lookup
-     * 
-     * @return  list of roles
-     * @throws ResolverException if an error occurs
-     */
-    @Nullable protected RoleDescriptor getRole(@Nullable final String entityID, @Nullable final QName roleName,
-            @Nullable final String supportedProtocol) 
-            throws ResolverException {
-        if (Strings.isNullOrEmpty(entityID)) {
-            log.debug("EntityDescriptor entityID was null or empty, skipping search for role");
-            return null;
-        }
-
-        if (roleName == null) {
-            log.debug("Role descriptor name was null, skipping search for role");
-            return null;
-        }
-
-        if (Strings.isNullOrEmpty(supportedProtocol)) {
-            log.debug("Supported protocol was null, skipping search for role.");
-            return null;
-        }
-
-        final RoleDescriptor role = doGetRole(entityID, roleName, supportedProtocol);
-        if (role == null) {
-            log.debug("Metadata document does not contain a role of type {} supporting protocol {} for entity {}",
-                    new Object[] { roleName, supportedProtocol, entityID });
-            return null;
-        }
-
-        if (!isValid(role)) {
-            log.debug("Metadata document contained a role of type {} supporting protocol {} for entity {}, " 
-                    + "but it was not longer valid", new Object[] { roleName, supportedProtocol, entityID });
-            return null;
-        }
-
-        return role;
-    }
-
-    /**
-     * Gets the role which supports the given protocol.
-     * 
-     * @param entityID ID of the entity from which to retrieve roles, never null
-     * @param roleName name of the role to search for, never null
-     * @param supportedProtocol protocol to search for, never null
-     * 
-     * @return the role supporting the protocol or null if no such role exists
-     * 
-     * @throws ResolverException thrown if there is a problem search for the roles
-     */
-    protected RoleDescriptor doGetRole(final String entityID, final QName roleName, final String supportedProtocol) 
-            throws ResolverException {
-        final List<RoleDescriptor> roles = doGetRole(entityID, roleName);
-        if (roles == null || roles.isEmpty()) {
-            log.debug("Metadata document did not contain any role descriptors of type {} for entity {}", roleName,
-                    entityID);
-            return null;
-        }
-
-        final Iterator<RoleDescriptor> rolesItr = roles.iterator();
-        RoleDescriptor role = null;
-        while (rolesItr.hasNext()) {
-            role = rolesItr.next();
-            if (role != null && role.isSupportedProtocol(supportedProtocol)) {
-                return role;
-            }
-        }
-
-        return null;
-    }
-    
-    /**
-     * Returns whether the given descriptor is valid. If valid metadata is not required this method always returns true.
-     * 
-     * @param descriptor the descriptor to check
-     * 
-     * @return true if valid metadata is not required or the given descriptor is valid, false otherwise
-     */
-    protected boolean isValid(final XMLObject descriptor) {
-        if (descriptor == null) {
-            return false;
-        }
-
-        if (!isRequireValidMetadata()) {
-            return true;
-        }
-
-        return SAML2Support.isValid(descriptor);
-    }
-
-
-}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/EntityIDDigestGenerator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/EntityIDDigestGenerator.java
index 0b69bde..dfc967c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/EntityIDDigestGenerator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/EntityIDDigestGenerator.java
@@ -105,23 +105,23 @@ public class EntityIDDigestGenerator implements Function<CriteriaSet, String> {
     protected String buildKey(@Nonnull final String keyValue) {
         if (prefix == null && suffix == null) {
             return keyValue;
-        } else {
-            final StringBuffer buffer = new StringBuffer();
-            if (prefix != null) {
-                buffer.append(prefix);
-                if (separator != null) {
-                    buffer.append(separator);
-                }
+        }
+        
+        final StringBuffer buffer = new StringBuffer();
+        if (prefix != null) {
+            buffer.append(prefix);
+            if (separator != null) {
+                buffer.append(separator);
             }
-            buffer.append(keyValue);
-            if (suffix != null) {
-                if (separator != null) {
-                    buffer.append(separator);
-                }
-                buffer.append(suffix);
+        }
+        buffer.append(keyValue);
+        if (suffix != null) {
+            if (separator != null) {
+                buffer.append(separator);
             }
-            return buffer.toString();
+            buffer.append(suffix);
         }
+        return buffer.toString();
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
index 1902dfe..458db2b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
@@ -199,10 +199,9 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
             if (isFailFastInitialization()) {
                 log.error("{} Metadata backup file path was invalid, initialization is fatal", getLogPrefix());
                 throw new ComponentInitializationException("Metadata backup file path was invalid", e);
-            } else {
-                log.error("{} Metadata backup file path was invalid, continuing without known good backup file", 
-                        getLogPrefix());
             }
+            log.error("{} Metadata backup file path was invalid, continuing without known good backup file", 
+                    getLogPrefix());
         }
         
         try {
@@ -314,10 +313,9 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
                     log.error("{} " + errMsg, getLogPrefix(), ioe);
                     throw new ResolverException(errMsg, ioe);
                 }
-            } else {
-                log.error("{} Unable to read metadata from remote server and backup does not exist", getLogPrefix());
-                throw new ResolverException("Unable to read metadata from remote server and backup does not exist");
             }
+            log.error("{} Unable to read metadata from remote server and backup does not exist", getLogPrefix());
+            throw new ResolverException("Unable to read metadata from remote server and backup does not exist");
         }
     }
 
@@ -342,9 +340,8 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
             log.debug("{} Detected initialization from backup file, scheduling next refresh from HTTP in {}ms", 
                     getLogPrefix(), getBackupFileInitNextRefreshDelay());
             return getBackupFileInitNextRefreshDelay();
-        } else {
-            return super.computeNextRefreshDelay(expectedExpiration);
         }
+        return super.computeNextRefreshDelay(expectedExpiration);
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPEntityIDRequestURLBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPEntityIDRequestURLBuilder.java
index 0fcdba9..8c0c263 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPEntityIDRequestURLBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPEntityIDRequestURLBuilder.java
@@ -52,10 +52,9 @@ public class HTTPEntityIDRequestURLBuilder implements Function<CriteriaSet, Stri
         if (entityID.toLowerCase().startsWith("http:") || entityID.toLowerCase().startsWith("https:")) {
             log.debug("Saw entityID with HTTP/HTTPS URL syntax, returning the entityID itself as request URL");
             return entityID;
-        } else {
-            log.debug("EntityID was not an HTTP or HTTPS URL, could not construct request URL on that basis");
-            return null;
         }
+        log.debug("EntityID was not an HTTP or HTTPS URL, could not construct request URL on that basis");
+        return null;
     }
 
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/LocalDynamicMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/LocalDynamicMetadataResolver.java
index 62b503f..9f73c6a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/LocalDynamicMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/LocalDynamicMetadataResolver.java
@@ -105,7 +105,7 @@ public class LocalDynamicMetadataResolver extends AbstractDynamicMetadataResolve
         if (sourceManager instanceof ConditionalLoadXMLObjectLoadSaveManager) {
             final String key = sourceKeyGenerator.apply(new CriteriaSet(new EntityIdCriterion(entityID)));
             if (key != null) {
-                ((ConditionalLoadXMLObjectLoadSaveManager)sourceManager).clearLoadLastModified(key);
+                ((ConditionalLoadXMLObjectLoadSaveManager<?>)sourceManager).clearLoadLastModified(key);
             }
         }
         
@@ -126,10 +126,9 @@ public class LocalDynamicMetadataResolver extends AbstractDynamicMetadataResolve
                 log.trace("{} Found no target in local source manager with key '{}'", getLogPrefix(), key);
             }
             return result;
-        } else {
-            log.trace("{} Could not generate source key from criteria, can not resolve", getLogPrefix());
-            return null;
         }
+        log.trace("{} Could not generate source key from criteria, can not resolve", getLogPrefix());
+        return null;
     }
     
 }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
index f15cd2f..b56c616 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
@@ -261,10 +261,10 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
         if (!entityDescriptorsSource.iterator().hasNext()) {
             log.debug("Resolved no EntityDescriptors via underlying MetadataResolver, returning empty collection");
             return Collections.emptySet();
-        } else {
-            if (log.isDebugEnabled()) {
-                log.debug("Resolved {} source EntityDescriptors", Iterables.size(entityDescriptorsSource));
-            }
+        }
+        
+        if (log.isDebugEnabled()) {
+            log.debug("Resolved {} source EntityDescriptors", Iterables.size(entityDescriptorsSource));
         }
         
         final Predicate<? super RoleDescriptor> predicate = isRequireValidMetadata() ? IS_VALID_PREDICATE 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/RegexRequestURLBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/RegexRequestURLBuilder.java
index f98de96..f746451 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/RegexRequestURLBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/RegexRequestURLBuilder.java
@@ -121,15 +121,14 @@ public class RegexRequestURLBuilder implements Function<CriteriaSet, String> {
                 log.debug("Regular expression '{}' matched successfully against entity ID '{}', returning '{}'", 
                         pattern.pattern(), entityID, result);
                 return result;
-            } else {
-                log.debug("Regular expression '{}' did not match against entity ID '{}', returning null", 
-                        pattern.pattern(), entityID);
-                return null;
             }
+            log.debug("Regular expression '{}' did not match against entity ID '{}', returning null", 
+                    pattern.pattern(), entityID);
+            return null;
         } catch (final Throwable t) {
             log.warn("Error evaluating regular expression '{}' against entity ID '{}'", pattern.pattern(), entityID, t);
             return null;
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndex.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndex.java
index 03c5d79..b37d183 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndex.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndex.java
@@ -138,9 +138,8 @@ public class EndpointMetadataIndex implements MetadataIndex {
             final HashSet<MetadataIndexKey> result = new HashSet<>();
             result.addAll(processCriteria(criteriaSet, roleCrit.getRole(), endpointCrit.getEndpoint()));
             return result;
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
@@ -215,9 +214,9 @@ public class EndpointMetadataIndex implements MetadataIndex {
                 log.warn("Could not parse URL '{}', will not generate path segment variants", location, e);
             }
             return result;
-        } else {
-            return Collections.singleton(location);
         }
+        
+        return Collections.singleton(location);
     }
 
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
index a239d95..f902a45 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
@@ -80,7 +80,7 @@ public class MetadataIndexManager<T> {
         if (initIndexes != null) {
             for (final MetadataIndex index : initIndexes) {
                 log.trace("Initializing manager for index: {}", index);
-                indexes.put(index, new MetadataIndexStore());
+                indexes.put(index, new MetadataIndexStore<T>());
             }
         }
     }
@@ -152,9 +152,9 @@ public class MetadataIndexManager<T> {
             //      (i.e. no MetadataIndexKeys were generated for any criteria)
             // Returning absent here allows to distinguish these cases from the empty set case above.
             return Optional.absent();
-        } else {
-            return Optional.of(items);
         }
+        
+        return Optional.of(items);
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStore.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStore.java
index 79e1e86..31407c0 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStore.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStore.java
@@ -75,9 +75,8 @@ public class MetadataIndexStore<T> {
         final Set<T> items = index.get(key);
         if (items == null) {
             return Collections.emptySet();
-        } else {
-            return ImmutableSet.copyOf(items);
         }
+        return ImmutableSet.copyOf(items);
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexSupport.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexSupport.java
index 0c5df75..879ca4c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexSupport.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexSupport.java
@@ -80,20 +80,19 @@ public final class MetadataIndexSupport {
         final String path = StringSupport.trimOrNull(input);
         if (path == null || "/".equals(path)) {
             return null;
-        } else {
-            final int idx = path.lastIndexOf("/");
-            if (idx > 0) {
-                if (path.endsWith("/")) {
-                    return path.substring(0, idx);
-                } else {
-                    return path.substring(0, idx+1);
-                }
-            } else if (idx == 0) {
-                return "/";
-            } else {
-                return null;
+        }
+        
+        final int idx = path.lastIndexOf("/");
+        if (idx > 0) {
+            if (path.endsWith("/")) {
+                return path.substring(0, idx);
             }
+            return path.substring(0, idx+1);
+        } else if (idx == 0) {
+            return "/";
+        } else {
+            return null;
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/RoleMetadataIndex.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/RoleMetadataIndex.java
index db1b93c..12352a6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/RoleMetadataIndex.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/RoleMetadataIndex.java
@@ -52,9 +52,8 @@ public class RoleMetadataIndex implements MetadataIndex {
             final HashSet<MetadataIndexKey> result = new HashSet<>();
             result.add(new RoleMetadataIndexKey(roleCrit.getRole()));
             return result;
-        } else {
-            return null;
         }
+        return null;
     }
 
     /** {@inheritDoc} */
@@ -125,4 +124,4 @@ public class RoleMetadataIndex implements MetadataIndex {
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
index f752a8e..0db710b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/SAMLArtifactMetadataIndex.java
@@ -137,9 +137,8 @@ public class SAMLArtifactMetadataIndex implements MetadataIndex {
             }
             
             return results;
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
@@ -423,13 +422,11 @@ public class SAMLArtifactMetadataIndex implements MetadataIndex {
                 final ArtifactSourceLocationMetadataIndexKey other = (ArtifactSourceLocationMetadataIndexKey) obj;
                 if (this.isCanonicalizedLowerCase == other.isCanonicalizedLowerCase) {
                     return this.canonicalizedLocation.equals(other.canonicalizedLocation);
-                } else {
-                    if (this.isCanonicalizedLowerCase) {
-                        return this.canonicalizedLocation.equals(other.location.toLowerCase());
-                    } else {
-                        return other.canonicalizedLocation.equals(this.location.toLowerCase());
-                    }
                 }
+                if (this.isCanonicalizedLowerCase) {
+                    return this.canonicalizedLocation.equals(other.location.toLowerCase());
+                }
+                return other.canonicalizedLocation.equals(this.location.toLowerCase());
             }
 
             return false;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
index 1e0a9ad..622a491 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -150,7 +150,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
             queryParams.add(new Pair<>("TARGET", relayState));
         }
 
-        final SAML1ArtifactBuilder artifactBuilder;
+        final SAML1ArtifactBuilder<?> artifactBuilder;
         final byte[] artifactType = getSAMLArtifactType(messageContext);
         if (artifactType != null) {
             artifactBuilder = SAMLConfigurationSupport.getSAML1ArtifactBuilderFactory()
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
index 110e880..1a1e9bf 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
@@ -179,9 +179,8 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
         if (formats == null || formats.isEmpty()) {
             log.debug("{} No candidate NameIdentifier formats, nothing to do", getLogPrefix());
             return false;
-        } else {
-            log.debug("{} Candidate NameIdentifier formats: {}", getLogPrefix(), formats);
         }
+        log.debug("{} Candidate NameIdentifier formats: {}", getLogPrefix(), formats);
         
         return true;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidator.java
index 33085df..d412a1f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/BearerSubjectConfirmationValidator.java
@@ -62,9 +62,8 @@ public class BearerSubjectConfirmationValidator extends AbstractSubjectConfirmat
         
         if (Objects.equals(confirmation.getMethod(), SubjectConfirmation.METHOD_BEARER)) {
             return ValidationResult.VALID;
-        } else {
-            return ValidationResult.INDETERMINATE;
         }
+        return ValidationResult.INDETERMINATE;
             
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidator.java
index a02786b..1ab6279 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/DelegationRestrictionConditionValidator.java
@@ -71,8 +71,7 @@ public class DelegationRestrictionConditionValidator implements ConditionValidat
                 || Objects.equals(condition.getSchemaType(), DelegationRestrictionType.TYPE_NAME)) {
             // Delegation restriction information is a 'condition of use' type condition so we always return valid.
             return ValidationResult.VALID;
-        } else {
-            return ValidationResult.INDETERMINATE;
         }
+        return ValidationResult.INDETERMINATE;
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchersSubjectConfirmationValidator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchersSubjectConfirmationValidator.java
index 61cdd0b..0a47fa7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchersSubjectConfirmationValidator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/assertion/impl/SenderVouchersSubjectConfirmationValidator.java
@@ -60,8 +60,7 @@ public class SenderVouchersSubjectConfirmationValidator extends AbstractSubjectC
         
         if (Objects.equals(confirmation.getMethod(), SubjectConfirmation.METHOD_SENDER_VOUCHES)) {
             return ValidationResult.VALID;
-        } else {
-            return ValidationResult.INDETERMINATE;
         }
+        return ValidationResult.INDETERMINATE;
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
index 9a0bccf..09a05ca 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -447,7 +447,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
             final String selfEntityID = resolveSelfEntityID(peerRoleDescriptor);
         
             // TODO can assume/enforce response as ArtifactResponse here?
-            final InOutOperationContext opContext = new SAMLSOAPClientContextBuilder()
+            final InOutOperationContext opContext = new SAMLSOAPClientContextBuilder<>()
                     .setOutboundMessage(buildArtifactResolveRequestMessage(
                             artifact, ars.getLocation(), peerRoleDescriptor, selfEntityID))
                     .setProtocol(SAMLConstants.SAML20P_NS)
@@ -462,10 +462,9 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
             final Object response = opContext.getInboundMessageContext().getMessage();
             if (response instanceof ArtifactResponse) {
                 return validateAndExtractResponseMessage((ArtifactResponse) response);
-            } else {
-                throw new MessageDecodingException("SOAP message payload was not an instance of ArtifactResponse: " 
-                        + response.getClass().getName());
             }
+            throw new MessageDecodingException("SOAP message payload was not an instance of ArtifactResponse: " 
+                    + response.getClass().getName());
         } catch (final MessageException | SOAPException | SecurityException e) {
             throw new MessageDecodingException("Error dereferencing artifact", e);
         }
@@ -542,9 +541,8 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
             final String selfEntityID = getSelfEntityIDResolver().resolveSingle(criteria);
             if (selfEntityID == null) {
                 throw new MessageDecodingException("Unable to resolve self entityID from peer RoleDescriptor");
-            } else {
-                return selfEntityID;
             }
+            return selfEntityID;
         } catch (final ResolverException e) {
             throw new MessageDecodingException("Fatal error resolving self entityID from peer RoleDescriptor", e);
         }
@@ -598,9 +596,8 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
             final ArtifactResolutionService ars = artifactEndpointResolver.resolveSingle(criteriaSet);
             if (ars != null) {
                 return ars;
-            } else {
-                throw new MessageDecodingException("Unable to resolve ArtifactResolutionService endpoint");
             }
+            throw new MessageDecodingException("Unable to resolve ArtifactResolutionService endpoint");
         } catch (final ResolverException e) {
             throw new MessageDecodingException("Unable to resolve ArtifactResolutionService endpoint");
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
index 99dde04..9e84780 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -329,7 +329,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
             throw new MessageEncodingException("Unable to obtain issuer or relying party for message encoding");
         }
         
-        final SAML2ArtifactBuilder artifactBuilder;
+        final SAML2ArtifactBuilder<?> artifactBuilder;
         final byte[] artifactType = getSAMLArtifactType(messageContext);
         if (artifactType != null) {
             artifactBuilder = SAMLConfigurationSupport.getSAML2ArtifactBuilderFactory()
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
index 722016a..bd8bd4a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
@@ -118,9 +118,8 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
                 final String kiXML = SerializeSupport.nodeToString(marshaller.marshall(keyInfo));
                 final String kiBase64 = Base64Support.encode(kiXML.getBytes(), Base64Support.UNCHUNKED);
                 return kiBase64;
-            } else {
-                return null;
             }
+            return null;
         } catch (final SecurityException e) {
             log.error("Error generating KeyInfo from signing credential", e);
             throw new MessageEncodingException("Error generating KeyInfo from signing credential", e);
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 917b256..ea274c6 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
@@ -173,9 +173,8 @@ public class SAML2HTTPPostSimpleSignSecurityHandler extends BaseSAMLSimpleSignat
         if (Strings.isNullOrEmpty(kiBase64)) {
             log.debug("Form control data did not contain a KeyInfo");
             return Collections.emptyList();
-        } else {
-            log.debug("Found a KeyInfo in form control data, extracting validation credentials");
         }
+        log.debug("Found a KeyInfo in form control data, extracting validation credentials");
 
         final Unmarshaller unmarshaller =
                 XMLObjectProviderRegistrySupport.getUnmarshallerFactory().getUnmarshaller(KeyInfo.DEFAULT_ELEMENT_NAME);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
index 5d833df..15ba53d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
@@ -199,7 +199,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
             }
             if (encryptToSelfParametersStrategy != null) {
                 final List<EncryptionParameters> selfParams = encryptToSelfParametersStrategy.apply(
-                        new Pair<ProfileRequestContext, EncryptionParameters>(profileRequestContext, params));
+                        new Pair<>(profileRequestContext, params));
                 if (selfParams != null && !selfParams.isEmpty()) {
                     log.debug("{} Saw {} self-encryption parameters", getLogPrefix(), selfParams.size());
                     for (final EncryptionParameters selfParam : selfParams) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
index b36b3f1..34a45a6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
@@ -154,7 +154,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         assertionsLookupStrategy = new AssertionStrategy();
 
         // Default strategy is a 16-byte secure random source.
-        idGeneratorLookupStrategy = new Function<ProfileRequestContext,IdentifierGenerationStrategy>() {
+        idGeneratorLookupStrategy = new Function<>() {
             public IdentifierGenerationStrategy apply(final ProfileRequestContext input) {
                 return new SecureRandomIdentifierGenerationStrategy();
             }
@@ -317,9 +317,8 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
             if (formats == null || formats.isEmpty()) {
                 log.debug("{} No candidate NameID formats, nothing to do", getLogPrefix());
                 return false;
-            } else {
-                log.debug("{} Candidate NameID formats: {}", getLogPrefix(), formats);
             }
+            log.debug("{} Candidate NameID formats: {}", getLogPrefix(), formats);
         }
         
         return true;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
index 3d6db37..5599f78 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
@@ -189,7 +189,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
                 (SAMLObjectBuilder<StatusCode>) bf.<StatusCode>getBuilderOrThrow(StatusCode.TYPE_NAME);
         final SAMLObjectBuilder<Status> statusBuilder =
                 (SAMLObjectBuilder<Status>) bf.<Status>getBuilderOrThrow(Status.TYPE_NAME);
-        final SAMLObjectBuilder responseBuilder = (SAMLObjectBuilder) bf.getBuilderOrThrow(messageType);
+        final SAMLObjectBuilder<?> responseBuilder = (SAMLObjectBuilder<?>) bf.getBuilderOrThrow(messageType);
 
         final StatusCode statusCode = statusCodeBuilder.buildObject();
         statusCode.setValue(StatusCode.SUCCESS);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
index f47daff..c7eab21 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -118,7 +118,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
         
         // Default pulls from servlet request.
-        addressLookupStrategy = new Function<ProfileRequestContext,String>() {
+        addressLookupStrategy = new Function<>() {
             public String apply(final ProfileRequestContext input) {
                 final String address = getHttpServletRequest() != null ? getHttpServletRequest().getRemoteAddr() : null;
                 log.debug("{} Setting confirmation data Address to {}", getLogPrefix(),
@@ -128,7 +128,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         };
         
         // Default pulls from inbound message context and a SAMLMessageInfoContext child.
-        inResponseToLookupStrategy = new Function<ProfileRequestContext,String>() {
+        inResponseToLookupStrategy = new Function<>() {
             public String apply(final ProfileRequestContext input) {
                 if (response != null && response.getInResponseTo() != null) {
                     log.debug("{} Setting confirmation data InResponseTo to {}", getLogPrefix(),
@@ -141,7 +141,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         };
         
         // Default pulls from SAML endpoint on outbound message context.
-        recipientLookupStrategy = new Function<ProfileRequestContext,String>() {
+        recipientLookupStrategy = new Function<>() {
             public String apply(final ProfileRequestContext input) {
                 if (input.getOutboundMessageContext() != null) {
                     try {
@@ -161,7 +161,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         };
         
         // Default is 5 minutes.
-        lifetimeLookupStrategy = new Function<ProfileRequestContext,Long>() {
+        lifetimeLookupStrategy = new Function<>() {
             public Long apply(final ProfileRequestContext input) {
                 log.debug("{} Setting confirmation data NotOnOrAfter to 5 minutes from now", getLogPrefix());
                 return 5 * 60 * 1000L;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
index d8cdc61..0ef8af3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilder.java
@@ -148,7 +148,7 @@ public class DefaultSAML20AssertionValidationContextBuilder
         final HashMap<String, Object> staticParams = new HashMap<>();
         
         //For signature validation
-        staticParams.put(SAML2AssertionValidationParameters.SIGNATURE_REQUIRED, new Boolean(isSignatureRequired()));
+        staticParams.put(SAML2AssertionValidationParameters.SIGNATURE_REQUIRED, Boolean.valueOf(isSignatureRequired()));
         staticParams.put(SAML2AssertionValidationParameters.SIGNATURE_VALIDATION_CRITERIA_SET, 
                 getSignatureCriteriaSet(input));
         
@@ -237,7 +237,7 @@ public class DefaultSAML20AssertionValidationContextBuilder
             @Nonnull final SAML20AssertionTokenValidationInput input) {
         try {
             final X509Credential credential = new ServletRequestX509CredentialAdapter(input.getHttpServletRequest());
-            return ((X509Credential)credential).getEntityCertificate();
+            return credential.getEntityCertificate();
         } catch (final SecurityException e) {
             log.warn("Peer TLS X.509 certificate was not present. " 
                     + "Holder-of-key proof-of-possession via client TLS cert will not be possible");
@@ -319,10 +319,9 @@ public class DefaultSAML20AssertionValidationContextBuilder
                 validAddresses.addAll(Arrays.asList(addresses));
                 log.debug("Resolved valid subject confirmation InetAddress set: {}", validAddresses);
                 return validAddresses;
-            } else {
-                log.warn("Could not determine attester IP address. Validation of Assertion may or may not succeed");
-                return Collections.emptySet();
             }
+            log.warn("Could not determine attester IP address. Validation of Assertion may or may not succeed");
+            return Collections.emptySet();
         } catch (final UnknownHostException e) {
             log.warn("Processing of attester IP address failed. Validation of Assertion may or may not succeed", e);
             return Collections.emptySet();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
index e411556..19cc5a3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
@@ -224,9 +224,8 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
         if (getAssertionValidator() == null) {
             if (getAssertionValidatorLookup() == null) {
                 throw new ComponentInitializationException("Both Assertion validator and lookup function were null");
-            } else {
-                log.info("Assertion validator is null, must be resovleable via the lookup function");
             }
+            log.info("Assertion validator is null, must be resovleable via the lookup function");
         }
     }
 
@@ -313,11 +312,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
                             WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN, 
                             "The SAML 2.0 Assertion token was invalid", null, null, null);
                     throw new MessageHandlerException("Assertion token validation result was INVALID"); 
-                } else {
-                    token.setValidationStatus(ValidationStatus.INVALID);
-                    token.setSubjectConfirmation((SubjectConfirmation) validationContext.getDynamicParameters()
-                            .get(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION));
                 }
+                token.setValidationStatus(ValidationStatus.INVALID);
+                token.setSubjectConfirmation((SubjectConfirmation) validationContext.getDynamicParameters()
+                        .get(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION));
                 break;
             case INDETERMINATE:
                 log.warn("Assertion token validation was INDETERMINATE. Reason: {}", validationMsg);
@@ -326,11 +324,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
                             WSSecurityConstants.SOAP_FAULT_INVALID_SECURITY_TOKEN, 
                             "The SAML 2.0 Assertion token's validity could not be determined", null, null, null);
                     throw new MessageHandlerException("Assertion token validation result was INDETERMINATE"); 
-                } else {
-                    token.setValidationStatus(ValidationStatus.INDETERMINATE);
-                    token.setSubjectConfirmation((SubjectConfirmation) validationContext.getDynamicParameters()
-                            .get(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION));
                 }
+                token.setValidationStatus(ValidationStatus.INDETERMINATE);
+                token.setSubjectConfirmation((SubjectConfirmation) validationContext.getDynamicParameters()
+                        .get(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION));
                 break;
             default:
                 log.warn("Assertion validation result indicated an unknown value: {}", validationResult);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategy.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategy.java
index d0e4c05..7b32b31 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategy.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategy.java
@@ -174,10 +174,9 @@ public class InlineSelfEncryptionParametersStrategy
         }
         if (baseConfigs != null) {
             return baseConfigs;
-        } else {
-            log.debug("No self-encryption EncryptionConfigurations were resolved, returning global configuration");
-            return Collections.singletonList(SecurityConfigurationSupport.getGlobalEncryptionConfiguration());
         }
+        log.debug("No self-encryption EncryptionConfigurations were resolved, returning global configuration");
+        return Collections.singletonList(SecurityConfigurationSupport.getGlobalEncryptionConfiguration());
     }
     
 }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
index 8bd6a32..f201f46 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
@@ -230,9 +230,8 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
         final UsageCriterion usageCriteria = criteriaSet.get(UsageCriterion.class);
         if (usageCriteria != null) {
             return usageCriteria.getUsage();
-        } else {
-            return UsageType.UNSPECIFIED;
-        } 
+        }
+        return UsageType.UNSPECIFIED; 
     }
     
     /**
@@ -351,9 +350,8 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
                 log.debug("Resolved cached credentials from KeyDescriptor object metadata");
                 accumulator.addAll(cachedCreds);
                 return;
-            } else {
-                log.debug("Found no cached credentials in KeyDescriptor object metadata, resolving from KeyInfo");
             }
+            log.debug("Found no cached credentials in KeyDescriptor object metadata, resolving from KeyInfo");
         } finally {
             // Note: with the standard Java ReentrantReadWriteLock impl, you can not upgrade a read lock
             // to a write lock!  So have to release here and then acquire the write lock below.
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataSignatureSigningParametersResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataSignatureSigningParametersResolver.java
index ceaf073..0813767 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataSignatureSigningParametersResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataSignatureSigningParametersResolver.java
@@ -109,9 +109,8 @@ public class SAMLMetadataSignatureSigningParametersResolver extends BasicSignatu
                     params.setSigningCredential(credential);
                     params.setSignatureAlgorithm(signingMethod.getAlgorithm());
                     return;
-                } else {
-                    log.trace("Credential failed eval against SigningMethod");
                 }
+                log.trace("Credential failed eval against SigningMethod");
             }
         }
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
index 94fda5a..be1dda1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
@@ -23,10 +23,8 @@ import org.custommonkey.xmlunit.Diff;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.Marshaller;
-import org.opensaml.core.xml.io.MarshallerFactory;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.io.Unmarshaller;
-import org.opensaml.core.xml.io.UnmarshallerFactory;
 import org.opensaml.core.xml.io.UnmarshallingException;
 import org.opensaml.saml.saml2.metadata.Organization;
 import org.opensaml.saml.saml2.metadata.OrganizationDisplayName;
@@ -81,11 +79,9 @@ public class RoundTripTest extends XMLObjectBaseTestCase {
         newOrgURL.setXMLLang("en");
         organization.getURLs().add(newOrgURL);
         
-        MarshallerFactory marshallerFactory = XMLObjectProviderRegistrySupport.getMarshallerFactory();
-        orgMarshaller = marshallerFactory.getMarshaller(organization);
-        
-        UnmarshallerFactory unmarshallerFactory = XMLObjectProviderRegistrySupport.getUnmarshallerFactory();
-        orgUnmarshaller = unmarshallerFactory.getUnmarshaller(organization.getElementQName());
+        orgMarshaller = XMLObjectProviderRegistrySupport.getMarshallerFactory().getMarshaller(organization);
+        orgUnmarshaller = XMLObjectProviderRegistrySupport.getUnmarshallerFactory().getUnmarshaller(
+                organization.getElementQName());
     }
 
     /**
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/DefaultEndpointResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/DefaultEndpointResolverTest.java
index 82fe019..69d7b27 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/DefaultEndpointResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/DefaultEndpointResolverTest.java
@@ -74,7 +74,7 @@ public class DefaultEndpointResolverTest extends XMLObjectBaseTestCase {
                         AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         ep.setBinding(SAMLConstants.SAML2_POST_BINDING_URI);
         ep.setLocation(LOCATION);
-        endpointCrit = new EndpointCriterion(ep, false);
+        endpointCrit = new EndpointCriterion<>(ep, false);
     }
 
     @Test(expectedExceptions = ResolverException.class)
@@ -90,7 +90,7 @@ public class DefaultEndpointResolverTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testSignedRequest() throws ResolverException {
-        final CriteriaSet crits = new CriteriaSet(new EndpointCriterion(endpointCrit.getEndpoint(), true));
+        final CriteriaSet crits = new CriteriaSet(new EndpointCriterion<>(endpointCrit.getEndpoint(), true));
         final AssertionConsumerService ep = resolver.resolveSingle(crits);
         Assert.assertNotNull(ep);
         Assert.assertSame(ep, endpointCrit.getEndpoint());
@@ -99,7 +99,7 @@ public class DefaultEndpointResolverTest extends XMLObjectBaseTestCase {
     /** SP requests an endpoint but we don't support the binding. */
     @Test
     public void testSignedRequestBadBinding() throws ResolverException {
-        final CriteriaSet crits = new CriteriaSet(new EndpointCriterion(endpointCrit.getEndpoint(), true),
+        final CriteriaSet crits = new CriteriaSet(new EndpointCriterion<>(endpointCrit.getEndpoint(), true),
                 new BindingCriterion(Collections.<String>emptyList()));
         final AssertionConsumerService ep = resolver.resolveSingle(crits);
         Assert.assertNull(ep);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
index 297bf98..c4100bf 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandlerTest.java
@@ -90,8 +90,8 @@ public class PopulateSignatureSigningParametersHandlerTest extends OpenSAMLInitB
         // Test copy from PRC to MessageContext
         handler.setSignatureSigningParametersResolver(new MockResolver(true));
         handler.setExistingParametersContextLookupStrategy(
-                new ChildContextLookup(SecurityParametersContext.class).compose(
-                        new ParentProfileRequestContextLookup()));
+                new ChildContextLookup<>(SecurityParametersContext.class).compose(
+                        new ParentProfileRequestContextLookup<>()));
         handler.setSecurityParametersContextLookupStrategy(
                 new ChildContextLookup<MessageContext,SecurityParametersContext>(SecurityParametersContext.class, true));
         handler.initialize();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
index 3c63705..fd73cf5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
@@ -26,7 +26,6 @@ import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
-import org.opensaml.saml.saml2.metadata.Endpoint;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -41,9 +40,10 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
     
     @BeforeMethod
     public void setUp() {
-        SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
-                .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
-        Endpoint samlEndpoint = endpointBuilder.buildObject();
+        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+                (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>getBuilderOrThrow(
+                        AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+        AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         
         handler = new SAMLOutboundDestinationHandler();
@@ -55,8 +55,9 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
     @Test
     public void testSAML1Response() throws MessageHandlerException {
         SAMLObjectBuilder<org.opensaml.saml.saml1.core.Response> requestBuilder = 
-                (SAMLObjectBuilder<org.opensaml.saml.saml1.core.Response>) builderFactory
-                .getBuilder(org.opensaml.saml.saml1.core.Response.DEFAULT_ELEMENT_NAME);
+                (SAMLObjectBuilder<org.opensaml.saml.saml1.core.Response>)
+                builderFactory.<org.opensaml.saml.saml1.core.Response>getBuilderOrThrow(
+                        org.opensaml.saml.saml1.core.Response.DEFAULT_ELEMENT_NAME);
         org.opensaml.saml.saml1.core.Response samlMessage = requestBuilder.buildObject();
         messageContext.setMessage(samlMessage);
         
@@ -69,8 +70,9 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testSAML2Request() throws MessageHandlerException {
-        SAMLObjectBuilder<AuthnRequest> requestBuilder = (SAMLObjectBuilder<AuthnRequest>) builderFactory
-                .getBuilder(AuthnRequest.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<AuthnRequest> requestBuilder =
+                (SAMLObjectBuilder<AuthnRequest>) builderFactory.<AuthnRequest>getBuilderOrThrow(
+                        AuthnRequest.DEFAULT_ELEMENT_NAME);
         AuthnRequest samlMessage = requestBuilder.buildObject();
         messageContext.setMessage(samlMessage);
         
@@ -84,8 +86,9 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
     @Test
     public void testSAML2Response() throws MessageHandlerException {
         SAMLObjectBuilder<org.opensaml.saml.saml2.core.Response> requestBuilder = 
-                (SAMLObjectBuilder<org.opensaml.saml.saml2.core.Response>) builderFactory
-                .getBuilder(org.opensaml.saml.saml2.core.Response.DEFAULT_ELEMENT_NAME);
+                (SAMLObjectBuilder<org.opensaml.saml.saml2.core.Response>)
+                builderFactory.<org.opensaml.saml.saml2.core.Response>getBuilderOrThrow(
+                        org.opensaml.saml.saml2.core.Response.DEFAULT_ELEMENT_NAME);
         org.opensaml.saml.saml2.core.Response samlMessage = requestBuilder.buildObject();
         messageContext.setMessage(samlMessage);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
index 49f6e19..986e328 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
@@ -79,7 +79,7 @@ public class SAMLProtocolAndRoleHandlerTest {
     
     @Test
     public void testCopySource() throws ComponentInitializationException, MessageHandlerException {
-        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup(InOutOperationContext.class));
+        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         handler.initialize();
         
         final InOutOperationContext opContext = new InOutOperationContext(messageContext, new MessageContext());
@@ -97,7 +97,7 @@ public class SAMLProtocolAndRoleHandlerTest {
     
     @Test
     public void testCopySourceWithEntityClass() throws ComponentInitializationException, MessageHandlerException {
-        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup(InOutOperationContext.class));
+        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         handler.setEntityContextClass(SAMLPresenterEntityContext.class);
         handler.initialize();
         
@@ -130,7 +130,7 @@ public class SAMLProtocolAndRoleHandlerTest {
     
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testResolverWithNoCopySource() throws ComponentInitializationException, MessageHandlerException {
-        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup(InOutOperationContext.class));
+        handler.setCopyContextLookup(new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         handler.initialize();
         
         handler.invoke(messageContext);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
index 20a7a21..30fb3da 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.common.binding.security.impl;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.security.impl.EndpointURLSchemeSecurityHandler;
 import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -40,7 +39,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         endpoint.setLocation("http://idp.example.com/sso");
         
         final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage((SAMLObject) buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
+        messageContext.setMessage(buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
         
@@ -54,7 +53,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         endpoint.setResponseLocation("http://sp.example.com/acs");
         
         final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage((SAMLObject) buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
+        messageContext.setMessage(buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
         
@@ -68,7 +67,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         endpoint.setLocation("badscheme://idp.example.com/sso");
         
         final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage((SAMLObject) buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
+        messageContext.setMessage(buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
         
@@ -82,7 +81,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         endpoint.setResponseLocation("badscheme://sp.example.com/acs");
         
         final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage((SAMLObject) buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
+        messageContext.setMessage(buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
index 46adb13..ecbcb2c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
@@ -233,11 +233,11 @@ public class SAMLMDClientCertAuthSecurityHandlerTest extends XMLObjectBaseTestCa
         trustedCredentials.add(validX509Cred);
         
         // Build a SAML message from which the SAML peer entityID can not be resolved.
-        final Request request = buildXMLObject(Request.DEFAULT_ELEMENT_NAME);
+        final Request req = buildXMLObject(Request.DEFAULT_ELEMENT_NAME);
         final AttributeQuery query = buildXMLObject(AttributeQuery.DEFAULT_ELEMENT_NAME);
         query.setResource(null); // Set null for good measure
-        request.setQuery(query);
-        messageContext.setMessage(request);
+        req.setQuery(query);
+        messageContext.setMessage(req);
         
         messageContext.getSubcontext(SAMLPeerEntityContext.class).setEntityId(null);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
index 8e1409b..76078ba 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
@@ -103,8 +103,8 @@ public class AddAudienceRestrictionToAssertionsTest extends OpenSAMLInitBaseTest
      * response.
      */
     @Test public void testSingleAssertionWithExistingCondition() throws Exception {
-        final SAMLObjectBuilder<Conditions> conditionsBuilder =
-                (SAMLObjectBuilder<Conditions>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
                         Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
 
@@ -129,13 +129,13 @@ public class AddAudienceRestrictionToAssertionsTest extends OpenSAMLInitBaseTest
 
     /** Test that an addition condition is not added if an assertion already contains one. */
     @Test public void testSingleAssertionWithExistingAudienceCondition() throws Exception {
-        final SAMLObjectBuilder<AudienceRestrictionCondition> conditionBuilder =
-                (SAMLObjectBuilder<AudienceRestrictionCondition>) XMLObjectProviderRegistrySupport.getBuilderFactory()
-                        .getBuilder(AudienceRestrictionCondition.DEFAULT_ELEMENT_NAME);
+        final SAMLObjectBuilder<AudienceRestrictionCondition> conditionBuilder = (SAMLObjectBuilder<AudienceRestrictionCondition>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<AudienceRestrictionCondition>getBuilderOrThrow(
+                        AudienceRestrictionCondition.DEFAULT_ELEMENT_NAME);
         final AudienceRestrictionCondition condition = conditionBuilder.buildObject();
 
-        final SAMLObjectBuilder<Conditions> conditionsBuilder =
-                (SAMLObjectBuilder<Conditions>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
                         Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
         conditions.getAudienceRestrictionConditions().add(condition);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertionsTest.java
index 6d66512..d181e08 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertionsTest.java
@@ -95,7 +95,8 @@ public class AddNotBeforeConditionToAssertionsTest  extends OpenSAMLInitBaseTest
     @Test
     public void testSingleAssertionWithExistingConditions() {
         SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(Conditions.DEFAULT_ELEMENT_NAME);
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
+                        Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
 
         final Assertion assertion = SAML1ActionTestingSupport.buildAssertion();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertionsTest.java
index 1eb6b3a..60a1a0c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertionsTest.java
@@ -102,8 +102,9 @@ public class AddNotOnOrAfterConditionToAssertionsTest  extends OpenSAMLInitBaseT
      */
     @Test
     public void testSingleAssertionWithExistingConditions() throws ComponentInitializationException {
-        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(Conditions.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
+                        Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
 
         final Assertion assertion = SAML1ActionTestingSupport.buildAssertion();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParametersTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParametersTest.java
index b766708..0dbc438 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParametersTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParametersTest.java
@@ -87,7 +87,7 @@ public class PopulateSignatureSigningParametersTest extends OpenSAMLInitBaseTest
     @Test public void testCopy() throws Exception {
         // Test copy from PRC to MessageContext
         action.setSignatureSigningParametersResolver(new MockResolver(true));
-        action.setExistingParametersContextLookupStrategy(new ChildContextLookup(SecurityParametersContext.class));
+        action.setExistingParametersContextLookupStrategy(new ChildContextLookup<>(SecurityParametersContext.class));
         action.setSecurityParametersContextLookupStrategy(
                 new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
                         new OutboundMessageContextLookup()));
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2delrestrict/impl/DelegationRestrictionTypeTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2delrestrict/impl/DelegationRestrictionTypeTest.java
index d2f387f..40cb6c5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2delrestrict/impl/DelegationRestrictionTypeTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2delrestrict/impl/DelegationRestrictionTypeTest.java
@@ -66,8 +66,9 @@ public class DelegationRestrictionTypeTest extends XMLObjectProviderBaseTestCase
     /** {@inheritDoc} */
     @Test
     public void testSingleElementMarshall() {
-        SAMLObjectBuilder<DelegationRestrictionType> builder =
-            (SAMLObjectBuilder<DelegationRestrictionType>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(DelegationRestrictionType.TYPE_NAME);
+        SAMLObjectBuilder<DelegationRestrictionType> builder = (SAMLObjectBuilder<DelegationRestrictionType>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<DelegationRestrictionType>getBuilderOrThrow(
+                        DelegationRestrictionType.TYPE_NAME);
         
         DelegationRestrictionType drt = builder.buildObject();
 
@@ -78,8 +79,9 @@ public class DelegationRestrictionTypeTest extends XMLObjectProviderBaseTestCase
     /** {@inheritDoc} */
     @Test
     public void testChildElementsMarshall() {
-        SAMLObjectBuilder<DelegationRestrictionType> builder =
-            (SAMLObjectBuilder<DelegationRestrictionType>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(DelegationRestrictionType.TYPE_NAME);
+        SAMLObjectBuilder<DelegationRestrictionType> builder = (SAMLObjectBuilder<DelegationRestrictionType>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<DelegationRestrictionType>getBuilderOrThrow(
+                        DelegationRestrictionType.TYPE_NAME);
         
         DelegationRestrictionType drt = builder.buildObject();
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/DiscoHintsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/DiscoHintsTest.java
index 5d4e56b..99b64af 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/DiscoHintsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/DiscoHintsTest.java
@@ -96,7 +96,7 @@ public class DiscoHintsTest extends XMLObjectProviderBaseTestCase {
 
         hints.getGeolocationHints().add((GeolocationHint) buildXMLObject(GeolocationHint.DEFAULT_ELEMENT_NAME));
         
-        hints.getXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        hints.getXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
         
         hints.getDomainHints().add((DomainHint) buildXMLObject(DomainHint.DEFAULT_ELEMENT_NAME));
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/KeywordsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/KeywordsTest.java
index d0f61be..d79dc65 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/KeywordsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/KeywordsTest.java
@@ -45,7 +45,7 @@ public class KeywordsTest extends XMLObjectProviderBaseTestCase {
     public KeywordsTest() {
         singleElementFile = "/org/opensaml/saml/ext/saml2mdui/Keywords.xml";
         String[] contents = {"This", "is", "a", "six", "element", "keyword"}; 
-        expectedWords = new ArrayList(contents.length);
+        expectedWords = new ArrayList<>(contents.length);
         for (String s : contents) {
             expectedWords.add(s);
         }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/UIInfoTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/UIInfoTest.java
index bbe6ca6..2cf53b4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/UIInfoTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/UIInfoTest.java
@@ -122,7 +122,7 @@ public class UIInfoTest extends XMLObjectProviderBaseTestCase {
 
         uiinfo.getPrivacyStatementURLs().add((PrivacyStatementURL) buildXMLObject(PrivacyStatementURL.DEFAULT_ELEMENT_NAME));
         
-        uiinfo.getXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        uiinfo.getXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
         
         uiinfo.getDisplayNames().add((DisplayName) buildXMLObject(DisplayName.DEFAULT_ELEMENT_NAME));
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilTest.java
index 4d043fe..37f0c76 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilTest.java
@@ -84,8 +84,9 @@ public class RequiredValidUntilTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testRequiredValidUntilAlreadyPast() throws Exception {
-        SAMLObjectBuilder<EntitiesDescriptor> entitiesDescriptorBuilder = 
-                (SAMLObjectBuilder<EntitiesDescriptor>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(EntitiesDescriptor.TYPE_NAME);
+        SAMLObjectBuilder<EntitiesDescriptor> entitiesDescriptorBuilder = (SAMLObjectBuilder<EntitiesDescriptor>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<EntitiesDescriptor>getBuilderOrThrow(
+                        EntitiesDescriptor.TYPE_NAME);
         EntitiesDescriptor descriptor = entitiesDescriptorBuilder.buildObject();
         descriptor.setValidUntil(Instant.now().minusMillis(10000));
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolverTest.java
index 62c0c45..7fac4d5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolverTest.java
@@ -61,11 +61,10 @@ public class AbstractDynamicHTTPMetadataResolverTest extends XMLObjectBaseTestCa
         
         entityDescriptor = buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
         entityDescriptor.setEntityID("https://foo1.example.org/idp/shibboleth");
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        XMLObjectSupport.marshallToOutputStream(entityDescriptor, baos);
-        baos.flush();
-        baos.close();
-        entityDescriptorBytes = baos.toByteArray();
+        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            XMLObjectSupport.marshallToOutputStream(entityDescriptor, baos);
+            entityDescriptorBytes = baos.toByteArray();
+        }
         
         resolver = new MockDynamicHTTPMetadataResolver(httpClient);
         resolver.setId("myDynamicResolver");
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolverTest.java
index 03277cd..672b5c4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolverTest.java
@@ -119,7 +119,6 @@ public class AbstractDynamicMetadataResolverTest extends XMLObjectBaseTestCase {
     
     @BeforeMethod
     protected void setUpEntityData() throws MarshallingException, IOException, SecurityException, SignatureException {
-        ByteArrayOutputStream baos = null;
         
         id1 = "urn:test:entity:1";
         ed1 = buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
@@ -127,11 +126,11 @@ public class AbstractDynamicMetadataResolverTest extends XMLObjectBaseTestCase {
         ed1.getRoleDescriptors().add((RoleDescriptor) buildXMLObject(SPSSODescriptor.DEFAULT_ELEMENT_NAME));
         SignatureSupport.signObject(ed1, signingParams);
         Assert.assertTrue(ed1.isSigned());
-        baos = new ByteArrayOutputStream();
-        XMLObjectSupport.marshallToOutputStream(ed1, baos);
-        baos.flush();
-        baos.close();
-        Assert.assertNotNull(ed1.getDOM());
+        
+        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            XMLObjectSupport.marshallToOutputStream(ed1, baos);
+            Assert.assertNotNull(ed1.getDOM());
+        }
         
         id2 = "urn:test:entity:2";
         ed2 = buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
@@ -139,11 +138,11 @@ public class AbstractDynamicMetadataResolverTest extends XMLObjectBaseTestCase {
         ed2.getRoleDescriptors().add((RoleDescriptor) buildXMLObject(SPSSODescriptor.DEFAULT_ELEMENT_NAME));
         SignatureSupport.signObject(ed2, signingParams);
         Assert.assertTrue(ed2.isSigned());
-        baos = new ByteArrayOutputStream();
-        XMLObjectSupport.marshallToOutputStream(ed2, baos);
-        baos.flush();
-        baos.close();
-        Assert.assertNotNull(ed2.getDOM());
+        
+        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            XMLObjectSupport.marshallToOutputStream(ed2, baos);
+            Assert.assertNotNull(ed2.getDOM());
+        }
         
         id3 = "urn:test:entity:3";
         ed3 = buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
@@ -151,12 +150,11 @@ public class AbstractDynamicMetadataResolverTest extends XMLObjectBaseTestCase {
         ed3.getRoleDescriptors().add((RoleDescriptor) buildXMLObject(IDPSSODescriptor.DEFAULT_ELEMENT_NAME));
         SignatureSupport.signObject(ed3, signingParams);
         Assert.assertTrue(ed3.isSigned());
-        baos = new ByteArrayOutputStream();
-        XMLObjectSupport.marshallToOutputStream(ed3, baos);
-        baos.flush();
-        baos.close();
-        Assert.assertNotNull(ed3.getDOM());
         
+        try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            XMLObjectSupport.marshallToOutputStream(ed3, baos);
+            Assert.assertNotNull(ed3.getDOM());
+        }
     }
     
     @BeforeMethod
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolverTest.java
deleted file mode 100644
index 965f33c..0000000
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/BasicRoleDescriptorResolverTest.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.opensaml.saml.metadata.resolver.impl;
-
-import java.util.Collections;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
-import org.opensaml.core.criterion.EntityIdCriterion;
-import org.opensaml.core.xml.XMLObjectBaseTestCase;
-import org.opensaml.saml.common.xml.SAMLConstants;
-import org.opensaml.saml.criterion.EntityRoleCriterion;
-import org.opensaml.saml.criterion.ProtocolCriterion;
-import org.opensaml.saml.ext.saml2mdquery.AttributeQueryDescriptorType;
-import org.opensaml.saml.metadata.resolver.MetadataResolver;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
-import org.opensaml.saml.saml2.metadata.EntityDescriptor;
-import org.opensaml.saml.saml2.metadata.RoleDescriptor;
-import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-/**
- *
- */
-public class BasicRoleDescriptorResolverTest extends XMLObjectBaseTestCase {
-    
-    private BasicRoleDescriptorResolver roleResolver;
-    
-    @BeforeMethod
-    public void setUp() throws ComponentInitializationException {
-        final EntityDescriptor entityDescriptor = buildTestDescriptor();
-        
-        MetadataResolver metadataResolver = new MetadataResolver() {
-            
-            @Nullable public String getId() { return "foo"; }
-            
-            @Nullable
-            public EntityDescriptor resolveSingle(CriteriaSet criteria) throws ResolverException {
-                return entityDescriptor;
-            }
-            
-            @Nonnull
-            public Iterable<EntityDescriptor> resolve(CriteriaSet criteria) throws ResolverException {
-                return Collections.singletonList(entityDescriptor);
-            }
-
-            public boolean isRequireValidMetadata() {
-                return false;
-            }
-
-            public void setRequireValidMetadata(boolean requireValidMetadata) { }
-
-            public MetadataFilter getMetadataFilter() {
-                return null;
-            }
-
-            public void setMetadataFilter(MetadataFilter newFilter) { }
-        };
-        
-        roleResolver = new BasicRoleDescriptorResolver(metadataResolver);
-        roleResolver.initialize();
-    }
-    
-    @Test
-    public void testResolveSingleNoProtocol() throws ResolverException {
-        RoleDescriptor roleDescriptor = roleResolver.resolveSingle(new CriteriaSet(
-                new EntityIdCriterion("http://www.example.org"), 
-                new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME)));
-        Assert.assertNotNull(roleDescriptor, "Resolved RoleDescriptor was null");
-        Assert.assertEquals(SPSSODescriptor.DEFAULT_ELEMENT_NAME, roleDescriptor.getElementQName(),
-                "Saw incorrect role type");
-    }
-    
-    @Test
-    public void testResolveMultiNoProtocol() throws ResolverException {
-        Iterable<RoleDescriptor> roleDescriptors = roleResolver.resolve(new CriteriaSet(
-                new EntityIdCriterion("http://www.example.org"), 
-                new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME)));
-       Assert.assertNotNull(roleDescriptors, "Resolved RoleDescriptor iterable was null");
-       
-       int count = 0;
-       for (RoleDescriptor roleDescriptor : roleDescriptors) {
-            Assert.assertEquals(SPSSODescriptor.DEFAULT_ELEMENT_NAME, roleDescriptor.getElementQName(),
-                    "Saw incorrect role type");
-           count++;
-       }
-       
-       Assert.assertEquals(2, count, "Resolved unexpected number of RoleDescriptors");
-    }
-    
-    @Test
-    public void testResolveSingleWithProtocol() throws ResolverException {
-        RoleDescriptor roleDescriptor = roleResolver.resolveSingle(new CriteriaSet(
-                new EntityIdCriterion("http://www.example.org"), 
-                new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME),
-                new ProtocolCriterion(SAMLConstants.SAML20P_NS)));
-        
-        Assert.assertNotNull(roleDescriptor, "Resolved RoleDescriptor was null");
-        Assert.assertEquals(SPSSODescriptor.DEFAULT_ELEMENT_NAME, roleDescriptor.getElementQName(),
-                "Saw incorrect role type");
-        Assert.assertTrue(roleDescriptor.getSupportedProtocols().contains(SAMLConstants.SAML20P_NS),
-                "Returned RoleDescriptor didn't support specified protocol");
-    }
-    
-    @Test
-    public void testResolveMultiWithProtocol() throws ResolverException {
-        Iterable<RoleDescriptor> roleDescriptors = roleResolver.resolve(new CriteriaSet(
-                new EntityIdCriterion("http://www.example.org"), 
-                new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME),
-                new ProtocolCriterion(SAMLConstants.SAML20P_NS)));
-       Assert.assertNotNull(roleDescriptors, "Resolved RoleDescriptor iterable was null");
-       
-       int count = 0;
-       for (RoleDescriptor roleDescriptor : roleDescriptors) {
-            Assert.assertEquals(SPSSODescriptor.DEFAULT_ELEMENT_NAME, roleDescriptor.getElementQName(),
-                    "Saw incorrect role type");
-            Assert.assertTrue(roleDescriptor.getSupportedProtocols().contains(SAMLConstants.SAML20P_NS),
-                    "Returned RoleDescriptor didn't support specified protocol");
-            count++;
-       }
-       
-       Assert.assertEquals(1, count, "Resolved unexpected number of RoleDescriptors");
-    }
-    
-    // Helper methods
-    
-    private EntityDescriptor buildTestDescriptor() {
-        EntityDescriptor entityDescriptor = buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
-        
-        SPSSODescriptor spssoDescriptor1 = buildXMLObject(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        spssoDescriptor1.addSupportedProtocol(SAMLConstants.SAML11P_NS);
-        entityDescriptor.getRoleDescriptors().add(spssoDescriptor1);
-        
-        AttributeQueryDescriptorType aqDescriptor = buildXMLObject(AttributeQueryDescriptorType.TYPE_NAME);
-        aqDescriptor.addSupportedProtocol(SAMLConstants.SAML20P_NS);
-        entityDescriptor.getRoleDescriptors().add(aqDescriptor);
-        
-        SPSSODescriptor spssoDescriptor2 = buildXMLObject(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
-        spssoDescriptor2.addSupportedProtocol(SAMLConstants.SAML20P_NS);
-        entityDescriptor.getRoleDescriptors().add(spssoDescriptor2);
-        
-        return entityDescriptor;
-    }
-
-
-}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/DOMMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/DOMMetadataResolverTest.java
index 455c0ba..3b10950 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/DOMMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/DOMMetadataResolverTest.java
@@ -53,12 +53,12 @@ public class DOMMetadataResolverTest extends XMLObjectBaseTestCase {
         URL mdURL = DOMMetadataResolverTest.class
                 .getResource("/org/opensaml/saml/saml2/metadata/InCommon-metadata.xml");
         mdFile = new File(mdURL.toURI());
-        FileInputStream fis = new FileInputStream(mdFile);
-        Document document = parserPool.parse(fis);
-        fis.close();
         
-
-        metadataProvider = new DOMMetadataResolver(document.getDocumentElement());
+        try (final FileInputStream fis = new FileInputStream(mdFile)) {
+            Document document = parserPool.parse(fis);
+            metadataProvider = new DOMMetadataResolver(document.getDocumentElement());
+        }
+        
         metadataProvider.setId("test");
         metadataProvider.initialize();
         
@@ -74,11 +74,9 @@ public class DOMMetadataResolverTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testFilterFailureAndNoFailFast() throws URISyntaxException, XMLParserException, IOException, ResolverException {
-        FileInputStream fis = new FileInputStream(mdFile);
-        Document document = parserPool.parse(fis);
-        fis.close();
-        
-        try {
+
+        try (final FileInputStream fis = new FileInputStream(mdFile)) {
+            Document document = parserPool.parse(fis);
             metadataProvider = new DOMMetadataResolver(document.getDocumentElement());
             metadataProvider.setMetadataFilter(new MockFailureFilter());
             metadataProvider.setFailFastInitialization(false);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
index 4a96b62..a3617b7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
@@ -332,7 +332,7 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
         final InputStream certStream = FileBackedHTTPMetadataResolver.class.getResourceAsStream((HTTPMetadataResolverTest.DATA_PATH + cert));
         final X509Certificate rootCert = X509Support.decodeCertificate(ByteStreams.toByteArray(certStream));
         final PKIXValidationInformation info = new BasicPKIXValidationInformation(Collections.singletonList(rootCert), null, 5);
-        final Set<String> trustedNames = (Set<String>) (name != null ? Collections.singleton(name) : Collections.emptySet());
+        final Set<String> trustedNames = name != null ? Collections.singleton(name) : Collections.emptySet();
         final StaticPKIXValidationInformationResolver resolver = new StaticPKIXValidationInformationResolver(Collections.singletonList(info), trustedNames);
         return new PKIXX509CredentialTrustEngine(resolver,
                 new CertPathPKIXTrustEvaluator(),
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
index b099598..b2cad24 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilderTest.java
@@ -77,17 +77,16 @@ public class MetadataQueryProtocolRequestURLBuilderTest {
         
         private String suffix;
         
-        public MockURLBuilder(String suffix) {
-            this.suffix = suffix;
+        public MockURLBuilder(String s) {
+            suffix = s;
         }
 
         /** {@inheritDoc} */
         public String buildURL(String baseURL, CriteriaSet criteria) {
             if (suffix == null) {
                 return null;
-            } else {
-                return baseURL + suffix;
             }
+            return baseURL + suffix;
         }
         
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/ConstantEntityDescriptorFunction.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/ConstantEntityDescriptorFunction.java
index a62a30b..b448b12 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/ConstantEntityDescriptorFunction.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/ConstantEntityDescriptorFunction.java
@@ -35,8 +35,8 @@ public class ConstantEntityDescriptorFunction implements Function<EntityDescript
     
     private String value;
     
-    public ConstantEntityDescriptorFunction(String value) {
-        this.value = Constraint.isNotNull(StringSupport.trimOrNull(value), "Value was null or empty");
+    public ConstantEntityDescriptorFunction(String val) {
+        value = Constraint.isNotNull(StringSupport.trimOrNull(val), "Value was null or empty");
     }
 
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndexTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndexTest.java
index 8caad99..04d00ea 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndexTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/EndpointMetadataIndexTest.java
@@ -122,7 +122,7 @@ public class EndpointMetadataIndexTest extends XMLObjectBaseTestCase {
         criteriaSet.add(new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME));
         endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setLocation(location1);
-        criteriaSet.add(new EndpointCriterion<Endpoint>(endpoint));
+        criteriaSet.add(new EndpointCriterion<>(endpoint));
         keys = metadataIndex.generateKeys(criteriaSet);
         Assert.assertNotNull(keys);
         Assert.assertEquals(keys.size(), 1);
@@ -134,7 +134,7 @@ public class EndpointMetadataIndexTest extends XMLObjectBaseTestCase {
         endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setLocation(location1);
         endpoint.setResponseLocation(responseLocation1);
-        criteriaSet.add(new EndpointCriterion<Endpoint>(endpoint));
+        criteriaSet.add(new EndpointCriterion<>(endpoint));
         keys = metadataIndex.generateKeys(criteriaSet);
         Assert.assertNotNull(keys);
         Assert.assertEquals(keys.size(), 2);
@@ -146,7 +146,7 @@ public class EndpointMetadataIndexTest extends XMLObjectBaseTestCase {
         criteriaSet.add(new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME));
         endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setLocation("https://www.example.com/cas/someEndpoint1/foo/bar/");
-        criteriaSet.add(new EndpointCriterion<Endpoint>(endpoint));
+        criteriaSet.add(new EndpointCriterion<>(endpoint));
         criteriaSet.add(new StartsWithLocationCriterion());
         keys = metadataIndex.generateKeys(criteriaSet);
         Assert.assertNotNull(keys);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
index 5a164f6..861b787 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
@@ -25,7 +25,6 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.saml.criterion.EntityRoleCriterion;
-import org.opensaml.saml.metadata.resolver.index.MetadataIndex;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.opensaml.saml.saml2.metadata.IDPSSODescriptor;
 import org.opensaml.saml.saml2.metadata.RoleDescriptor;
@@ -85,7 +84,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new UppercaseEntityIdDescriptorFunction(), 
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Collections.<MetadataIndex>singleton(functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Collections.singleton(functionIndex), extractionFunction);
         
         criteriaSet.clear();
         criteriaSet.add(critAEntity);
@@ -186,7 +186,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new UppercaseEntityIdDescriptorFunction(), 
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Collections.<MetadataIndex>singleton(functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Collections.singleton(functionIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         manager.indexEntityDescriptor(b);
@@ -203,7 +204,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
     public void testSingleIndexWithMultipleResults() {
         RoleMetadataIndex roleIndex = new RoleMetadataIndex();
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Collections.<MetadataIndex>singleton(roleIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Collections.singleton(roleIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         manager.indexEntityDescriptor(b);
@@ -272,7 +274,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new UppercaseEntityIdDescriptorFunction(), 
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         manager.indexEntityDescriptor(b);
@@ -296,7 +299,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new UppercaseEntityIdDescriptorFunction(), 
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         manager.indexEntityDescriptor(b);
@@ -318,7 +322,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new ConstantEntityDescriptorFunction("All"),
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Sets.newHashSet(roleIndex, functionIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         manager.indexEntityDescriptor(b);
@@ -348,7 +353,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testNoIndexes() {
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Sets.<MetadataIndex>newHashSet(), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Sets.newHashSet(), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         
@@ -364,7 +370,8 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
                 new FunctionDrivenMetadataIndex(new UppercaseEntityIdDescriptorFunction(), 
                         new SimpleStringCriteriaFunction());
         
-        MetadataIndexManager<EntityDescriptor> manager = new MetadataIndexManager(Collections.<MetadataIndex>singleton(functionIndex), extractionFunction);
+        MetadataIndexManager<EntityDescriptor> manager =
+                new MetadataIndexManager<>(Collections.singleton(functionIndex), extractionFunction);
         
         manager.indexEntityDescriptor(a);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStoreTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStoreTest.java
index 7363ec2..980f013 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStoreTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexStoreTest.java
@@ -42,7 +42,7 @@ public class MetadataIndexStoreTest extends OpenSAMLInitBaseTestCase {
     
     @BeforeMethod
     protected void setUp() {
-        store = new MetadataIndexStore();
+        store = new MetadataIndexStore<>();
         key1 = new SimpleStringMetadataIndexKey("foo");
         key2 = new SimpleStringMetadataIndexKey("bar");
         a = (EntityDescriptor) XMLObjectSupport.buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
index 23030ee..4cb9e61 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
@@ -57,7 +57,6 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
     private VelocityEngine velocityEngine;
 
     @BeforeMethod
-    @SuppressWarnings("unchecked")
     public void setUp() throws Exception {
         velocityEngine = new VelocityEngine();
         velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
index d0eda04..1308bb6 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertionsTest.java
@@ -88,8 +88,8 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
      * response.
      */
     @Test public void testSingleAssertionWithExistingCondition() throws Exception {
-        final SAMLObjectBuilder<Conditions> conditionsBuilder =
-                (SAMLObjectBuilder<Conditions>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
                         Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
 
@@ -114,13 +114,13 @@ public class AddDoNotCacheConditionToAssertionsTest extends OpenSAMLInitBaseTest
 
     /** Test that an addition DoNotCache is not added if an assertion already contains one. */
     @Test public void testSingleAssertionWithExistingDoNotCacheCondition() throws Exception {
-        final SAMLObjectBuilder<DoNotCacheCondition> dncConditionBuilder =
-                (SAMLObjectBuilder<DoNotCacheCondition>) XMLObjectProviderRegistrySupport.getBuilderFactory()
-                        .getBuilder(DoNotCacheCondition.DEFAULT_ELEMENT_NAME);
+        final SAMLObjectBuilder<DoNotCacheCondition> dncConditionBuilder = (SAMLObjectBuilder<DoNotCacheCondition>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<DoNotCacheCondition>getBuilderOrThrow(
+                        DoNotCacheCondition.DEFAULT_ELEMENT_NAME);
         final DoNotCacheCondition dncCondition = dncConditionBuilder.buildObject();
 
-        final SAMLObjectBuilder<Conditions> conditionsBuilder =
-                (SAMLObjectBuilder<Conditions>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
                         Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
         conditions.getDoNotCacheConditions().add(dncCondition);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/BaseAssertionValidationTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/BaseAssertionValidationTest.java
index a7d51ef..bae3ed1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/BaseAssertionValidationTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/BaseAssertionValidationTest.java
@@ -153,13 +153,13 @@ public class BaseAssertionValidationTest extends XMLObjectBaseTestCase {
         return cred;
     }
     
-    protected void signAssertion(Assertion assertion, Credential credential) throws SecurityException, MarshallingException, SignatureException {
+    protected void signAssertion(Assertion a, Credential credential) throws SecurityException, MarshallingException, SignatureException {
         SignatureSigningParameters parameters = new SignatureSigningParameters();
         parameters.setSigningCredential(credential);
         parameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
         parameters.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
         parameters.setSignatureCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-        SignatureSupport.signObject(assertion, parameters);
+        SignatureSupport.signObject(a, parameters);
     }
     
 }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
index 0d3572b..6695338 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
@@ -60,7 +60,6 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
     private VelocityEngine velocityEngine;
 
     @BeforeMethod
-    @SuppressWarnings("unchecked")
     public void setUp() throws Exception {
         velocityEngine = new VelocityEngine();
         velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
@@ -75,29 +74,30 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
      * @throws Exception
      */
     @Test
-    @SuppressWarnings("unchecked")
     public void testResponseEncoding() throws Exception {
-        SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
-                .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<StatusCode> statusCodeBuilder =
+                (SAMLObjectBuilder<StatusCode>) builderFactory.<StatusCode>getBuilderOrThrow(
+                        StatusCode.DEFAULT_ELEMENT_NAME);
         StatusCode statusCode = statusCodeBuilder.buildObject();
         statusCode.setValue(StatusCode.SUCCESS);
 
-        SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
-                .getBuilder(Status.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<Status> statusBuilder =
+                (SAMLObjectBuilder<Status>) builderFactory.<Status>getBuilderOrThrow(Status.DEFAULT_ELEMENT_NAME);
         Status responseStatus = statusBuilder.buildObject();
         responseStatus.setStatusCode(statusCode);
 
-        SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
-                .getBuilder(Response.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<Response> responseBuilder =
+                (SAMLObjectBuilder<Response>) builderFactory.<Response>getBuilderOrThrow(Response.DEFAULT_ELEMENT_NAME);
         Response samlMessage = responseBuilder.buildObject();
         samlMessage.setID("foo");
         samlMessage.setVersion(SAMLVersion.VERSION_20);
         samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
         samlMessage.setStatus(responseStatus);
 
-        SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
-                .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
-        Endpoint samlEndpoint = endpointBuilder.buildObject();
+        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+                (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>getBuilderOrThrow(
+                        AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+        AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
index 61a8594..1b85281 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
@@ -70,7 +70,6 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
     private VelocityEngine velocityEngine;
 
     @BeforeMethod
-    @SuppressWarnings("unchecked")
     public void setUp() throws Exception {
         velocityEngine = new VelocityEngine();
         velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
@@ -85,28 +84,29 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
      * @throws Exception
      */
     @Test
-    @SuppressWarnings("unchecked")
     public void testResponseEncoding() throws Exception {
-        SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
-                .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<StatusCode> statusCodeBuilder =
+                (SAMLObjectBuilder<StatusCode>) builderFactory.<StatusCode>getBuilderOrThrow(
+                        StatusCode.DEFAULT_ELEMENT_NAME);
         StatusCode statusCode = statusCodeBuilder.buildObject();
         statusCode.setValue(StatusCode.SUCCESS);
 
-        SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
-                .getBuilder(Status.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<Status> statusBuilder =
+                (SAMLObjectBuilder<Status>) builderFactory.<Status>getBuilderOrThrow(Status.DEFAULT_ELEMENT_NAME);
         Status responseStatus = statusBuilder.buildObject();
         responseStatus.setStatusCode(statusCode);
 
-        SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
-                .getBuilder(Response.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<Response> responseBuilder =
+                (SAMLObjectBuilder<Response>) builderFactory.<Response>getBuilderOrThrow(Response.DEFAULT_ELEMENT_NAME);
         Response samlMessage = responseBuilder.buildObject();
         samlMessage.setID("foo");
         samlMessage.setVersion(SAMLVersion.VERSION_20);
         samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
         samlMessage.setStatus(responseStatus);
 
-        SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
-                .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+                (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>getBuilderOrThrow(
+                        AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         Endpoint samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
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 bbe42c1..2a7ec5c 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
@@ -39,7 +39,6 @@ import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLTestSupport;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -50,7 +49,6 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.binding.encoding.impl.HTTPPostSimpleSignEncoder;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
-import org.opensaml.saml.saml2.metadata.Endpoint;
 import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.opensaml.security.credential.Credential;
 import org.opensaml.security.credential.impl.CollectionCredentialResolver;
@@ -345,27 +343,28 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         //
         // Encode the "outbound" message context, with simple signature
         //
-        final SAMLObjectBuilder<Endpoint> endpointBuilder =
-                (SAMLObjectBuilder<Endpoint>) builderFactory.getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
-        Endpoint samlEndpoint = endpointBuilder.buildObject();
+        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+                (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>getBuilderOrThrow(
+                        AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+        AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage(buildInboundSAMLMessage());
-        SAMLBindingSupport.setRelayState(messageContext, expectedRelayValue);
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
+        final MessageContext mc = new MessageContext();
+        mc.setMessage(buildInboundSAMLMessage());
+        SAMLBindingSupport.setRelayState(mc, expectedRelayValue);
+        mc.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
         
         final SignatureSigningParameters signingParameters = new SignatureSigningParameters();
         signingParameters.setSigningCredential(signingX509Cred);
         signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-        messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+        mc.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
         
         final MockHttpServletResponse response = new MockHttpServletResponse();
         
         final HTTPPostSimpleSignEncoder encoder = new HTTPPostSimpleSignEncoder();
-        encoder.setMessageContext(messageContext);
+        encoder.setMessageContext(mc);
         encoder.setHttpServletResponse(response);
         
         encoder.setVelocityEngine(velocityEngine);
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 8b9ded3..0387b56 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
@@ -34,7 +34,6 @@ import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLTestSupport;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -45,7 +44,6 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.binding.encoding.impl.HTTPRedirectDeflateEncoder;
 import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
-import org.opensaml.saml.saml2.metadata.Endpoint;
 import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.opensaml.security.credential.Credential;
 import org.opensaml.security.credential.impl.CollectionCredentialResolver;
@@ -298,27 +296,28 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         //
         // Encode the "outbound" message context, with simple signature
         //
-        final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
-        .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
-        Endpoint samlEndpoint = endpointBuilder.buildObject();
+        SAMLObjectBuilder<AssertionConsumerService> endpointBuilder =
+                (SAMLObjectBuilder<AssertionConsumerService>) builderFactory.<AssertionConsumerService>getBuilderOrThrow(
+                        AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+        AssertionConsumerService samlEndpoint = endpointBuilder.buildObject();
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        final MessageContext messageContext = new MessageContext();
-        messageContext.setMessage(buildInboundSAMLMessage());
-        SAMLBindingSupport.setRelayState(messageContext, expectedRelayValue);
-        messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
+        final MessageContext mc = new MessageContext();
+        mc.setMessage(buildInboundSAMLMessage());
+        SAMLBindingSupport.setRelayState(mc, expectedRelayValue);
+        mc.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
         
         final SignatureSigningParameters signingParameters = new SignatureSigningParameters();
         signingParameters.setSigningCredential(signingX509Cred);
         signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-        messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+        mc.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
         
         final MockHttpServletResponse response = new MockHttpServletResponse();
         
         final HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
-        encoder.setMessageContext(messageContext);
+        encoder.setMessageContext(mc);
         encoder.setHttpServletResponse(response);
         
         try {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/AuthnRequestTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/AuthnRequestTest.java
index cb49fe0..bcdf48c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/AuthnRequestTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/AuthnRequestTest.java
@@ -66,7 +66,7 @@ public class AuthnRequestTest extends BaseComplexSAMLObjectTestCase {
         Assert.assertEquals(request.getSubject().getNameID().getValue(), "j.doe at company.com", "Subject/NameID contents");
         Audience audience = request.getConditions().getAudienceRestrictions().get(0).getAudiences().get(0);
         Assert.assertEquals(audience.getAudienceURI(), "urn:foo:sp.example.org", "Conditions/AudienceRestriction[1]/Audience[1] contents");
-        AuthnContextClassRef classRef = (AuthnContextClassRef) request.getRequestedAuthnContext().getAuthnContextClassRefs().get(0);
+        AuthnContextClassRef classRef = request.getRequestedAuthnContext().getAuthnContextClassRefs().get(0);
         Assert.assertEquals(classRef.getAuthnContextClassRef(), "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", "RequestedAuthnContext/AuthnContextClassRef[1] contents");
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/ResponseSuccessAuthnAttribTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/ResponseSuccessAuthnAttribTest.java
index f42c3d3..b91310a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/ResponseSuccessAuthnAttribTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/ResponseSuccessAuthnAttribTest.java
@@ -69,7 +69,7 @@ public class ResponseSuccessAuthnAttribTest extends BaseComplexSAMLObjectTestCas
         Assert.assertEquals(response.getIssuer().getFormat(), "urn:oasis:names:tc:SAML:2.0:nameid-format:entity", "Issuer/@Format");
         Assert.assertEquals(response.getStatus().getStatusCode().getValue(), "urn:oasis:names:tc:SAML:2.0:status:Success", "Status/Statuscode/@Value");
         
-        Assertion assertion = (Assertion) response.getAssertions().get(0);
+        Assertion assertion = response.getAssertions().get(0);
         Assert.assertNotNull(assertion, "Assertion[0] was null");
         Assert.assertEquals(assertion.getID(), "_a75adf55-01d7-40cc-929f-dbd8372ebdfc", "Assertion ID");
         Assert.assertEquals(assertion.getIssueInstant(), Instant.parse("2006-01-26T13:35:05.000Z"), "Assertion/@IssueInstant");
@@ -81,14 +81,14 @@ public class ResponseSuccessAuthnAttribTest extends BaseComplexSAMLObjectTestCas
         Assert.assertEquals(sc.getMethod(), "urn:oasis:names:tc:SAML:2.0:cm:bearer", "Assertion/Subject/SubjectConfirmation/@Method");
         Assert.assertEquals(assertion.getConditions().getNotBefore(), Instant.parse("2006-01-26T13:35:05.000Z"), "Assertion/Condition/@NotBefore");
         Assert.assertEquals(assertion.getConditions().getNotOnOrAfter(), Instant.parse("2006-01-26T13:45:05.000Z"), "Assertion/Condition/@NotOnOrAfter");
-        Audience audience = (Audience) assertion.getConditions().getAudienceRestrictions().get(0).getAudiences().get(0);
+        Audience audience = assertion.getConditions().getAudienceRestrictions().get(0).getAudiences().get(0);
         Assert.assertEquals(audience.getAudienceURI(), "https://sp.example.org", "Assertion/Conditions/AudienceRestriction/Audience contents");
         
-        AuthnStatement authnStatement = (AuthnStatement) assertion.getAuthnStatements().get(0);
+        AuthnStatement authnStatement = assertion.getAuthnStatements().get(0);
         Assert.assertEquals(authnStatement.getAuthnInstant(), Instant.parse("2006-01-26T13:35:05.000Z"), "Assertion/AuthnStatement/@AuthnInstant");
         Assert.assertEquals(authnStatement.getAuthnContext().getAuthnContextClassRef().getAuthnContextClassRef(), "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", "Assertion/AuthnStatement/AuthnContext/AuthnContextClassRef contents");
         
-        AttributeStatement  attribStatement = (AttributeStatement) assertion.getAttributeStatements().get(0);
+        AttributeStatement  attribStatement = assertion.getAttributeStatements().get(0);
         Attribute attrib = null;
         XSString value = null;
         
@@ -159,17 +159,17 @@ public class ResponseSuccessAuthnAttribTest extends BaseComplexSAMLObjectTestCas
         classRef.setAuthnContextClassRef("urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport");
         
         AttributeStatement attribStatement = (AttributeStatement) buildXMLObject(AttributeStatement.DEFAULT_ELEMENT_NAME);
-        XMLObjectBuilder stringBuilder = builderFactory.getBuilder(XSString.TYPE_NAME);
+        XMLObjectBuilder<XSString> stringBuilder = builderFactory.getBuilderOrThrow(XSString.TYPE_NAME);
         
         Attribute fooAttrib = (Attribute) buildXMLObject(Attribute.DEFAULT_ELEMENT_NAME);
         fooAttrib.setFriendlyName("fooAttrib");
         fooAttrib.setName("urn:foo:attrib");
         fooAttrib.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri");
         XSString fooAttribValue = null;
-        fooAttribValue = (XSString) stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
+        fooAttribValue = stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
         fooAttribValue.setValue("SomeValue");
         fooAttrib.getAttributeValues().add(fooAttribValue);
-        fooAttribValue = (XSString) stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
+        fooAttribValue = stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
         fooAttribValue.setValue("SomeOtherValue");
         fooAttrib.getAttributeValues().add(fooAttribValue);
         
@@ -177,7 +177,7 @@ public class ResponseSuccessAuthnAttribTest extends BaseComplexSAMLObjectTestCas
         ldapAttrib.setFriendlyName("eduPersonPrincipalName");
         ldapAttrib.setName("urn:oid:1.3.6.1.4.1.5923.1.1.1.6");
         ldapAttrib.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri");
-        XSString ldapAttribValue = (XSString) stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
+        XSString ldapAttribValue = stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
         ldapAttribValue.setValue("j.doe at idp.example.org");
         ldapAttrib.getAttributeValues().add(ldapAttribValue);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/KeyInfoConfirmationDataTypeTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/KeyInfoConfirmationDataTypeTest.java
index 862da0b..9046d40 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/KeyInfoConfirmationDataTypeTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/KeyInfoConfirmationDataTypeTest.java
@@ -156,13 +156,14 @@ public class KeyInfoConfirmationDataTypeTest extends XMLObjectProviderBaseTestCa
     }
     
     public KeyInfoConfirmationDataType buildXMLObject() {
-        SAMLObjectBuilder builder = 
-            (SAMLObjectBuilder) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(KeyInfoConfirmationDataType.TYPE_NAME);
+        SAMLObjectBuilder<KeyInfoConfirmationDataType> builder = (SAMLObjectBuilder<KeyInfoConfirmationDataType>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<KeyInfoConfirmationDataType>getBuilderOrThrow(
+                        KeyInfoConfirmationDataType.TYPE_NAME);
         
         if(builder == null){
             Assert.fail("Unable to retrieve builder for object QName " + KeyInfoConfirmationDataType.TYPE_NAME);
         }
-        return (KeyInfoConfirmationDataType) builder.buildObject();
+        return builder.buildObject();
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
index bc6f59d..113449a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertionsTest.java
@@ -96,11 +96,13 @@ public class AddOneTimeUseConditionToAssertionsTest  extends OpenSAMLInitBaseTes
     @Test
     public void testSingleAssertionWithExistingCondition() {
         final SAMLObjectBuilder<OneTimeUse> conditionBuilder = (SAMLObjectBuilder<OneTimeUse>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(OneTimeUse.DEFAULT_ELEMENT_NAME);
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<OneTimeUse>getBuilderOrThrow(
+                        OneTimeUse.DEFAULT_ELEMENT_NAME);
         final OneTimeUse condition = conditionBuilder.buildObject();
 
         final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(Conditions.DEFAULT_ELEMENT_NAME);
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
+                        Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
         conditions.getConditions().add(condition);
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
index 6078d24..2b75bda 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertionsTest.java
@@ -102,8 +102,8 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
      * response.
      */
     @Test public void testSingleAssertionWithExistingCondition() throws Exception {
-        final SAMLObjectBuilder<Conditions> conditionsBuilder =
-                (SAMLObjectBuilder<Conditions>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final SAMLObjectBuilder<Conditions> conditionsBuilder = (SAMLObjectBuilder<Conditions>)
+                XMLObjectProviderRegistrySupport.getBuilderFactory().<Conditions>getBuilderOrThrow(
                         Conditions.DEFAULT_ELEMENT_NAME);
         final Conditions conditions = conditionsBuilder.buildObject();
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
index 7a7da21..fc4707f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
@@ -293,10 +293,10 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
     //
 
     private MessageContext buildMessageContext() {
-        final MessageContext messageContext = new MessageContext();
-        messageContext.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
+        final MessageContext mc = new MessageContext();
+        mc.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
         XMLObject payload = buildXMLObject(simpleXMLObjectQName);
-        messageContext.setMessage(payload);
+        mc.setMessage(payload);
         if (assertion == null) {
             throw new RuntimeException("Assertion wasn't built");
         }
@@ -310,9 +310,9 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
         security.getUnknownXMLObjects().add(assertion);
         envelope.getHeader().getUnknownXMLObjects().add(security);
         
-        messageContext.getSubcontext(SOAP11Context.class, true).setEnvelope(envelope);
+        mc.getSubcontext(SOAP11Context.class, true).setEnvelope(envelope);
         
-        return messageContext;
+        return mc;
     }
 
     private MockHttpServletRequest buildHttpServletRequest() throws URISyntaxException, CertificateException {
@@ -326,14 +326,14 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
     }
 
     private Assertion buildAssertion() throws SecurityException, MarshallingException, SignatureException {
-        Assertion assertion = SAML2ActionTestingSupport.buildAssertion();
-        assertion.setIssuer(SAML2ActionTestingSupport.buildIssuer(issuerEntityID));
-        assertion.setSubject(SAML2ActionTestingSupport.buildSubject("barney"));
+        Assertion a = SAML2ActionTestingSupport.buildAssertion();
+        a.setIssuer(SAML2ActionTestingSupport.buildIssuer(issuerEntityID));
+        a.setSubject(SAML2ActionTestingSupport.buildSubject("barney"));
         subjectConfirmation = buildXMLObject(SubjectConfirmation.DEFAULT_ELEMENT_NAME);
         subjectConfirmation.setMethod(SubjectConfirmation.METHOD_BEARER);
-        assertion.getSubject().getSubjectConfirmations().add(subjectConfirmation);
-        assertion.getAuthnStatements().add(SAML2ActionTestingSupport.buildAuthnStatement());
-        return assertion;
+        a.getSubject().getSubjectConfirmations().add(subjectConfirmation);
+        a.getAuthnStatements().add(SAML2ActionTestingSupport.buildAuthnStatement());
+        return a;
     }
     
     
@@ -354,12 +354,11 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
             
             if (isThrowException) {
                 throw new AssertionValidationException();
-            } else {
-                if (confirmedSubjectConfirmation != null) {
-                    context.getDynamicParameters().put(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION, confirmedSubjectConfirmation);
-                }
-                return validationResult;
             }
+            if (confirmedSubjectConfirmation != null) {
+                context.getDynamicParameters().put(SAML2AssertionValidationParameters.CONFIRMED_SUBJECT_CONFIRMATION, confirmedSubjectConfirmation);
+            }
+            return validationResult;
         }
     }
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategyTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategyTest.java
index 2d30d00..72e7dbc 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategyTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/InlineSelfEncryptionParametersStrategyTest.java
@@ -126,7 +126,7 @@ public class InlineSelfEncryptionParametersStrategyTest extends OpenSAMLInitBase
     public void testConfigLookup() {
         resolverCreds.add(cred1);
         
-        Function<ProfileRequestContext, List<EncryptionConfiguration>> configStrategy = new Function<ProfileRequestContext, List<EncryptionConfiguration>>() {
+        Function<ProfileRequestContext, List<EncryptionConfiguration>> configStrategy = new Function<>() {
             public List<EncryptionConfiguration> apply(@Nullable ProfileRequestContext input) {
                 BasicEncryptionConfiguration selfConfig = new BasicEncryptionConfiguration();
                 RSAOAEPParameters rsaParams = new RSAOAEPParameters();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolverTest.java
index b834c9c..c9ea228 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolverTest.java
@@ -749,8 +749,8 @@ public class SAMLMetadataEncryptionParametersResolverTest extends XMLObjectBaseT
     public class MapBasedKeyTransportAlgorithmPredicate implements KeyTransportAlgorithmPredicate {
         private Map<String,String> algoMap;
         
-        public MapBasedKeyTransportAlgorithmPredicate(Map<String,String> algoMap) {
-            this.algoMap = algoMap;
+        public MapBasedKeyTransportAlgorithmPredicate(Map<String,String> map) {
+            algoMap = map;
         }
         
         public boolean test(@Nullable SelectionInput input) {
diff --git a/opensaml-security-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-security-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-security-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-security-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/credential/CredentialSupport.java b/opensaml-security-api/src/main/java/org/opensaml/security/credential/CredentialSupport.java
index 7409aa5..eed56e7 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/credential/CredentialSupport.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/credential/CredentialSupport.java
@@ -49,9 +49,8 @@ public final class CredentialSupport {
         }
         if (credential.getPublicKey() != null) {
             return credential.getPublicKey();
-        } else {
-            return credential.getSecretKey();
         }
+        return credential.getSecretKey();
     }
 
     /**
@@ -66,9 +65,8 @@ public final class CredentialSupport {
         }
         if (credential.getPrivateKey() != null) {
             return credential.getPrivateKey();
-        } else {
-            return credential.getSecretKey();
         }
+        return credential.getSecretKey();
     }
 
     /**
@@ -83,9 +81,8 @@ public final class CredentialSupport {
         }
         if (credential.getPrivateKey() != null) {
             return credential.getPrivateKey();
-        } else {
-            return credential.getSecretKey();
         }
+        return credential.getSecretKey();
     }
 
     /**
@@ -100,9 +97,8 @@ public final class CredentialSupport {
         }
         if (credential.getPublicKey() != null) {
             return credential.getPublicKey();
-        } else {
-            return credential.getSecretKey();
         }
+        return credential.getSecretKey();
     }
 
     /**
@@ -126,9 +122,8 @@ public final class CredentialSupport {
             @Nullable final PrivateKey privateKey) {
         if (privateKey != null) {
             return new BasicCredential(publicKey, privateKey);
-        } else {
-            return new BasicCredential(publicKey);
         }
+        return new BasicCredential(publicKey);
     }
 
     /**
@@ -142,9 +137,8 @@ public final class CredentialSupport {
             @Nullable final PrivateKey privateKey) {
         if (privateKey != null) {
             return new BasicX509Credential(cert, privateKey);
-        } else {
-            return new BasicX509Credential(cert);
         }
+        return new BasicX509Credential(cert);
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java b/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java
index 19f3b76..f275990 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java
@@ -245,9 +245,8 @@ public final class KeySupport {
 
         if (password != null && password.length > 0) {
             return KeyPairUtil.decodePrivateKey(key, password);
-        } else {
-            return KeyPairUtil.decodePrivateKey(key);
-        } 
+        }
+        return KeyPairUtil.decodePrivateKey(key); 
     }
     
     /**
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/x509/BasicX509Credential.java b/opensaml-security-api/src/main/java/org/opensaml/security/x509/BasicX509Credential.java
index 510c702..bb1829d 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/x509/BasicX509Credential.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/x509/BasicX509Credential.java
@@ -135,9 +135,8 @@ public class BasicX509Credential extends BasicCredential implements X509Credenti
             final LazySet<X509Certificate> constructedChain = new LazySet<>();
             constructedChain.add(entityCert);
             return constructedChain;
-        } else {
-            return entityCertChain;
         }
+        return entityCertChain;
     }
 
     /**
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/x509/X509Support.java b/opensaml-security-api/src/main/java/org/opensaml/security/x509/X509Support.java
index 2305c59..c66daeb 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/x509/X509Support.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/x509/X509Support.java
@@ -186,7 +186,7 @@ public class X509Support {
      * 
      * @return the alt names, of the given type, within the cert
      */
-    @Nullable public static List getAltNames(@Nullable final X509Certificate certificate,
+    @Nullable public static List<?> getAltNames(@Nullable final X509Certificate certificate,
             @Nullable final Integer[] nameTypes) {
         if (certificate == null || nameTypes == null || nameTypes.length == 0) {
             return null;
@@ -221,16 +221,16 @@ public class X509Support {
      * 
      * @return list of subject names in the certificate
      */
-    @Nullable public static List getSubjectNames(@Nullable final X509Certificate certificate,
+    @Nullable public static List<?> getSubjectNames(@Nullable final X509Certificate certificate,
             @Nullable final Integer[] altNameTypes) {
-        final List issuerNames = new LinkedList();
+        final List<Object> issuerNames = new LinkedList<>();
         
         if (certificate != null) {
             final List<String> entityCertCNs = X509Support.getCommonNames(certificate.getSubjectX500Principal());
             if (entityCertCNs != null && !entityCertCNs.isEmpty()) {
                 issuerNames.add(entityCertCNs.get(0));
             }
-            final List<String> entityAltNames = X509Support.getAltNames(certificate, altNameTypes);
+            final List<?> entityAltNames = X509Support.getAltNames(certificate, altNameTypes);
             if (entityAltNames != null) {
                 issuerNames.addAll(entityAltNames);
             }
diff --git a/opensaml-security-api/src/test/java/org/opensaml/security/crypto/SigningUtilTest.java b/opensaml-security-api/src/test/java/org/opensaml/security/crypto/SigningUtilTest.java
index ea080d5..fcb6add 100644
--- a/opensaml-security-api/src/test/java/org/opensaml/security/crypto/SigningUtilTest.java
+++ b/opensaml-security-api/src/test/java/org/opensaml/security/crypto/SigningUtilTest.java
@@ -129,18 +129,18 @@ public class SigningUtilTest {
         
     }
     
-    private byte[] getControlSignature(byte[] data, SecretKey secretKey, String algorithm) 
+    private byte[] getControlSignature(byte[] data1, SecretKey secretKey, String algorithm) 
             throws NoSuchAlgorithmException, InvalidKeyException {
         Mac mac = Mac.getInstance(algorithm);
         mac.init(secretKeyAES128);
-        return mac.doFinal(data);
+        return mac.doFinal(data1);
     }
 
-    private byte[] getControlSignature(byte[] data, PrivateKey privateKey, String algorithm) 
+    private byte[] getControlSignature(byte[] data1, PrivateKey privateKey, String algorithm) 
             throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
         Signature sig = Signature.getInstance(algorithm);
         sig.initSign(privateKey);
-        sig.update(data);
+        sig.update(data1);
         return sig.sign();
     }
 }
diff --git a/opensaml-security-api/src/test/java/org/opensaml/security/x509/X509SupportTest.java b/opensaml-security-api/src/test/java/org/opensaml/security/x509/X509SupportTest.java
index 17c08ae..25c02dd 100644
--- a/opensaml-security-api/src/test/java/org/opensaml/security/x509/X509SupportTest.java
+++ b/opensaml-security-api/src/test/java/org/opensaml/security/x509/X509SupportTest.java
@@ -396,7 +396,7 @@ public class X509SupportTest {
         Set<Integer> nameTypes = new HashSet<>();
         nameTypes.add(altNameTypeDNS);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameDNS), "Failed to find expected KeyName value");
@@ -419,7 +419,7 @@ public class X509SupportTest {
         Set<Integer> nameTypes = new HashSet<>();
         nameTypes.add(altNameTypeURI);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameURN), "Failed to find expected KeyName value");
@@ -442,7 +442,7 @@ public class X509SupportTest {
         Set<Integer> nameTypes = new HashSet<>();
         nameTypes.add(altNameTypeURI);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameURL), "Failed to find expected KeyName value");
@@ -465,7 +465,7 @@ public class X509SupportTest {
         Set<Integer> nameTypes = new HashSet<>();
         nameTypes.add(altNameTypeIP);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameIP), "Failed to find expected KeyName value");
@@ -490,7 +490,7 @@ public class X509SupportTest {
         nameTypes.add(altNameTypeURI);
         nameTypes.add(altNameTypeIP);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameDNS), "Failed to find expected KeyName value");
@@ -517,7 +517,7 @@ public class X509SupportTest {
         nameTypes.add(altNameTypeURI);
         nameTypes.add(altNameTypeIP);
 
-        List altNames = getAltNames(cert, nameTypes);
+        List<?> altNames = getAltNames(cert, nameTypes);
         Assert.assertNotNull(altNames, "X509Support.getAltNames() returned null");
 
         Assert.assertTrue(altNames.contains(altNameDNS), "Failed to find expected KeyName value");
@@ -613,7 +613,7 @@ public class X509SupportTest {
      * @param nameTypes set of Integers identifying which alt name types to extract
      * @return list of alt name value Objects
      */
-    private List getAltNames(X509Certificate cert, Set<Integer> nameTypes) {
+    private List<?> getAltNames(X509Certificate cert, Set<Integer> nameTypes) {
         Integer[] array = new Integer[nameTypes.size()];
         nameTypes.toArray(array);
         return X509Support.getAltNames(cert, array);
diff --git a/opensaml-security-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-security-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-security-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-security-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriteriaRegistry.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriteriaRegistry.java
index 064591d..f6af0fd 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriteriaRegistry.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriteriaRegistry.java
@@ -92,11 +92,9 @@ public final class EvaluableCredentialCriteriaRegistry {
                 log.error("Error instantiating new EvaluableCredentialCriterion instance", e);
                 throw new SecurityException("Could not create new EvaluableCredentialCriterion", e);
             }
-        } else {
-            log.debug("Registry could not locate evaluable criteria for criteria class {}", criteria.getClass()
-                    .getName());
-            return null;
         }
+        log.debug("Registry could not locate evaluable criteria for criteria class {}", criteria.getClass().getName());
+        return null;
     }
 
     /**
@@ -220,17 +218,17 @@ public final class EvaluableCredentialCriteriaRegistry {
             final String evaluatorName = mappings.getProperty(criteriaName);
 
             final ClassLoader classLoader = XMLObjectProviderRegistrySupport.class.getClassLoader();
-            Class criteriaClass = null;
+            Class<? extends Criterion> criteriaClass = null;
             try {
-                criteriaClass = classLoader.loadClass(criteriaName);
+                criteriaClass = (Class<? extends Criterion>) classLoader.loadClass(criteriaName);
             } catch (final ClassNotFoundException e) {
                 log.error("Could not find criteria class '{}', skipping registration", criteriaName);
                 continue;
             }
 
-            Class evaluableClass = null;
+            Class<? extends EvaluableCredentialCriterion> evaluableClass = null;
             try {
-                evaluableClass = classLoader.loadClass(evaluatorName);
+                evaluableClass = (Class<? extends EvaluableCredentialCriterion>) classLoader.loadClass(evaluatorName);
             } catch (final ClassNotFoundException e) {
                 log.error("Could not find evaluator class '{}', skipping registration", criteriaName);
                 continue;
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
index b29377c..8e03bd3 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractChainingCredentialResolver.java
@@ -184,9 +184,8 @@ public abstract class AbstractChainingCredentialResolver<ResolverType extends Cr
             tempCred = getNextCredential();
             if (tempCred != null) {
                 return tempCred;
-            } else {
-                throw new NoSuchElementException("No more Credential elements are available");
             }
+            throw new NoSuchElementException("No more Credential elements are available");
         }
 
         /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCredentialResolver.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCredentialResolver.java
index 3f0934d..836ff70 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCredentialResolver.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCredentialResolver.java
@@ -36,9 +36,8 @@ public abstract class AbstractCredentialResolver implements CredentialResolver {
         final Iterable<Credential> creds = resolve(criteriaSet);
         if (creds.iterator().hasNext()) {
             return creds.iterator().next();
-        } else {
-            return null;
         }
+        return null;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCriteriaFilteringCredentialResolver.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCriteriaFilteringCredentialResolver.java
index ed6c150..666da13 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCriteriaFilteringCredentialResolver.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/impl/AbstractCriteriaFilteringCredentialResolver.java
@@ -63,15 +63,15 @@ public abstract class AbstractCriteriaFilteringCredentialResolver extends Abstra
         final Set<Predicate<Credential>> predicates = getPredicates(criteriaSet);
         if (predicates.isEmpty()) {
             return storeCandidates;
+        }
+        
+        Predicate<Credential> aggregatePredicate = null;
+        if (isSatisfyAllPredicates()) {
+            aggregatePredicate = PredicateSupport.and(predicates);
         } else {
-            Predicate<Credential> aggregatePredicate = null;
-            if (isSatisfyAllPredicates()) {
-                aggregatePredicate = PredicateSupport.and(predicates);
-            } else {
-                aggregatePredicate = PredicateSupport.or(predicates);
-            }
-            return Iterables.filter(storeCandidates, aggregatePredicate::test);
+            aggregatePredicate = PredicateSupport.or(predicates);
         }
+        return Iterables.filter(storeCandidates, aggregatePredicate::test);
     }
     
     /**
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseClientCertAuthSecurityHandler.java b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseClientCertAuthSecurityHandler.java
index ef5d3ef..bd200ce 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseClientCertAuthSecurityHandler.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseClientCertAuthSecurityHandler.java
@@ -146,9 +146,8 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
                 messageContext.getSubcontext(ClientTLSSecurityParametersContext.class);
         if (secContext == null || secContext.getValidationParameters() == null)  {
             return null;
-        } else {
-            return secContext.getValidationParameters().getX509TrustEngine();
         }
+        return secContext.getValidationParameters().getX509TrustEngine();
     }
 
     /** {@inheritDoc} */
@@ -169,9 +168,8 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
         if (secContext == null || secContext.getValidationParameters() == null 
                 || secContext.getValidationParameters().getCertificateNameOptions() == null)  {
             throw new MessageHandlerException("CertificateNameOptions was not available from the MessageContext");
-        } else {
-            certNameOptions = secContext.getValidationParameters().getCertificateNameOptions();
         }
+        certNameOptions = secContext.getValidationParameters().getCertificateNameOptions();
         
         return true;
     }
@@ -413,10 +411,9 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
                 log.debug("{} Authentication succeeded for presenter entity ID derived from CN: {}", getLogPrefix(),
                         candidatePresenter);
                 return candidatePresenter;
-            } else {
-                log.debug("{} Authentication failed for presenter entity ID derived from CN: {}", getLogPrefix(),
-                        candidatePresenter);
             }
+            log.debug("{} Authentication failed for presenter entity ID derived from CN: {}", getLogPrefix(),
+                    candidatePresenter);
         }
         return null;
     }
@@ -440,10 +437,9 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
                 log.debug("{} Authentication succeeded for presenter entity ID derived from subject DN: {}",
                         getLogPrefix(), candidatePresenter);
                 return candidatePresenter;
-            } else {
-                log.debug("{} Authentication failed for presenter entity ID derived from subject DN: {}",
-                        getLogPrefix(), candidatePresenter); 
             }
+            log.debug("{} Authentication failed for presenter entity ID derived from subject DN: {}",
+                    getLogPrefix(), candidatePresenter);
         }
         return null;
     }
@@ -470,10 +466,9 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
                     log.debug("{} Authentication succeeded for presenter entity ID derived from subject alt name: {}",
                             getLogPrefix(), altName);
                     return altName;
-                } else {
-                    log.debug("{} Authentication failed for presenter entity ID derived from subject alt name: {}",
-                            getLogPrefix(), altName);
                 }
+                log.debug("{} Authentication failed for presenter entity ID derived from subject alt name: {}",
+                        getLogPrefix(), altName);
             }
         }
         return null;
@@ -529,7 +524,7 @@ public abstract class BaseClientCertAuthSecurityHandler extends BaseTrustEngineS
             @Nonnull final Integer altNameType) {
         log.debug("{} Extracting alt names from certificate of type: {}", getLogPrefix(), altNameType.toString());
         final Integer[] nameTypes = new Integer[] {altNameType};
-        final List altNames = X509Support.getAltNames(cert, nameTypes);
+        final List<?> altNames = X509Support.getAltNames(cert, nameTypes);
         final List<String> names = new ArrayList<>();
         for (final Object altNameValue : altNames) {
             if (!(altNameValue instanceof String)) {
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseTrustEngineSecurityHandler.java b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseTrustEngineSecurityHandler.java
index 0fad2e9..9da44f3 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseTrustEngineSecurityHandler.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/BaseTrustEngineSecurityHandler.java
@@ -63,9 +63,8 @@ public abstract class BaseTrustEngineSecurityHandler<TokenType> extends Abstract
         final TrustEngine<? super TokenType> engine = resolveTrustEngine(messageContext);
         if (engine == null) {
             throw new MessageHandlerException("TrustEngine could not be resolved from MessageContext");
-        } else {
-            trustEngine = engine;
         }
+        trustEngine = engine;
         
         return true;
     }
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandler.java b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandler.java
index d9dc63e..d70cd3e 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandler.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandler.java
@@ -150,7 +150,7 @@ public class PopulateHttpClientSecurityParametersHandler extends AbstractMessage
         if (resolver == null) {
             throw new ComponentInitializationException("HttpClientSecurityParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<MessageContext,List<HttpClientSecurityConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<HttpClientSecurityConfiguration> apply(final MessageContext input) {
                     // TODO should we have a library global default somewhere? Probably not.  Only TLS TrustEngine
                     // is semi-required (depending on usage), and that can't be defaulted anyway.
@@ -170,10 +170,9 @@ public class PopulateHttpClientSecurityParametersHandler extends AbstractMessage
         if (super.doPreInvoke(messageContext)) {
             log.debug("{} HttpClientSecurityParameters resolution and population enabled", getLogPrefix());
             return true;
-        } else {
-            log.debug("{} HttpClientSecurityParameters resolution and population not enabled", getLogPrefix());
-            return false;
         }
+        log.debug("{} HttpClientSecurityParameters resolution and population not enabled", getLogPrefix());
+        return false;
     }
     
 // Checkstyle: CyclomaticComplexity|ReturnCount OFF
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
index c54675f..fb81d6f 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/BasicX509CredentialNameEvaluator.java
@@ -328,9 +328,8 @@ public class BasicX509CredentialNameEvaluator implements X509CredentialNameEvalu
         if (!Strings.isNullOrEmpty(commonName) && trustedNames.contains(commonName)) {
             log.debug("Matched subject DN common name to trusted names: {}", commonName);
             return true;
-        } else {
-            return false;
         }
+        return false;
     }
 
     /**
@@ -386,7 +385,7 @@ public class BasicX509CredentialNameEvaluator implements X509CredentialNameEvalu
         log.debug("Processing subject alt names");
         final Integer[] nameTypes = new Integer[getSubjectAltNameTypes().size()];
         getSubjectAltNameTypes().toArray(nameTypes);
-        final List altNames = X509Support.getAltNames(certificate, nameTypes);
+        final List<?> altNames = X509Support.getAltNames(certificate, nameTypes);
 
         if (altNames != null) {
             log.debug("Extracted subject alt names from certificate: {}", altNames);
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluator.java b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluator.java
index d242237..b2ed88d 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluator.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluator.java
@@ -331,7 +331,7 @@ public class CertPathPKIXTrustEvaluator implements PKIXTrustEvaluator {
         log.trace("Creating cert store to use during path validation");
 
         log.trace("Adding entity certificate chain to cert store");
-        final List<Object> storeMaterial = new ArrayList<Object>(untrustedCredential.getEntityCertificateChain());
+        final List<Object> storeMaterial = new ArrayList<>(untrustedCredential.getEntityCertificateChain());
         if (log.isTraceEnabled()) {
             for (final X509Certificate cert : untrustedCredential.getEntityCertificateChain()) {
                 log.trace(String.format("Added X509Certificate from entity cert chain to cert store "
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/tls/impl/BasicClientTLSValidationParametersResolver.java b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/tls/impl/BasicClientTLSValidationParametersResolver.java
index d001a54..9290f69 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/x509/tls/impl/BasicClientTLSValidationParametersResolver.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/x509/tls/impl/BasicClientTLSValidationParametersResolver.java
@@ -53,9 +53,8 @@ public class BasicClientTLSValidationParametersResolver implements ClientTLSVali
         final ClientTLSValidationParameters params = resolveSingle(criteria);
         if (params != null) {
             return Collections.singletonList(params);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
index 1b5a975..d7efe7e 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/trust/impl/ChainingTrustEngineTest.java
@@ -123,12 +123,12 @@ public class ChainingTrustEngineTest {
         
         private Boolean trusted;
         
-        private FooEngine(Boolean trusted) {
-            this.trusted = trusted;
+        private FooEngine(Boolean flag) {
+            trusted = flag;
         }
 
         /** {@inheritDoc} */
-        public boolean validate(FooToken token, CriteriaSet trustBasisCriteria) throws SecurityException {
+        public boolean validate(FooToken token1, CriteriaSet trustBasisCriteria) throws SecurityException {
             if (trusted == null) {
                 throw new SecurityException("This means an error happened");
             }
@@ -142,12 +142,12 @@ public class ChainingTrustEngineTest {
         
         private Boolean trusted;
         
-        private SuperEngine(Boolean trusted) {
-            this.trusted = trusted;
+        private SuperEngine(Boolean flag) {
+            trusted = flag;
         }
 
         /** {@inheritDoc} */
-        public boolean validate(SuperToken token, CriteriaSet trustBasisCriteria) throws SecurityException {
+        public boolean validate(SuperToken token1, CriteriaSet trustBasisCriteria) throws SecurityException {
             if (trusted == null) {
                 throw new SecurityException("This means an error happened");
             }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluatorTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluatorTest.java
index 735d0e4..fe81569 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluatorTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/CertPathPKIXTrustEvaluatorTest.java
@@ -59,8 +59,8 @@ public class CertPathPKIXTrustEvaluatorTest extends XMLObjectBaseTestCase {
     
     private CertPathPKIXValidationOptions opts;
        
-    private static Set testPolicy1 = Collections.singleton("1.3.6.1.4.1.32473.2011.6.20");
-    private static Set testPolicy2 = Collections.singleton("1.3.6.1.4.1.32473.2011.6.21");
+    private static Set<String> testPolicy1 = Collections.singleton("1.3.6.1.4.1.32473.2011.6.20");
+    private static Set<String> testPolicy2 = Collections.singleton("1.3.6.1.4.1.32473.2011.6.21");
     
     @BeforeMethod
     protected void setUp() throws Exception {
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/PKIXX509CredentialTrustEngineTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/PKIXX509CredentialTrustEngineTest.java
index 2b1ad66..2d2af4f 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/PKIXX509CredentialTrustEngineTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/x509/impl/PKIXX509CredentialTrustEngineTest.java
@@ -198,7 +198,7 @@ public class PKIXX509CredentialTrustEngineTest extends XMLObjectBaseTestCase {
     private BasicX509Credential getCredential(String entityCertFileName, String ... chainMembers) {
         X509Certificate entityCert = getCertificate(entityCertFileName);
         
-        BasicX509Credential cred = new BasicX509Credential(entityCert);
+        BasicX509Credential cred1 = new BasicX509Credential(entityCert);
         
         HashSet<X509Certificate> certChain = new HashSet<>();
         certChain.add(entityCert);
@@ -207,9 +207,9 @@ public class PKIXX509CredentialTrustEngineTest extends XMLObjectBaseTestCase {
             certChain.add( getCertificate(member) );
         }
         
-        cred.setEntityCertificateChain(certChain);
+        cred1.setEntityCertificateChain(certChain);
         
-        return cred;
+        return cred1;
     }
     
     private PKIXX509CredentialTrustEngine getEngine(Collection<X509Certificate> certs,
diff --git a/opensaml-soap-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-soap-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-soap-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-soap-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
index 22cc3c0..5161002 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
@@ -70,12 +70,9 @@ import org.slf4j.LoggerFactory;
 
 /**
  * SOAP client that is based on {@link HttpClientMessagePipeline}.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
 @ThreadSafe
-public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, InboundMessageType> 
+public abstract class AbstractPipelineHttpSOAPClient 
         extends AbstractInitializableComponent implements SOAPClient {
 
     /** Class logger. */
@@ -398,9 +395,8 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
                 operationContext.getOutboundMessageContext().getSubcontext(HttpClientSecurityContext.class);
         if (securityContext != null) {
             return securityContext.getSecurityParameters();
-        } else {
-            return null;
         }
+        return null;
     }
 
     /**
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
index 8554226..c426c87 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/HttpSOAPClient.java
@@ -350,9 +350,8 @@ public class HttpSOAPClient extends AbstractInitializableComponent implements SO
                         + " Fault Message: " + msg);
                 faultException.setFault(fault);
                 throw faultException;
-            } else {
-                throw new SOAPClientException("HTTP status code was 500 but SOAP response did not contain a Body");
             }
+            throw new SOAPClientException("HTTP status code was 500 but SOAP response did not contain a Body");
         } catch (final IOException e) {
             throw new SOAPClientException("Unable to read response", e);
         }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
index b7bf4c5..31ae01e 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
@@ -126,9 +126,8 @@ public class PipelineFactoryHttpSOAPClient extends AbstractPipelineHttpSOAPClien
             log.debug("Resolved pipeline name: {}", resolvedPipelineName);
             if (resolvedPipelineName != null) {
                 return newPipeline(resolvedPipelineName);
-            } else {
-                return newPipeline();
             }
+            return newPipeline();
         } catch (final SOAPException e) {
             log.warn("Problem resolving pipeline instance with name: {}", resolvedPipelineName, e);
             throw e;
@@ -184,9 +183,8 @@ public class PipelineFactoryHttpSOAPClient extends AbstractPipelineHttpSOAPClien
     @Nullable protected String resolvePipelineName(@Nonnull final InOutOperationContext operationContext) {
         if (pipelineNameStrategy != null) {
             return pipelineNameStrategy.apply(operationContext);
-        } else {
-            return null;
         }
+        return null;
     }
     
     
@@ -204,11 +202,10 @@ public class PipelineFactoryHttpSOAPClient extends AbstractPipelineHttpSOAPClien
             final SOAPClientContext context = opContext.getSubcontext(SOAPClientContext.class);
             if (context != null) {
                 return context.getPipelineName();
-            } else {
-                return null;
             }
+            return null;
         }
         
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientDestinationURILookup.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientDestinationURILookup.java
index c40bb81..34f19f9 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientDestinationURILookup.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientDestinationURILookup.java
@@ -46,9 +46,8 @@ public class SOAPClientDestinationURILookup implements Function<MessageContext,
         
         if (opContext.getSubcontext(SOAPClientContext.class) == null) {
             return null;
-        } else {
-            return opContext.getSubcontext(SOAPClientContext.class).getDestinationURI();
         }
+        return opContext.getSubcontext(SOAPClientContext.class).getDestinationURI();
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
index 131e807..f4883d5 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingFunction.java
@@ -87,7 +87,7 @@ public class SOAPClientPipelineNameMappingFunction<T> implements Function<Messag
             soapClientContextLookup = lookupStrategy;
         } else {
             soapClientContextLookup =
-                    new ChildContextLookup(SOAPClientContext.class).compose( 
+                    new ChildContextLookup<>(SOAPClientContext.class).compose( 
                             new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         }
     }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
index 768cfde..63a43fa 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/messaging/SOAPClientPipelineNameMappingPredicate.java
@@ -86,7 +86,7 @@ public class SOAPClientPipelineNameMappingPredicate implements Predicate<Message
             soapClientContextLookup = lookupStrategy;
         } else {
             soapClientContextLookup =
-                    new ChildContextLookup(SOAPClientContext.class).compose( 
+                    new ChildContextLookup<>(SOAPClientContext.class).compose( 
                             new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         }
     }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/security/SOAPClientSecurityProfileIdLookupFunction.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/security/SOAPClientSecurityProfileIdLookupFunction.java
index 80ec804..766a8e2 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/security/SOAPClientSecurityProfileIdLookupFunction.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/security/SOAPClientSecurityProfileIdLookupFunction.java
@@ -44,7 +44,7 @@ public class SOAPClientSecurityProfileIdLookupFunction implements ContextDataLoo
     public SOAPClientSecurityProfileIdLookupFunction() {
         soapContextLookup =
                 new ChildContextLookup<>(SOAPClientSecurityContext.class).compose(
-                        new RecursiveTypedParentContextLookup(InOutOperationContext.class));
+                        new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
     }
     
     /**
@@ -66,9 +66,8 @@ public class SOAPClientSecurityProfileIdLookupFunction implements ContextDataLoo
         final SOAPClientSecurityContext context = soapContextLookup.apply(messageContext);
         if (context != null) {
             return context.getSecurityConfigurationProfileId();
-        } else {
-            return null;
         }
+        return null;
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
index 9cc4169..2452ed7 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
@@ -448,9 +448,8 @@ public final class SOAPMessagingSupport {
         final SOAP11Context soap11Context = getSOAP11Context(messageContext, false);
         if (soap11Context != null) {
             return soap11Context.getFault();
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/wssecurity/messaging/WSSecurityContext.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/wssecurity/messaging/WSSecurityContext.java
index bbc5d4b..6a469c1 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/wssecurity/messaging/WSSecurityContext.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/wssecurity/messaging/WSSecurityContext.java
@@ -35,7 +35,7 @@ public final class WSSecurityContext extends BaseContext {
     //TODO implement support for remaining items of WS-Security data model
     
     /** List of known WS-Security tokens. */
-    private LazyList<Token> tokens;
+    private LazyList<Token<?>> tokens;
     
     /** Value for Timestamp Created. */
     private Instant timestampCreated;
@@ -54,7 +54,7 @@ public final class WSSecurityContext extends BaseContext {
      * 
      * @return the list of tokens
      */
-    @Nonnull public List<Token> getTokens() {
+    @Nonnull public List<Token<?>> getTokens() {
         return tokens;
     }
 
diff --git a/opensaml-soap-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-soap-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-soap-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-soap-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/WSBaseTestCase.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/WSBaseTestCase.java
index a8f3a4f..433cdb1 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/WSBaseTestCase.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/WSBaseTestCase.java
@@ -37,7 +37,6 @@ import org.w3c.dom.Element;
  */
 public abstract class WSBaseTestCase extends XMLObjectBaseTestCase {
 
-    @SuppressWarnings("unchecked")
     protected <T extends XMLObject> T marshallAndUnmarshall(T object)
             throws Exception {
         QName name= object.getElementQName();
diff --git a/opensaml-storage-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-storage-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-storage-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-storage-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractMapBackedStorageService.java b/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractMapBackedStorageService.java
index 10e9a92..4f6bc89 100644
--- a/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractMapBackedStorageService.java
+++ b/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractMapBackedStorageService.java
@@ -67,7 +67,7 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
         try {
             writeLock.lock();
             
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             try {
                 contextMap = getContextMap();
             } catch (final Exception e) {
@@ -75,14 +75,14 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
             }
             
             // Create new context if necessary.
-            Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap == null) {
-                dataMap = new HashMap();
+                dataMap = new HashMap<>();
                 contextMap.put(context, dataMap);
             }
             
             // Check for a duplicate.
-            final StorageRecord record = dataMap.get(key);
+            final StorageRecord<?> record = dataMap.get(key);
             if (record != null) {
                 // Not yet expired?
                 final Long exp = record.getExpiration();
@@ -93,7 +93,7 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
                 // It's dead, so we can just remove it now and create the new record.
             }
             
-            dataMap.put(key, new MutableStorageRecord(value, expiration));
+            dataMap.put(key, new MutableStorageRecord<>(value, expiration));
             log.trace("Inserted record '{}' in context '{}' with expiration '{}'",
                     new Object[] { key, context, expiration });
             
@@ -107,14 +107,14 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
     
     /** {@inheritDoc} */
     @Override
-    @Nullable public StorageRecord read(@Nonnull @NotEmpty final String context,
+    @Nullable public <T> StorageRecord<T> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key) throws IOException {
-        return readImpl(context, key, null).getSecond();
+        return this.<T>readImpl(context, key, null).getSecond();
     }
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull public Pair<Long, StorageRecord> read(@Nonnull @NotEmpty final String context,
+    @Nonnull public <T> Pair<Long, StorageRecord<T>> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, final long version) throws IOException {
         return readImpl(context, key, version);
     }
@@ -176,18 +176,18 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
         try {
             writeLock.lock();
             
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             try {
                 contextMap = getContextMap();
             } catch (final Exception e) {
                 throw new IOException(e);
             }
 
-            final Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            final Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap != null) {    
                 setDirty();
                 final Long now = System.currentTimeMillis();
-                for (final MutableStorageRecord record : dataMap.values()) {
+                for (final MutableStorageRecord<?> record : dataMap.values()) {
                     final Long exp = record.getExpiration();
                     if (exp == null || now < exp) {
                         record.setExpiration(expiration);
@@ -230,7 +230,7 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
         try {
             writeLock.lock();
             
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             
             try {
                 contextMap = getContextMap();
@@ -238,7 +238,7 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
                 throw new IOException(e);
             }
             
-            final Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            final Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap != null) {
                 if (reapWithLock(dataMap, System.currentTimeMillis())) {
                     setDirty();
@@ -265,25 +265,28 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
      * 
      * <p>This method is guaranteed to be called under cover the lock returned by {{@link #getLock()}.</p>
      * 
-     * TODO: this method needs to be able to throw IOException to deal with unexpected scenarios without
-     * raising unchecked exceptions.
-     * 
      * @return map of contexts to manipulate
+     * 
+     * @throws IOException to signal errors
      */
-    @Nonnull @NonnullElements @Live protected abstract Map<String, Map<String, MutableStorageRecord>> getContextMap();
+    @Nonnull @NonnullElements @Live
+    protected abstract Map<String, Map<String, MutableStorageRecord<?>>> getContextMap() throws IOException;
 
     /**
      * A callback to indicate that data has been modified.
      * 
      * <p>This method is guaranteed to be called under cover the lock returned by {{@link #getLock()}.</p>
+     * 
+     * @throws IOException to signal an error
      */
-    protected void setDirty() {
+    protected void setDirty() throws IOException {
         
     }
     
     /**
      * Internal method to implement read functions.
      *
+     * @param <T>           type of object 
      * @param context       a storage context label
      * @param key           a key unique to context
      * @param version       only return record if newer than optionally supplied version
@@ -291,14 +294,14 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
      * @return  a pair consisting of the version of the record read back, if any, and the record itself
      * @throws IOException  if errors occur in the read process 
      */
-    @Nonnull protected Pair<Long, StorageRecord> readImpl(@Nonnull @NotEmpty final String context,
+    @Nonnull protected <T> Pair<Long,StorageRecord<T>> readImpl(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, @Nullable final Long version) throws IOException {
 
         final Lock readLock = getLock().readLock();
         try {
             readLock.lock();
             
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             
             try {
                 contextMap = getContextMap();
@@ -306,30 +309,30 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
                 throw new IOException(e);
             }
             
-            final Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            final Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap == null) {
                 log.debug("Read failed, context '{}' not found", context);
-                return new Pair();
+                return new Pair<>();
             }
 
-            final StorageRecord record = dataMap.get(key);
+            final StorageRecord<?> record = dataMap.get(key);
             if (record == null) {
                 log.debug("Read failed, key '{}' not found in context '{}'", key, context);
-                return new Pair();
-            } else {
-                final Long exp = record.getExpiration();
-                if (exp != null && System.currentTimeMillis() >= exp) {
-                    log.debug("Read failed, key '{}' expired in context '{}'", key, context);
-                    return new Pair();
-                }
+                return new Pair<>();
+            }
+            
+            final Long exp = record.getExpiration();
+            if (exp != null && System.currentTimeMillis() >= exp) {
+                log.debug("Read failed, key '{}' expired in context '{}'", key, context);
+                return new Pair<>();
             }
             
             if (version != null && record.getVersion() == version) {
                 // Nothing's changed, so just echo back the version.
-                return new Pair(version, null);
+                return new Pair<>(version, null);
             }
             
-            return new Pair(record.getVersion(), record);
+            return new Pair<>(record.getVersion(), (StorageRecord<T>) record);
             
         } finally {
             readLock.unlock();
@@ -358,29 +361,29 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
         try {
             writeLock.lock();
             
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             try {
                 contextMap = getContextMap();
             } catch (final Exception e) {
                 throw new IOException(e);
             }
 
-            final Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            final Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap == null) {
                 log.debug("Update failed, context '{}' not found", context);
                 return null;
             }
             
-            final MutableStorageRecord record = dataMap.get(key);
+            final MutableStorageRecord<?> record = dataMap.get(key);
             if (record == null) {
                 log.debug("Update failed, key '{}' not found in context '{}'", key, context);
                 return null;
-            } else {
-                final Long exp = record.getExpiration();
-                if (exp != null && System.currentTimeMillis() >= exp) {
-                    log.debug("Update failed, key '{}' expired in context '{}'", key, context);
-                    return null;
-                }
+            }
+            
+            final Long exp = record.getExpiration();
+            if (exp != null && System.currentTimeMillis() >= exp) {
+                log.debug("Update failed, key '{}' expired in context '{}'", key, context);
+                return null;
             }
     
             if (version != null && version != record.getVersion()) {
@@ -426,20 +429,20 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
         try {
             writeLock.lock();
 
-            final Map<String,Map<String,MutableStorageRecord>> contextMap;
+            final Map<String,Map<String,MutableStorageRecord<?>>> contextMap;
             try {
                 contextMap = getContextMap();
             } catch (final Exception e) {
                 throw new IOException(e);
             }
             
-            final Map<String, MutableStorageRecord> dataMap = contextMap.get(context);
+            final Map<String, MutableStorageRecord<?>> dataMap = contextMap.get(context);
             if (dataMap == null) {
                 log.debug("Deleting record '{}' in context '{}'....context not found", key, context);
                 return false;
             }
 
-            final MutableStorageRecord record = dataMap.get(key);
+            final MutableStorageRecord<?> record = dataMap.get(key);
             if (record == null) {
                 log.debug("Deleting record '{}' in context '{}'....key not found", key, context);
                 return false;
@@ -469,11 +472,11 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
      * 
      * @return  true iff anything was purged
      */
-    protected boolean reapWithLock(@Nonnull @NonnullElements final Map<String, MutableStorageRecord> dataMap,
+    protected boolean reapWithLock(@Nonnull @NonnullElements final Map<String, MutableStorageRecord<?>> dataMap,
             final long expiration) {
         
-        return Iterables.removeIf(dataMap.entrySet(), new Predicate<Entry<String, MutableStorageRecord>>() {
-                public boolean test(@Nullable final Entry<String, MutableStorageRecord> entry) {
+        return Iterables.removeIf(dataMap.entrySet(), new Predicate<Entry<String, MutableStorageRecord<?>>>() {
+                public boolean test(@Nullable final Entry<String, MutableStorageRecord<?>> entry) {
                     final Long exp = entry.getValue().getExpiration();
                     return exp != null && exp <= expiration;
                 }
diff --git a/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractStorageService.java b/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractStorageService.java
index 59c14ed..81985cb 100644
--- a/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractStorageService.java
+++ b/opensaml-storage-api/src/main/java/org/opensaml/storage/AbstractStorageService.java
@@ -217,8 +217,9 @@ public abstract class AbstractStorageService extends AbstractIdentifiableInitial
     }
 
     /** {@inheritDoc} */
-    @Override public boolean create(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
-            @Nonnull final Object value, @Nonnull final StorageSerializer serializer,
+    @Override
+    public <T> boolean create(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
+            @Nonnull final T value, @Nonnull final StorageSerializer<T> serializer,
             @Nullable @Positive final Long expiration) throws IOException {
         return create(context, key, serializer.serialize(value), expiration);
     }
@@ -231,7 +232,7 @@ public abstract class AbstractStorageService extends AbstractIdentifiableInitial
 
     /** {@inheritDoc} */
     @Override @Nullable public Object read(@Nonnull final Object value) throws IOException {
-        final StorageRecord record = read(AnnotationSupport.getContext(value), AnnotationSupport.getKey(value));
+        final StorageRecord<?> record = read(AnnotationSupport.getContext(value), AnnotationSupport.getKey(value));
         if (record != null) {
             AnnotationSupport.setValue(value, record.getValue());
             AnnotationSupport.setExpiration(value, record.getExpiration());
@@ -241,18 +242,20 @@ public abstract class AbstractStorageService extends AbstractIdentifiableInitial
     }
 
     /** {@inheritDoc} */
-    @Override public boolean update(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
-            @Nonnull final Object value, @Nonnull final StorageSerializer serializer,
+    @Override
+    public <T> boolean update(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
+            @Nonnull final T value, @Nonnull final StorageSerializer<T> serializer,
             @Nullable @Positive final Long expiration) throws IOException {
         return update(context, key, serializer.serialize(value), expiration);
     }
 
     /** {@inheritDoc} */
     // Checkstyle: ParameterNumber OFF
-    @Override @Nullable public Long updateWithVersion(@Positive final long version,
-            @Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key, @Nonnull final Object value,
-            @Nonnull final StorageSerializer serializer, @Nullable @Positive final Long expiration) throws IOException,
-            VersionMismatchException {
+    @Override
+    @Nullable public <T> Long updateWithVersion(@Positive final long version,
+            @Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key, @Nonnull final T value,
+            @Nonnull final StorageSerializer<T> serializer, @Nullable @Positive final Long expiration)
+                    throws IOException, VersionMismatchException {
         return updateWithVersion(version, context, key, serializer.serialize(value), expiration);
     }
 
diff --git a/opensaml-storage-api/src/main/java/org/opensaml/storage/MutableStorageRecord.java b/opensaml-storage-api/src/main/java/org/opensaml/storage/MutableStorageRecord.java
index 21930c8..1a8906b 100644
--- a/opensaml-storage-api/src/main/java/org/opensaml/storage/MutableStorageRecord.java
+++ b/opensaml-storage-api/src/main/java/org/opensaml/storage/MutableStorageRecord.java
@@ -24,8 +24,10 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 /**
  * Exposes mutation of {@link StorageRecord} properties.
+ * 
+ * @param <T> type of record
  */
-public class MutableStorageRecord extends StorageRecord {
+public class MutableStorageRecord<T> extends StorageRecord<T> {
     
     /**
      * Constructor.
diff --git a/opensaml-storage-api/src/main/java/org/opensaml/storage/ReplayCache.java b/opensaml-storage-api/src/main/java/org/opensaml/storage/ReplayCache.java
index aefbc5b..2a25311 100644
--- a/opensaml-storage-api/src/main/java/org/opensaml/storage/ReplayCache.java
+++ b/opensaml-storage-api/src/main/java/org/opensaml/storage/ReplayCache.java
@@ -141,16 +141,17 @@ public class ReplayCache extends AbstractIdentifiableInitializableComponent {
         }
 
         try {
-            final StorageRecord entry = storage.read(context, key);
+            final StorageRecord<?> entry = storage.read(context, key);
             if (entry == null) {
                 log.debug("Value '{}' was not a replay, adding to cache with expiration time {}", s, expires);
                 storage.create(context, key, "x", expires.toEpochMilli());
                 return true;
-            } else {
-                log.debug("Replay of value '{}' detected in cache, expires at {}", s,
-                        Instant.ofEpochMilli(entry.getExpiration()));
-                return false;
             }
+            
+            log.debug("Replay of value '{}' detected in cache, expires at {}", s,
+                    Instant.ofEpochMilli(entry.getExpiration()));
+            return false;
+            
         } catch (final IOException e) {
             log.error("Exception reading/writing to storage service, returning {}", strict ? "failure" : "success", e);
             return !strict;
diff --git a/opensaml-storage-api/src/main/java/org/opensaml/storage/StorageService.java b/opensaml-storage-api/src/main/java/org/opensaml/storage/StorageService.java
index 0908296..38474cc 100644
--- a/opensaml-storage-api/src/main/java/org/opensaml/storage/StorageService.java
+++ b/opensaml-storage-api/src/main/java/org/opensaml/storage/StorageService.java
@@ -76,6 +76,7 @@ public interface StorageService extends IdentifiedComponent {
      * Creates a new record in the store with an expiration, using a custom serialization
      * process for an arbitrary object.
      * 
+     * @param <T>           type of record
      * @param context       a storage context label
      * @param key           a key unique to context
      * @param value         object to store
@@ -85,8 +86,8 @@ public interface StorageService extends IdentifiedComponent {
      * @return  true iff record was inserted, false iff a duplicate was found
      * @throws IOException  if fatal errors occur in the insertion process
      */
-    boolean create(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
-            @Nonnull final Object value, @Nonnull final StorageSerializer serializer,
+    <T> boolean create(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
+            @Nonnull final T value, @Nonnull final StorageSerializer<T> serializer,
             @Nullable @Positive final Long expiration) throws IOException;
     
     /**
@@ -106,13 +107,14 @@ public interface StorageService extends IdentifiedComponent {
     /**
      * Returns an existing record from the store, if one exists.
      *
+     * @param <T>           type of record
      * @param context       a storage context label
      * @param key           a key unique to context
      * 
      * @return  the record read back, if present, or null
      * @throws IOException  if errors occur in the read process 
      */
-    @Nullable StorageRecord read(@Nonnull @NotEmpty final String context,
+    @Nullable <T> StorageRecord<T> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key) throws IOException;
 
     /**
@@ -139,6 +141,7 @@ public interface StorageService extends IdentifiedComponent {
      * If null, the record either didn't exist (if the first member was also null) or the record
      * was the same version as that supplied by the caller.</p>
      * 
+     * @param <T>           type of record
      * @param context       a storage context label
      * @param key           a key unique to context
      * @param version       only return record if newer than supplied version
@@ -146,7 +149,7 @@ public interface StorageService extends IdentifiedComponent {
      * @return  a pair consisting of the version of the record read back, if any, and the record itself
      * @throws IOException  if errors occur in the read process 
      */
-    @Nonnull Pair<Long, StorageRecord> read(@Nonnull @NotEmpty final String context,
+    @Nonnull <T> Pair<Long, StorageRecord<T>> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, @Positive final long version) throws IOException;
     
     
@@ -184,6 +187,7 @@ public interface StorageService extends IdentifiedComponent {
     /**
      * Updates an existing record in the store using a custom serialization strategy.
      * 
+     * @param <T>           type of record
      * @param context       a storage context label
      * @param key           a key unique to context
      * @param value         updated value
@@ -193,13 +197,14 @@ public interface StorageService extends IdentifiedComponent {
      * @return true if the update succeeded, false if the record does not exist 
      * @throws IOException  if errors occur in the update process 
      */
-    boolean update(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
-            @Nonnull final Object value, @Nonnull final StorageSerializer serializer,
+    <T> boolean update(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
+            @Nonnull final T value, @Nonnull final StorageSerializer<T> serializer,
             @Nullable @Positive final Long expiration) throws IOException;
     
     /**
      * Updates an existing record in the store, if a version matches, using a custom serialization strategy.
-     * 
+     *
+     * @param <T>           type of record
      * @param version       only update if the current version matches this value
      * @param context       a storage context label
      * @param key           a key unique to context
@@ -212,9 +217,9 @@ public interface StorageService extends IdentifiedComponent {
      * @throws VersionMismatchException if the record has already been updated to a newer version
      */
     // Checkstyle: ParameterNumber OFF
-    @Nullable Long updateWithVersion(@Positive final long version, @Nonnull @NotEmpty final String context,
-            @Nonnull @NotEmpty final String key, @Nonnull final Object value,
-            @Nonnull final StorageSerializer serializer, @Nullable @Positive final Long expiration)
+    @Nullable <T> Long updateWithVersion(@Positive final long version, @Nonnull @NotEmpty final String context,
+            @Nonnull @NotEmpty final String key, @Nonnull final T value,
+            @Nonnull final StorageSerializer<T> serializer, @Nullable @Positive final Long expiration)
                     throws IOException, VersionMismatchException;
     // Checkstyle: ParameterNumber ON
 
diff --git a/opensaml-storage-api/src/test/java/org/opensaml/storage/StorageServiceTest.java b/opensaml-storage-api/src/test/java/org/opensaml/storage/StorageServiceTest.java
index 0583787..44a8cb5 100644
--- a/opensaml-storage-api/src/test/java/org/opensaml/storage/StorageServiceTest.java
+++ b/opensaml-storage-api/src/test/java/org/opensaml/storage/StorageServiceTest.java
@@ -87,7 +87,7 @@ public abstract class StorageServiceTest {
         }
         
         for (int i = 1; i <= 100; i++) {
-            StorageRecord rec = shared.read(context, Integer.toString(i));
+            StorageRecord<?> rec = shared.read(context, Integer.toString(i));
             Assert.assertNotNull(rec);
             Assert.assertEquals(rec.getValue(), Integer.toString(i + 1));
         }
@@ -98,7 +98,7 @@ public abstract class StorageServiceTest {
         }
 
         for (int i = 1; i <= 100; i++) {
-            StorageRecord rec = shared.read(context, Integer.toString(i));
+            StorageRecord<?> rec = shared.read(context, Integer.toString(i));
             Assert.assertNotNull(rec);
             Assert.assertEquals(rec.getValue(), Integer.toString(i + 2));
         }
@@ -110,7 +110,7 @@ public abstract class StorageServiceTest {
         
         for (int i = 1; i <= 100; i++) {
             shared.delete(context, Integer.toString(i));
-            StorageRecord rec = shared.read(context, Integer.toString(i));
+            StorageRecord<?> rec = shared.read(context, Integer.toString(i));
             Assert.assertNull(rec);
         }
     }
@@ -128,7 +128,7 @@ public abstract class StorageServiceTest {
         Thread.sleep(5150);
         
         for (int i = 1; i <= 100; i++) {
-            StorageRecord rec = shared.read(context, Integer.toString(i));
+            StorageRecord<?> rec = shared.read(context, Integer.toString(i));
             Assert.assertNull(rec);
         }
     }
@@ -151,7 +151,7 @@ public abstract class StorageServiceTest {
             // expected
         }
         
-        StorageRecord rec = shared.read(context, key);
+        StorageRecord<?> rec = shared.read(context, key);
         Assert.assertNotNull(rec);
         Assert.assertEquals(rec.getVersion(), 2);
     }
@@ -206,32 +206,32 @@ public abstract class StorageServiceTest {
             return context;
         }
         
-        public void setContext(String context) {
-            this.context = context;
+        public void setContext(String c) {
+            context = c;
         }
         
         public String getKey() {
             return key;
         }
         
-        public void setKey(String key) {
-            this.key = key;
+        public void setKey(String k) {
+            key = k;
         }
         
         public String getValue() {
             return value;
         }
         
-        public void setValue(String value) {
-            this.value = value;
+        public void setValue(String val) {
+            value = val;
         }
         
         public long getExpiration() {
             return expiration;
         }
         
-        public void setExpiration(long expiration) {
-            this.expiration = expiration;
+        public void setExpiration(long exp) {
+            expiration = exp;
         }
         
     }
diff --git a/opensaml-storage-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-storage-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-storage-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-storage-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java
index 884f2a4..18af65c 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageRecord.java
@@ -38,6 +38,8 @@ import org.opensaml.storage.MutableStorageRecord;
 
 /**
  * Implementation of {@link MutableStorageRecord} annotated for JPA.
+ * 
+ * @param <T> type of object
  */
 @Entity
 @Table(name = "StorageRecords")
@@ -58,7 +60,7 @@ import org.opensaml.storage.MutableStorageRecord;
     @NamedQuery(name = "JPAStorageRecord.deleteByExpiration",
             query = "DELETE FROM JPAStorageRecord r WHERE r.expiration <= :exp")})
 @IdClass(JPAStorageRecord.RecordId.class)
-public class JPAStorageRecord extends MutableStorageRecord {
+public class JPAStorageRecord<T> extends MutableStorageRecord<T> {
 
     /** Length of the context column. */
     public static final int CONTEXT_SIZE = 255;
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java
index d35b4f8..bcb4c1e 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/JPAStorageService.java
@@ -116,8 +116,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
         super.doDestroy();
     }
 
-    // Checkstyle: MethodLength OFF
-    // Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
     /** {@inheritDoc} */
     @Override public boolean create(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String key,
             @Nonnull @NotEmpty final String value, @Nullable @Positive final Long expiration) throws IOException {
@@ -131,7 +130,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
                     manager = entityManagerFactory.createEntityManager();
                     transaction = manager.getTransaction();
                     transaction.begin();
-                    JPAStorageRecord entity =
+                    JPAStorageRecord<?> entity =
                             manager.find(JPAStorageRecord.class, new JPAStorageRecord.RecordId(context, key),
                                     LockModeType.PESSIMISTIC_WRITE);
                     if (entity != null) {
@@ -145,7 +144,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
                         // It's dead, reset the version for merge.
                         entity.resetVersion();
                     } else {
-                        entity = new JPAStorageRecord();
+                        entity = new JPAStorageRecord<>();
                         entity.setContext(context);
                         entity.setKey(key);
                     }
@@ -179,9 +178,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
             closeEntityManager(manager);
         }
     }
-
-    // Checkstyle: CyclomaticComplexity ON
-    // Checkstyle: MethodLength ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
 
     /**
      * Returns all records from the store.
@@ -189,7 +186,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
      * @return all records or an empty list
      * @throws IOException if errors occur in the read process
      */
-    @Nonnull @NonnullElements public List<StorageRecord> readAll() throws IOException {
+    @Nonnull @NonnullElements public List<?> readAll() throws IOException {
         EntityManager manager = null;
         try {
             manager = entityManagerFactory.createEntityManager();
@@ -208,7 +205,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
      * @return all records in the context or an empty list
      * @throws IOException if errors occur in the read process
      */
-    @Nonnull @NonnullElements public List<StorageRecord> readAll(@Nonnull @NotEmpty final String context)
+    @Nonnull @NonnullElements public List<?> readAll(@Nonnull @NotEmpty final String context)
             throws IOException {
         EntityManager manager = null;
         try {
@@ -241,13 +238,13 @@ public class JPAStorageService extends AbstractStorageService implements Storage
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public StorageRecord read(@Nonnull @NotEmpty final String context,
+    @Override @Nullable public <T> StorageRecord<T> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key) throws IOException {
-        return readImpl(context, key, null).getSecond();
+        return this.<T>readImpl(context, key, null).getSecond();
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull public Pair<Long, StorageRecord> read(@Nonnull @NotEmpty final String context,
+    @Override @Nonnull public <T> Pair<Long, StorageRecord<T>> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, @Positive final long version) throws IOException {
         return readImpl(context, key, version);
     }
@@ -257,6 +254,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
      * Reads the record matching the supplied parameters. Returns an empty pair if the record cannot be found or is
      * expired.
      * 
+     * @param <T> type of object
      * @param context to search for
      * @param key to search for
      * @param version to match
@@ -264,7 +262,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
      * @return pair of version and storage record
      * @throws IOException if errors occur in the read process
      */
-    @Nonnull protected Pair<Long, StorageRecord> readImpl(@Nonnull @NotEmpty final String context,
+    @Nonnull protected <T> Pair<Long, StorageRecord<T>> readImpl(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, @Positive final Long version) throws IOException {
         EntityManager manager = null;
         EntityTransaction transaction = null;
@@ -272,24 +270,23 @@ public class JPAStorageService extends AbstractStorageService implements Storage
             manager = entityManagerFactory.createEntityManager();
             transaction = manager.getTransaction();
             transaction.begin();
-            final JPAStorageRecord entity =
+            final JPAStorageRecord<T> entity =
                     manager.find(JPAStorageRecord.class, new JPAStorageRecord.RecordId(context, key),
                             LockModeType.PESSIMISTIC_READ);
             if (entity == null) {
                 log.debug("Read failed, key '{}' not found in context '{}'", key, context);
                 return new Pair<>();
-            } else {
-                final Long exp = entity.getExpiration();
-                if (exp != null && System.currentTimeMillis() >= exp) {
-                    log.debug("Read failed, key '{}' expired in context '{}'", key, context);
-                    return new Pair();
-                }
+            }
+            final Long exp = entity.getExpiration();
+            if (exp != null && System.currentTimeMillis() >= exp) {
+                log.debug("Read failed, key '{}' expired in context '{}'", key, context);
+                return new Pair<>();
             }
             if (version != null && entity.getVersion() == version) {
                 // Nothing's changed, so just echo back the version.
-                return new Pair(version, null);
+                return new Pair<>(version, null);
             }
-            return new Pair<Long, StorageRecord>(entity.getVersion(), entity);
+            return new Pair<>(entity.getVersion(), entity);
         } catch (final Exception e) {
             log.error("Error reading record '{}' in context '{}'", key, context, e);
             rollbackTransaction(transaction);
@@ -358,18 +355,18 @@ public class JPAStorageService extends AbstractStorageService implements Storage
                     manager = entityManagerFactory.createEntityManager();
                     transaction = manager.getTransaction();
                     transaction.begin();
-                    final JPAStorageRecord entity =
+                    final JPAStorageRecord<?> entity =
                             manager.find(JPAStorageRecord.class, new JPAStorageRecord.RecordId(context, key),
                                     LockModeType.PESSIMISTIC_WRITE);
                     if (entity == null) {
                         log.debug("Update failed, key '{}' not found in context '{}'", key, context);
                         return null;
-                    } else {
-                        final Long exp = entity.getExpiration();
-                        if (exp != null && System.currentTimeMillis() >= exp) {
-                            log.debug("Update failed, key '{}' expired in context '{}'", key, context);
-                            return null;
-                        }
+                    }
+                    
+                    final Long exp = entity.getExpiration();
+                    if (exp != null && System.currentTimeMillis() >= exp) {
+                        log.debug("Update failed, key '{}' expired in context '{}'", key, context);
+                        return null;
                     }
 
                     if (version != null && entity.getVersion() != version) {
@@ -450,7 +447,7 @@ public class JPAStorageService extends AbstractStorageService implements Storage
                     manager = entityManagerFactory.createEntityManager();
                     transaction = manager.getTransaction();
                     transaction.begin();
-                    final JPAStorageRecord entity =
+                    final JPAStorageRecord<?> entity =
                             manager.find(JPAStorageRecord.class, new JPAStorageRecord.RecordId(context, key),
                                     LockModeType.PESSIMISTIC_WRITE);
                     if (entity == null) {
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/LDAPStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/LDAPStorageService.java
index 294eb5e..714ce8b 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/LDAPStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/LDAPStorageService.java
@@ -126,7 +126,7 @@ public class LDAPStorageService extends AbstractStorageService implements Storag
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public StorageRecord read(@Nonnull @NotEmpty final String context,
+    @Override @Nullable public <T> StorageRecord<T> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key) throws IOException {
         SearchResult result = null;
         try {
@@ -137,13 +137,13 @@ public class LDAPStorageService extends AbstractStorageService implements Storag
                 throw new IOException(e);
             }
         }
-        StorageRecord record = null;
+        StorageRecord<T> record = null;
         if (result != null && result.size() > 0) {
             final LdapEntry entry = result.getEntry();
             if (entry != null) {
                 final LdapAttribute attr = entry.getAttribute(key);
                 if (attr != null) {
-                    record = new StorageRecord(attr.getStringValue(), null);
+                    record = new StorageRecord<>(attr.getStringValue(), null);
                 }
             }
         }
@@ -151,7 +151,7 @@ public class LDAPStorageService extends AbstractStorageService implements Storag
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull public Pair<Long,StorageRecord> read(@Nonnull @NotEmpty final String context,
+    @Override @Nonnull public <T> Pair<Long,StorageRecord<T>> read(@Nonnull @NotEmpty final String context,
             @Nonnull @NotEmpty final String key, @Positive final long version) throws IOException {
         throw new UnsupportedOperationException("Versioning not supported");
     }
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/MemoryStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/MemoryStorageService.java
index 2959671..583d72b 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/MemoryStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/MemoryStorageService.java
@@ -50,7 +50,7 @@ public class MemoryStorageService extends AbstractMapBackedStorageService implem
     @Nonnull private final Logger log = LoggerFactory.getLogger(MemoryStorageService.class);
 
     /** Map of contexts. */
-    @NonnullAfterInit @NonnullElements private Map<String, Map<String, MutableStorageRecord>> contextMap;
+    @NonnullAfterInit @NonnullElements private Map<String, Map<String, MutableStorageRecord<?>>> contextMap;
     
     /** A shared lock to synchronize access. */
     @NonnullAfterInit private ReadWriteLock lock;
@@ -84,7 +84,7 @@ public class MemoryStorageService extends AbstractMapBackedStorageService implem
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NonnullElements @Live protected Map<String, Map<String, MutableStorageRecord>> getContextMap() {
+    @Nonnull @NonnullElements @Live protected Map<String, Map<String, MutableStorageRecord<?>>> getContextMap() {
         return contextMap;
     }
 
@@ -112,10 +112,10 @@ public class MemoryStorageService extends AbstractMapBackedStorageService implem
                 try {
                     writeLock.lock();
                     
-                    final Collection<Map<String, MutableStorageRecord>> contexts = getContextMap().values();
-                    final Iterator<Map<String, MutableStorageRecord>> i = contexts.iterator();
+                    final Collection<Map<String, MutableStorageRecord<?>>> contexts = getContextMap().values();
+                    final Iterator<Map<String, MutableStorageRecord<?>>> i = contexts.iterator();
                     while (i.hasNext()) {
-                        final Map<String, MutableStorageRecord> context = i.next(); 
+                        final Map<String, MutableStorageRecord<?>> context = i.next(); 
                         if (reapWithLock(context, now)) {
                             purged = true;
                             if (context.isEmpty()) {
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
index cef0ccb..c243f61 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
@@ -55,6 +55,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.net.CookieManager;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.security.DataExpiredException;
@@ -262,19 +263,23 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     /** {@inheritDoc} */
     @Override
     public int getContextSize() {
-        return capabilityMap.get(getSource());
+        try {
+            return capabilityMap.get(getSource());
+        } catch (final IOException e) {
+            return capabilityMap.get(ClientStorageSource.COOKIE);
+        }
     }
 
     /** {@inheritDoc} */
     @Override
     public int getKeySize() {
-        return capabilityMap.get(getSource());
+        return getContextSize();
     }
 
     /** {@inheritDoc} */
     @Override
     public long getValueSize() {
-        return capabilityMap.get(getSource());
+        return getContextSize();
     }
 
     // Checkstyle: CyclomaticComplexity ON
@@ -321,22 +326,33 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NonnullElements @Live protected Map<String, Map<String, MutableStorageRecord>> getContextMap() {
+    @Nonnull @NonnullElements @Live protected Map<String, Map<String, MutableStorageRecord<?>>> getContextMap()
+            throws IOException {
         
-        final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(), "HttpSession cannot be null");
-        final Object store = Constraint.isNotNull(session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName),
-                "Storage object was not present in session");
-        return ((ClientStorageServiceStore) store).getContextMap();
+        try {
+            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+                    "HttpSession cannot be null");
+            final Object store = Constraint.isNotNull(session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName),
+                    "Storage object was not present in session");
+            return ((ClientStorageServiceStore) store).getContextMap();
+        } catch (final ConstraintViolationException e) {
+            throw new IOException(e);
+        }
     }
 
     /** {@inheritDoc} */
     @Override
-    protected void setDirty() {
-        final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(), "HttpSession cannot be null");
-        
-        final Object store = session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName);
-        if (store != null && store instanceof ClientStorageServiceStore) {
-            ((ClientStorageServiceStore) store).setDirty(true);
+    protected void setDirty() throws IOException {
+        try {
+            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+                    "HttpSession cannot be null");
+
+            final Object store = session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName);
+            if (store != null && store instanceof ClientStorageServiceStore) {
+                ((ClientStorageServiceStore) store).setDirty(true);
+            }
+        } catch (final ConstraintViolationException e) {
+            throw new IOException(e);
         }
     }
     
@@ -347,8 +363,10 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
      * returned by {@link #getLock()}.</p>
      *  
      * @return the source of the loaded data
+     * 
+     * @throws IOException to signal an error
      */
-    @Nonnull ClientStorageSource getSource() {
+    @Nonnull ClientStorageSource getSource() throws IOException {
        final Lock lock = getLock().readLock();
        try {
            lock.lock();
@@ -360,6 +378,8 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
                return ((ClientStorageServiceStore) object).getSource();
            }
            return ClientStorageSource.COOKIE;
+       } catch (final ConstraintViolationException e) {
+           throw new IOException(e);
        } finally {
            lock.unlock();
        }
@@ -372,8 +392,10 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
      * returned by {@link #getLock()}.</p>
      *  
      * @return true iff the {@link HttpSession} contains a storage object
+     * 
+     * @throws IOException to signal an error
      */
-    boolean isLoaded() {
+    boolean isLoaded() throws IOException {
        final Lock lock = getLock().readLock();
        try {
            lock.lock();
@@ -381,6 +403,8 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
                    "HttpSession cannot be null");
            return session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName) instanceof ClientStorageServiceStore;
+       } catch (final ConstraintViolationException e) {
+           throw new IOException(e);
        } finally {
            lock.unlock();
        }
@@ -501,7 +525,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     public class ClientStorageServiceStore {
         
         /** The underlying map of data records. */
-        @Nonnull @NonnullElements private final Map<String, Map<String, MutableStorageRecord>> contextMap;
+        @Nonnull @NonnullElements private final Map<String, Map<String, MutableStorageRecord<?>>> contextMap;
         
         /** Data source. */
         @Nonnull private final ClientStorageSource source; 
@@ -540,7 +564,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
                     }
                     
                     // Create new context if necessary.
-                    Map<String,MutableStorageRecord> dataMap = contextMap.get(context.getKey());
+                    Map<String,MutableStorageRecord<?>> dataMap = contextMap.get(context.getKey());
                     if (dataMap == null) {
                         dataMap = new HashMap<>();
                         contextMap.put(context.getKey(), dataMap);
@@ -555,7 +579,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
                             exp = fields.getJsonNumber("x").longValueExact();
                         }
                         
-                        dataMap.put(record.getKey(), new MutableStorageRecord(fields.getString("v"), exp));
+                        dataMap.put(record.getKey(), new MutableStorageRecord<>(fields.getString("v"), exp));
                     }
                 }
                 setDirty(false);
@@ -572,7 +596,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
          * 
          * @return map of contexts to manipulate
          */
-        @Nonnull @NonnullElements @Live Map<String, Map<String, MutableStorageRecord>> getContextMap() {
+        @Nonnull @NonnullElements @Live Map<String, Map<String, MutableStorageRecord<?>>> getContextMap() {
             return contextMap;
         }
         
@@ -632,11 +656,11 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
                 final JsonGenerator gen = Json.createGenerator(sink);
                 
                 gen.writeStartObject();
-                for (final Map.Entry<String,Map<String, MutableStorageRecord>> context : contextMap.entrySet()) {
+                for (final Map.Entry<String,Map<String, MutableStorageRecord<?>>> context : contextMap.entrySet()) {
                     if (!context.getValue().isEmpty()) {
                         gen.writeStartObject(context.getKey());
-                        for (final Map.Entry<String,MutableStorageRecord> entry : context.getValue().entrySet()) {
-                            final MutableStorageRecord record = entry.getValue();
+                        for (final Map.Entry<String,MutableStorageRecord<?>> entry : context.getValue().entrySet()) {
+                            final MutableStorageRecord<?> record = entry.getValue();
                             final Long recexp = record.getExpiration();
                             if (recexp == null || recexp > now) {
                                 empty = false;
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
index 5032843..1a97456 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
@@ -17,6 +17,7 @@
 
 package org.opensaml.storage.impl.client;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -101,7 +102,13 @@ public class PopulateClientStorageLoadContext extends AbstractProfileAction {
         
         for (final ClientStorageService service : storageServices) {
             
-            if (!service.isLoaded()) {
+            try {
+                if (!service.isLoaded()) {
+                    loadCtx.getStorageKeys().add(service.getStorageName());
+                    ids.add(service.getId());
+                }
+            } catch (final IOException e) {
+                log.warn("{} Error checking load status of {}, assuming unloaded", getLogPrefix(), service.getId());
                 loadCtx.getStorageKeys().add(service.getStorageName());
                 ids.add(service.getId());
             }
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecord.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecord.java
index 4b3efdb..770c2fc 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecord.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecord.java
@@ -27,9 +27,11 @@ import javax.annotation.Nullable;
 /**
  * Storage record implementation for use with {@link MemcachedStorageService}.
  *
+ * @param <T> type of object
+ *
  * @author Marvin S. Addison
  */
-public class MemcachedStorageRecord extends StorageRecord {
+public class MemcachedStorageRecord<T> extends StorageRecord<T> {
 
     /**
      * Creates a new instance with specific record version.
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageService.java
index 6cc9472..5f1e8eb 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/MemcachedStorageService.java
@@ -106,7 +106,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
     private final Logger logger = LoggerFactory.getLogger(MemcachedStorageService.class);
 
     /** Handles conversion of {@link MemcachedStorageRecord} to bytes and vice versa. */
-    private final Transcoder<MemcachedStorageRecord> storageRecordTranscoder = new StorageRecordTranscoder();
+    private final Transcoder<MemcachedStorageRecord<?>> storageRecordTranscoder = new StorageRecordTranscoder();
 
     /** Handles conversion of strings to bytes and vice versa. */
     private final Transcoder<String> stringTranscoder = new StringTranscoder();
@@ -193,7 +193,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
         Constraint.isNotNull(StringSupport.trimOrNull(context), "Context cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(key), "Key cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(value), "Value cannot be null or empty");
-        final MemcachedStorageRecord record = new MemcachedStorageRecord(value, expiration);
+        final MemcachedStorageRecord<?> record = new MemcachedStorageRecord<>(value, expiration);
         final int expiry = record.getExpiry();
         Constraint.isGreaterThan(-1, expiry, "Expiration must be null or positive");
         String namespace = lookupNamespace(context);
@@ -220,10 +220,10 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
 
     /** {@inheritDoc} */
     @Override
-    public boolean create(@Nonnull @NotEmpty final String context,
+    public <T> boolean create(@Nonnull @NotEmpty final String context,
                           @Nonnull @NotEmpty final String key,
-                          @Nonnull final Object value,
-                          @Nonnull final StorageSerializer serializer,
+                          @Nonnull final T value,
+                          @Nonnull final StorageSerializer<T> serializer,
                           @Nullable @Positive final Long expiration) throws IOException {
         Constraint.isNotNull(serializer, "Serializer cannot be null");
         return create(context, key, serializer.serialize(value), expiration);
@@ -242,7 +242,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
 
     /** {@inheritDoc} */
     @Override
-    public StorageRecord read(@Nonnull @NotEmpty final String context,
+    public <T> StorageRecord<T> read(@Nonnull @NotEmpty final String context,
                               @Nonnull @NotEmpty final String key) throws IOException {
         Constraint.isNotNull(StringSupport.trimOrNull(context), "Context cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(key), "Key cannot be null or empty");
@@ -253,9 +253,9 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
         }
         final String cacheKey = memcachedKey(namespace, key);
         logger.debug("Reading entry at {} for context={}, key={}", cacheKey, context, key);
-        final CASValue<MemcachedStorageRecord> record;
+        final CASValue<MemcachedStorageRecord<?>> record;
         try {
-            record = handleAsyncResult(memcacheClient.asyncGets(cacheKey, storageRecordTranscoder));
+            record = this.handleAsyncResult(memcacheClient.asyncGets(cacheKey, storageRecordTranscoder));
         } catch (final RuntimeException e) {
             throw new IOException("Memcached operation failed", e);
         }
@@ -263,7 +263,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
             return null;
         }
         record.getValue().setVersion(record.getCas());
-        return record.getValue();
+        return (StorageRecord<T>) record.getValue();
     }
 
     /** {@inheritDoc} */
@@ -275,15 +275,15 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
 
     /** {@inheritDoc} */
     @Override
-    public Pair<Long, StorageRecord> read(@Nonnull @NotEmpty final String context,
+    public <T> Pair<Long, StorageRecord<T>> read(@Nonnull @NotEmpty final String context,
                                            @Nonnull @NotEmpty final String key,
                                            @Positive final long version) throws IOException {
         Constraint.isGreaterThan(0, version, "Version must be positive");
-        final StorageRecord record = read(context, key);
+        final StorageRecord<T> record = read(context, key);
         if (record == null) {
             return new Pair<>();
         }
-        final Pair<Long, StorageRecord> result = new Pair<>(record.getVersion(), null);
+        final Pair<Long, StorageRecord<T>> result = new Pair<>(record.getVersion(), null);
         if (version != record.getVersion()) {
             // Only set the record if it's not the same as the version requested
             result.setSecond(record);
@@ -300,7 +300,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
         Constraint.isNotNull(StringSupport.trimOrNull(context), "Context cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(key), "Key cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(value), "Value cannot be null or empty");
-        final MemcachedStorageRecord record = new MemcachedStorageRecord(value, expiration);
+        final MemcachedStorageRecord<?> record = new MemcachedStorageRecord<>(value, expiration);
         final int expiry = record.getExpiry();
         Constraint.isGreaterThan(-1, expiry, "Expiration must be null or positive");
         final String namespace = lookupNamespace(context);
@@ -315,10 +315,10 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
 
     /** {@inheritDoc} */
     @Override
-    public boolean update(@Nonnull @NotEmpty final String context,
+    public <T> boolean update(@Nonnull @NotEmpty final String context,
                           @Nonnull @NotEmpty final String key,
-                          @Nonnull final Object value,
-                          @Nonnull final StorageSerializer serializer,
+                          @Nonnull final T value,
+                          @Nonnull final StorageSerializer<T> serializer,
                           @Nullable @Positive final Long expiration) throws IOException {
         Constraint.isNotNull(serializer, "Serializer cannot be null");
         return update(context, key, serializer.serialize(value), expiration);
@@ -348,7 +348,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
         Constraint.isNotNull(StringSupport.trimOrNull(context), "Context cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(key), "Key cannot be null or empty");
         Constraint.isNotNull(StringSupport.trimOrNull(value), "Value cannot be null or empty");
-        final MemcachedStorageRecord record = new MemcachedStorageRecord(value, expiration);
+        final MemcachedStorageRecord<?> record = new MemcachedStorageRecord<>(value, expiration);
         final int expiry = record.getExpiry();
         Constraint.isGreaterThan(-1, expiry, "Expiration must be null or positive");
         final String namespace = lookupNamespace(context);
@@ -363,7 +363,7 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
                 memcacheClient.asyncCAS(cacheKey, version, expiry, record, storageRecordTranscoder));
         Long newVersion = null;
         if (CASResponse.OK == response) {
-            final CASValue<MemcachedStorageRecord> newRecord = handleAsyncResult(
+            final CASValue<MemcachedStorageRecord<?>> newRecord = handleAsyncResult(
                     memcacheClient.asyncGets(cacheKey, storageRecordTranscoder));
             if (newRecord != null) {
                 newVersion = newRecord.getCas();
@@ -377,11 +377,11 @@ public class MemcachedStorageService extends AbstractIdentifiableInitializableCo
 // Checkstyle: ParameterNumber OFF
     /** {@inheritDoc} */
     @Override
-    @Nullable public Long updateWithVersion(@Positive final long version,
+    @Nullable public <T> Long updateWithVersion(@Positive final long version,
                                   @Nonnull @NotEmpty final String context,
                                   @Nonnull @NotEmpty final String key,
-                                  @Nonnull final Object value,
-                                  @Nonnull final StorageSerializer serializer,
+                                  @Nonnull final T value,
+                                  @Nonnull final StorageSerializer<T> serializer,
                                   @Nullable @Positive final Long expiration)
             throws IOException, VersionMismatchException {
 
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoder.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoder.java
index 974b9b7..1d5d849 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoder.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoder.java
@@ -28,7 +28,7 @@ import java.nio.charset.StandardCharsets;
  *
  * @author Marvin S. Addison
  */
-public class StorageRecordTranscoder implements Transcoder<MemcachedStorageRecord> {
+public class StorageRecordTranscoder implements Transcoder<MemcachedStorageRecord<?>> {
 
     /** Max size is maximum default memcached value size, 1MB. */
     private static final int MAX_SIZE = 1024 * 1024;
@@ -40,7 +40,7 @@ public class StorageRecordTranscoder implements Transcoder<MemcachedStorageRecor
     }
 
     @Override
-    public CachedData encode(final MemcachedStorageRecord o) {
+    public CachedData encode(final MemcachedStorageRecord<?> o) {
         final byte[] value = o.getValue().getBytes(StandardCharsets.UTF_8);
         final byte[] encoded = new byte[value.length + 8];
         ByteUtil.toBytes(o.getExpiration() == null ? 0 : o.getExpiration().longValue(), encoded, 0);
@@ -49,14 +49,14 @@ public class StorageRecordTranscoder implements Transcoder<MemcachedStorageRecor
     }
 
     @Override
-    public MemcachedStorageRecord decode(final CachedData d) {
+    public MemcachedStorageRecord<?> decode(final CachedData d) {
         final byte[] bytes = d.getData();
         final String value = new String(bytes, 8, bytes.length - 8, StandardCharsets.UTF_8);
         final long exp = ((long) bytes[0] << 56) | (((long) bytes[1] & 0xff) << 48) |
                 (((long) bytes[2] & 0xff) << 40) | (((long) bytes[3] & 0xff) << 32) |
                 (((long) bytes[4] & 0xff) << 24) | (((long) bytes[5] & 0xff) << 16) |
                 (((long) bytes[6] & 0xff) << 8) | ((long) bytes[7] & 0xff);
-        return new MemcachedStorageRecord(value, exp == 0 ? null : exp);
+        return new MemcachedStorageRecord<>(value, exp == 0 ? null : exp);
     }
 
     @Override
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/JPAStorageServiceTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/JPAStorageServiceTest.java
index d3396e3..7bc74cd 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/JPAStorageServiceTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/JPAStorageServiceTest.java
@@ -54,10 +54,10 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     private Object[][] contexts;
 
     public JPAStorageServiceTest() {
-        final SecureRandom random = new SecureRandom();
+        final SecureRandom random1 = new SecureRandom();
         contexts = new Object[10][1];
         for (int i = 0; i < 10; i++) {
-            contexts[i] = new Object[] {Long.toString(random.nextLong()), };
+            contexts[i] = new Object[] {Long.toString(random1.nextLong()), };
         }
     }
 
@@ -95,11 +95,11 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     @AfterClass
     protected void tearDown() {
         try {
-            List<String> contexts = storageService.readContexts();
-            for (String ctx : contexts) {
+            List<String> contexts1 = storageService.readContexts();
+            for (String ctx : contexts1) {
                 storageService.deleteContext(ctx);
             }
-            List<StorageRecord> recs = storageService.readAll();
+            List<?> recs = storageService.readAll();
             Assert.assertEquals(recs.size(), 0);
         } catch (IOException e){ 
             throw new RuntimeException(e);
@@ -122,7 +122,7 @@ public class JPAStorageServiceTest extends StorageServiceTest {
         } catch (InterruptedException e) {
             throw new IOException(e);
         }
-        List<StorageRecord> recs = storageService.readAll(context);
+        List<?> recs = storageService.readAll(context);
         Assert.assertEquals(recs.size(), 0);
     }
 
@@ -134,7 +134,7 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     @Test(dataProvider = "contexts", singleThreaded = false, threadPoolSize = 25, invocationCount = 100)
     public void multithread(final String context) throws IOException {
         shared.create(context, "mt", "bar", System.currentTimeMillis() + 300000);
-        StorageRecord rec = shared.read(context, "mt");
+        StorageRecord<?> rec = shared.read(context, "mt");
         Assert.assertNotNull(rec);
         shared.update(context, "mt", "baz", System.currentTimeMillis() + 300000);
         rec = shared.read(context, "mt");
@@ -147,8 +147,8 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     public void multithreadCaseSensitiveKey() throws IOException {
         shared.create("unit_test", "foo", "bar", null);
         shared.create("unit_test", "FOO", "bar", null);
-        StorageRecord rec1 = shared.read("unit_test", "foo");
-        StorageRecord rec2 = shared.read("unit_test", "FOO");
+        StorageRecord<?> rec1 = shared.read("unit_test", "foo");
+        StorageRecord<?> rec2 = shared.read("unit_test", "FOO");
         Assert.assertNotNull(rec1);
         Assert.assertNotNull(rec2);
         Assert.assertNotEquals(rec1, rec2);
@@ -158,8 +158,8 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     public void keyCollision() throws IOException {
         shared.create("unit_test", "dlo1", "value", null);
         shared.create("unit_test", "dn11", "value", null);
-        StorageRecord rec1 = shared.read("unit_test", "dlo1");
-        StorageRecord rec2 = shared.read("unit_test", "dn11");
+        StorageRecord<?> rec1 = shared.read("unit_test", "dlo1");
+        StorageRecord<?> rec2 = shared.read("unit_test", "dn11");
         Assert.assertNotNull(rec1);
         Assert.assertNotNull(rec2);
         Assert.assertNotEquals(rec1, rec2);
@@ -191,8 +191,8 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     public void caseSensitiveContext() throws IOException {
         shared.create("foo", "bar", "value", null);
         shared.create("FOO", "bar", "value", null);
-        StorageRecord rec1 = shared.read("foo", "bar");
-        StorageRecord rec2 = shared.read("FOO", "bar");
+        StorageRecord<?> rec1 = shared.read("foo", "bar");
+        StorageRecord<?> rec2 = shared.read("FOO", "bar");
         Assert.assertNotNull(rec1);
         Assert.assertNotNull(rec2);
         Assert.assertNotEquals(rec1, rec2);
@@ -225,8 +225,8 @@ public class JPAStorageServiceTest extends StorageServiceTest {
     public void caseSensitiveKey() throws IOException {
         shared.create("unit_test", "foo", "value", null);
         shared.create("unit_test", "FOO", "value", null);
-        StorageRecord rec1 = shared.read("unit_test", "foo");
-        StorageRecord rec2 = shared.read("unit_test", "FOO");
+        StorageRecord<?> rec1 = shared.read("unit_test", "foo");
+        StorageRecord<?> rec2 = shared.read("unit_test", "FOO");
         Assert.assertNotNull(rec1);
         Assert.assertNotNull(rec2);
         Assert.assertNotEquals(rec1, rec2);
@@ -262,7 +262,7 @@ public class JPAStorageServiceTest extends StorageServiceTest {
             sb.append(UUID.randomUUID());
         }
         shared.create("unit_test", "large", sb.toString(), System.currentTimeMillis() + 300000);
-        StorageRecord rec = shared.read("unit_test", "large");
+        StorageRecord<?> rec = shared.read("unit_test", "large");
         Assert.assertNotNull(rec);
         Assert.assertEquals(sb.toString(), rec.getValue());
     }
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/LDAPStorageServiceTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/LDAPStorageServiceTest.java
index 52f1e46..98de98d 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/LDAPStorageServiceTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/LDAPStorageServiceTest.java
@@ -154,7 +154,7 @@ public class LDAPStorageServiceTest {
     @Test
     public void create() throws IOException {
         storageService.create(context, "mail", "principal at shibboleth.net", null);
-        StorageRecord rec = storageService.read(context, "mail");
+        StorageRecord<?> rec = storageService.read(context, "mail");
         Assert.assertNotNull(rec);
         Assert.assertEquals(rec.getValue(), "principal at shibboleth.net");
 
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
index e8c8596..e7f2336 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/LoadClientStorageServicesTest.java
@@ -40,7 +40,6 @@ import org.testng.annotations.Test;
 import com.google.common.net.UrlEscapers;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.net.HttpServletRequestResponseContext;
 import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy;
 
@@ -90,7 +89,7 @@ public class LoadClientStorageServicesTest extends AbstractBaseClientStorageServ
         ActionTestingSupport.assertProceedEvent(prc);
     }
  
-    @Test public void testEmpty() throws ComponentInitializationException {
+    @Test public void testEmpty() throws ComponentInitializationException, IOException {
         final ClientStorageService ss = getStorageService();
 
         final Lock lock = ss.getLock().readLock();
@@ -98,7 +97,7 @@ public class LoadClientStorageServicesTest extends AbstractBaseClientStorageServ
             lock.lock();
             ss.getContextMap();
             Assert.fail("getContextMap should have failed for unloaded storage service");
-        } catch(final ConstraintViolationException e) {
+        } catch(final IOException e) {
             
         } finally {
             lock.unlock();
@@ -122,7 +121,7 @@ public class LoadClientStorageServicesTest extends AbstractBaseClientStorageServ
         }
     }
 
-    @Test public void testInvalid() throws ComponentInitializationException {
+    @Test public void testInvalid() throws ComponentInitializationException, IOException {
         final ClientStorageService ss = getStorageService();
         action.setStorageServices(Collections.singletonList(ss));
         action.initialize();
@@ -202,7 +201,7 @@ public class LoadClientStorageServicesTest extends AbstractBaseClientStorageServ
     private void checkStorageContent(final StorageService ss) throws IOException {
         Assert.assertNull(loadCtx.getParent());
 
-        StorageRecord record = ss.read("context1", "key1");
+        StorageRecord<?> record = ss.read("context1", "key1");
         Assert.assertNotNull(record);
         Assert.assertEquals(record.getValue(), "value1");
         Assert.assertNull(record.getExpiration());
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecordTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecordTest.java
index c6a9b45..09e0de6 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecordTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageRecordTest.java
@@ -29,14 +29,14 @@ public class MemcachedStorageRecordTest {
 
     @Test
     public void testNumericExpiration() {
-        final MemcachedStorageRecord record = new MemcachedStorageRecord("r1", 5031757792L);
+        final MemcachedStorageRecord<?> record = new MemcachedStorageRecord<>("r1", 5031757792L);
         assertEquals(record.getExpiration().longValue(), 5031757792L);
         assertEquals(record.getExpiry(), 5031757);
     }
 
     @Test
     public void testNullExpiration() {
-        final MemcachedStorageRecord record = new MemcachedStorageRecord("r2", null);
+        final MemcachedStorageRecord<?> record = new MemcachedStorageRecord<>("r2", null);
         assertNull(record.getExpiration());
         assertEquals(record.getExpiry(), 0);
     }
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageServiceTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageServiceTest.java
index 0f5d89e..166bf00 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageServiceTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/MemcachedStorageServiceTest.java
@@ -110,11 +110,11 @@ public class MemcachedStorageServiceTest {
             throws IOException {
         assertNull(service.read(context, key));
         assertTrue(service.create(context, key, value, 5000L));
-        final StorageRecord r1 = service.read(context, key);
+        final StorageRecord<?> r1 = service.read(context, key);
         assertNotNull(r1);
         assertEquals(r1.getValue(), value);
         assertTrue(service.update(context, key, updatedValue, 5000L));
-        final StorageRecord r2 = service.read(context, key);
+        final StorageRecord<?> r2 = service.read(context, key);
         assertNotNull(r2);
         assertEquals(r2.getValue(), updatedValue);
         assertTrue(service.delete(context, key));
@@ -128,19 +128,19 @@ public class MemcachedStorageServiceTest {
             throws IOException, VersionMismatchException {
         assertNull(service.read(context, key));
         assertTrue(service.create(context, key, value, 5000L));
-        final StorageRecord r1 = service.read(context, key);
+        final StorageRecord<?> r1 = service.read(context, key);
         assertNotNull(r1);
         assertEquals(r1.getValue(), value);
         final Long updatedVersion = service.updateWithVersion(r1.getVersion(), context, key, updatedValue, 5000L);
         assertTrue((updatedVersion > r1.getVersion()));
-        final Pair<Long, StorageRecord> pair1 = service.read(context, key, r1.getVersion());
+        final Pair<Long, StorageRecord<String>> pair1 = service.read(context, key, r1.getVersion());
         assertEquals(pair1.getFirst(), updatedVersion);
         assertEquals(pair1.getSecond().getValue(), updatedValue);
-        final Pair<Long, StorageRecord> pair2 = service.read(context, key, updatedVersion);
+        final Pair<Long, StorageRecord<String>> pair2 = service.read(context, key, updatedVersion);
         assertEquals(pair2.getFirst(), updatedVersion);
         assertNull(pair2.getSecond());
         assertFalse(service.deleteWithVersion(r1.getVersion(), context, key));
-        final Pair<Long, StorageRecord> pair3 = service.read(context, key, updatedVersion);
+        final Pair<Long, StorageRecord<String>> pair3 = service.read(context, key, updatedVersion);
         assertEquals(pair3.getFirst(), updatedVersion);
         assertNull(pair3.getSecond());
         assertTrue(service.deleteWithVersion(updatedVersion, context, key));
@@ -177,7 +177,7 @@ public class MemcachedStorageServiceTest {
         final String key = "expiration_test_key";
         final String value = "Oh well, oh well, oh well, oh well";
         assertTrue(service.create(context, key, value, 30000L));
-        final StorageRecord record = service.read(context, key);
+        final StorageRecord<?> record = service.read(context, key);
         assertNotNull(record);
         assertEquals(record.getValue(), value);
         assertTrue(service.updateExpiration(context, key, System.currentTimeMillis() - 5000));
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoderTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoderTest.java
index e6b1ef5..7538a07 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoderTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/memcached/StorageRecordTranscoderTest.java
@@ -32,15 +32,15 @@ public class StorageRecordTranscoderTest {
     @DataProvider
     public Object[][] testRecords() {
         return new Object[][] {
-                new Object[] {new MemcachedStorageRecord("Whither the weather", null)},
-                new Object[] {new MemcachedStorageRecord("x", Long.MAX_VALUE)},
-                new Object[] {new MemcachedStorageRecord("床前明月光,疑是地上霜. 举头望明月,低头思故乡.", 2515878896L)},
+                new Object[] {new MemcachedStorageRecord<>("Whither the weather", null)},
+                new Object[] {new MemcachedStorageRecord<>("x", Long.MAX_VALUE)},
+                new Object[] {new MemcachedStorageRecord<>("床前明月光,疑是地上霜. 举头望明月,低头思故乡.", 2515878896L)},
         };
     }
 
     @Test(dataProvider = "testRecords")
-    public void testEncodeDecode(final MemcachedStorageRecord expected) {
-        final MemcachedStorageRecord actual = transcoder.decode(transcoder.encode(expected));
+    public void testEncodeDecode(final MemcachedStorageRecord<?> expected) {
+        final MemcachedStorageRecord<?> actual = transcoder.decode(transcoder.encode(expected));
         assertEquals(actual.getValue(), expected.getValue());
         assertEquals(actual.getExpiration(), expected.getExpiration());
         assertEquals(actual.getVersion(), expected.getVersion());
diff --git a/opensaml-xacml-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-xacml-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xacml-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xacml-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xacml-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-xacml-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xacml-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xacml-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xacml-saml-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-xacml-saml-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xacml-saml-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xacml-saml-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xacml-saml-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-xacml-saml-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xacml-saml-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xacml-saml-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xmlsec-api/.settings/org.eclipse.jdt.core.prefs b/opensaml-xmlsec-api/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xmlsec-api/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xmlsec-api/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/algorithm/AlgorithmSupport.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/algorithm/AlgorithmSupport.java
index b7a2814..aed0f19 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/algorithm/AlgorithmSupport.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/algorithm/AlgorithmSupport.java
@@ -410,9 +410,8 @@ public final class AlgorithmSupport {
             if (blacklistedAlgorithmURIs.contains(algorithmURI)) {
                 LOG.warn("Algorithm failed blacklist validation: {}", algorithmURI);
                 return false;
-            } else {
-                LOG.debug("Algorithm passed blacklist validation: {}", algorithmURI);
             }
+            LOG.debug("Algorithm passed blacklist validation: {}", algorithmURI);
         } else {
             LOG.debug("Saw null algorithm blacklist, nothing to evaluate");
         }
@@ -423,9 +422,8 @@ public final class AlgorithmSupport {
                 if (!whitelistedAlgorithmURIs.contains(algorithmURI)) {
                     LOG.warn("Algorithm failed whitelist validation: {}", algorithmURI);
                     return false;
-                } else {
-                    LOG.debug("Algorithm passed whitelist validation: {}", algorithmURI);
                 }
+                LOG.debug("Algorithm passed whitelist validation: {}", algorithmURI);
             } else {
                LOG.debug("Non-null algorithm whitelist was empty, skipping evaluation");
             }
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/config/DecryptionParserPoolInitializer.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/config/DecryptionParserPoolInitializer.java
index 6ba8332..6140409 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/config/DecryptionParserPoolInitializer.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/config/DecryptionParserPoolInitializer.java
@@ -22,8 +22,6 @@ import java.util.HashMap;
 import org.opensaml.core.config.ConfigurationService;
 import org.opensaml.core.config.InitializationException;
 import org.opensaml.core.config.Initializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.xml.BasicParserPool;
@@ -41,9 +39,6 @@ import net.shibboleth.utilities.java.support.xml.BasicParserPool;
  * 
  */
 public class DecryptionParserPoolInitializer implements Initializer {
-    
-    /** Logger. */
-    private Logger log = LoggerFactory.getLogger(DecryptionParserPoolInitializer.class);
 
     /** {@inheritDoc} */
     public void init() throws InitializationException {
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
index 22ca491..9404804 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolver.java
@@ -208,9 +208,8 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
             tempKey = getNextKey();
             if (tempKey != null) {
                 return tempKey;
-            } else {
-                throw new NoSuchElementException("No more EncryptedKey elements are available");
             }
+            throw new NoSuchElementException("No more EncryptedKey elements are available");
         }
 
         /** {@inheritDoc} */
@@ -229,11 +228,10 @@ public class ChainingEncryptedKeyResolver extends AbstractEncryptedKeyResolver {
                 currentResolver = resolverIterator.next();
                 log.debug("Getting key iterator from next resolver: {}", currentResolver.getClass().toString());
                 return currentResolver.resolve(encryptedData).iterator();
-            } else {
-                log.debug("No more resolvers available in the resolver chain");
-                currentResolver = null;
-                return null;
             }
+            log.debug("No more resolvers available in the resolver chain");
+            currentResolver = null;
+            return null;
         }
 
         /**
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Decrypter.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Decrypter.java
index f505b9e..84efe15 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Decrypter.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Decrypter.java
@@ -458,19 +458,18 @@ public class Decrypter {
             if (node.getNodeType() != Node.ELEMENT_NODE) {
                 log.error("Decryption returned a top-level node that was not of type Element: " + node.getNodeType());
                 throw new DecryptionException("Top-level node was not of type Element");
-            } else {
-                element = (Element) node;
-                if (rootInNewDocument) {
-                    Document newDoc = null;
-                    try {
-                        newDoc = parserPool.newDocument();
-                    } catch (final XMLParserException e) {
-                        log.error("There was an error creating a new DOM Document", e);
-                        throw new DecryptionException("Error creating new DOM Document", e);
-                    }
-                    newDoc.adoptNode(element);
-                    newDoc.appendChild(element);
+            }
+            element = (Element) node;
+            if (rootInNewDocument) {
+                Document newDoc = null;
+                try {
+                    newDoc = parserPool.newDocument();
+                } catch (final XMLParserException e) {
+                    log.error("There was an error creating a new DOM Document", e);
+                    throw new DecryptionException("Error creating new DOM Document", e);
                 }
+                newDoc.adoptNode(element);
+                newDoc.appendChild(element);
             }
 
             try {
@@ -482,10 +481,9 @@ public class Decrypter {
                         final String errorMsg = "No unmarshaller available for " + QNameSupport.getNodeQName(element);
                         log.error(errorMsg);
                         throw new UnmarshallingException(errorMsg);
-                    } else {
-                        log.debug("No unmarshaller was registered for {}. Using default unmarshaller.",
-                                QNameSupport.getNodeQName(element));
                     }
+                    log.debug("No unmarshaller was registered for {}. Using default unmarshaller.",
+                            QNameSupport.getNodeQName(element));
                 }
                 xmlObject = unmarshaller.unmarshall(element);
             } catch (final UnmarshallingException e) {
@@ -521,9 +519,8 @@ public class Decrypter {
             docFrag = decryptUsingResolvedKey(encryptedData);
             if (docFrag != null) {
                 return docFrag;
-            } else {
-                log.debug("Failed to decrypt EncryptedData using standard KeyInfo resolver");
             }
+            log.debug("Failed to decrypt EncryptedData using standard KeyInfo resolver");
         }
 
         final String algorithm = encryptedData.getEncryptionMethod().getAlgorithm();
@@ -536,9 +533,8 @@ public class Decrypter {
             docFrag = decryptUsingResolvedEncryptedKey(encryptedData, algorithm);
             if (docFrag != null) {
                 return docFrag;
-            } else {
-                log.debug("Failed to decrypt EncryptedData using EncryptedKeyResolver");
             }
+            log.debug("Failed to decrypt EncryptedData using EncryptedKeyResolver");
         }
 
         log.error("Failed to decrypt EncryptedData using either EncryptedData KeyInfoCredentialResolver "
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Encrypter.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Encrypter.java
index 7173d55..e84fd82 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Encrypter.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/support/Encrypter.java
@@ -118,7 +118,8 @@ public class Encrypter {
         Constraint.isNotNull(encryptedKeyUnmarshaller, "EncryptedKey unmarshaller not configured");
 
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
-        keyInfoBuilder = (XMLSignatureBuilder<KeyInfo>) builderFactory.getBuilder(KeyInfo.DEFAULT_ELEMENT_NAME);
+        keyInfoBuilder = (XMLSignatureBuilder<KeyInfo>) builderFactory.<KeyInfo>getBuilderOrThrow(
+                KeyInfo.DEFAULT_ELEMENT_NAME);
         Constraint.isNotNull(keyInfoBuilder, "KeyInfo builder not configured");
     }
 
@@ -427,9 +428,8 @@ public class Encrypter {
         if (EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP11.equals(encryptionAlgorithmURI) 
                 && rsaOAEPParams != null) {
             return rsaOAEPParams.getMaskGenerationFunction();
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
@@ -445,12 +445,10 @@ public class Encrypter {
                 final byte[] oaepParams = Base64Support.decode(base64Params);
                 if (oaepParams.length == 0) {
                     return null;
-                } else {
-                    return oaepParams;
                 }
-            } else {
-                return null;
+                return oaepParams;
             }
+            return null;
         } catch (final RuntimeException e) {
             throw new EncryptionException(String.format("Error decoding OAEPParams data '%s'", base64Params), e);
         }
@@ -658,10 +656,9 @@ public class Encrypter {
         if (kekParams == null) {
             if (allowEmpty) {
                 return;
-            } else {
-                log.error("Key encryption parameters are required");
-                throw new EncryptionException("Key encryption parameters are required");
             }
+            log.error("Key encryption parameters are required");
+            throw new EncryptionException("Key encryption parameters are required");
         }
         final Key key = CredentialSupport.extractEncryptionKey(kekParams.getEncryptionCredential());
         if (key == null) {
@@ -692,10 +689,9 @@ public class Encrypter {
         if (kekParamsList == null || kekParamsList.isEmpty()) {
             if (allowEmpty) {
                 return;
-            } else {
-                log.error("Key encryption parameters list may not be empty");
-                throw new EncryptionException("Key encryption parameters list may not be empty");
             }
+            log.error("Key encryption parameters list may not be empty");
+            throw new EncryptionException("Key encryption parameters list may not be empty");
         }
         for (final KeyEncryptionParameters kekParams : kekParamsList) {
             checkParams(kekParams, false);
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoCriterion.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoCriterion.java
index 53ca4cd..c6aa003 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoCriterion.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoCriterion.java
@@ -75,9 +75,8 @@ public final class KeyInfoCriterion implements Criterion {
     public int hashCode() {
         if (keyInfo != null) {
             return keyInfo.hashCode();
-        } else {
-            return super.hashCode();
         }
+        return super.hashCode();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
index a3fd43b..86568b9 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
@@ -128,10 +128,9 @@ public class KeyInfoSupport {
     public static void addKeyName(@Nonnull final KeyInfo keyInfo, @Nullable final String keyNameValue) {
         Constraint.isNotNull(keyInfo, "KeyInfo cannot be null");
 
-        final XMLObjectBuilder<KeyName> keyNameBuilder = (XMLObjectBuilder<KeyName>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(KeyName.DEFAULT_ELEMENT_NAME);
-        final KeyName keyName = Constraint.isNotNull(keyNameBuilder, "KeyName builder not available").buildObject(
-                KeyName.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<KeyName> keyNameBuilder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(KeyName.DEFAULT_ELEMENT_NAME);
+        final KeyName keyName = keyNameBuilder.buildObject(KeyName.DEFAULT_ELEMENT_NAME);
         keyName.setValue(keyNameValue);
         keyInfo.getKeyNames().add(keyName);
     }
@@ -300,10 +299,10 @@ public class KeyInfoSupport {
         
         final X509Data x509Data;
         if (keyInfo.getX509Datas().size() == 0) {
-            final XMLObjectBuilder<X509Data> x509DataBuilder = (XMLObjectBuilder<X509Data>)
-                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(X509Data.DEFAULT_ELEMENT_NAME);
-            x509Data = Constraint.isNotNull(x509DataBuilder, "X509Data builder not available").buildObject(
-                    X509Data.DEFAULT_ELEMENT_NAME);
+            final XMLObjectBuilder<X509Data> x509DataBuilder =
+                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
+                            X509Data.DEFAULT_ELEMENT_NAME);
+            x509Data = x509DataBuilder.buildObject(X509Data.DEFAULT_ELEMENT_NAME);
             keyInfo.getX509Datas().add(x509Data);
         } else {
             x509Data = keyInfo.getX509Datas().get(0);
@@ -325,10 +324,10 @@ public class KeyInfoSupport {
         
         final X509Data x509Data;
         if (keyInfo.getX509Datas().size() == 0) {
-            final XMLObjectBuilder<X509Data> x509DataBuilder = (XMLObjectBuilder<X509Data>)
-                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(X509Data.DEFAULT_ELEMENT_NAME);
-            x509Data = Constraint.isNotNull(x509DataBuilder, "X509Data builder not available").buildObject(
-                    X509Data.DEFAULT_ELEMENT_NAME);
+            final XMLObjectBuilder<X509Data> x509DataBuilder =
+                    XMLObjectProviderRegistrySupport.getBuilderFactory().<X509Data>getBuilderOrThrow(
+                            X509Data.DEFAULT_ELEMENT_NAME);
+            x509Data = x509DataBuilder.buildObject(X509Data.DEFAULT_ELEMENT_NAME);
             keyInfo.getX509Datas().add(x509Data);
         } else {
             x509Data = keyInfo.getX509Datas().get(0);
@@ -351,12 +350,10 @@ public class KeyInfoSupport {
         Constraint.isNotNull(cert, "X.509 certificate cannot be null");
         
         final XMLObjectBuilder<org.opensaml.xmlsec.signature.X509Certificate> xmlCertBuilder =
-                (XMLObjectBuilder<org.opensaml.xmlsec.signature.X509Certificate>)
-                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
-                        org.opensaml.xmlsec.signature.X509Certificate.DEFAULT_ELEMENT_NAME);
+                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
+                            org.opensaml.xmlsec.signature.X509Certificate.DEFAULT_ELEMENT_NAME);
         final org.opensaml.xmlsec.signature.X509Certificate xmlCert =
-                Constraint.isNotNull(xmlCertBuilder, "X509Certificate builder not available").buildObject(
-                        org.opensaml.xmlsec.signature.X509Certificate.DEFAULT_ELEMENT_NAME);
+                xmlCertBuilder.buildObject(org.opensaml.xmlsec.signature.X509Certificate.DEFAULT_ELEMENT_NAME);
         xmlCert.setValue(Base64Support.encode(cert.getEncoded(), Base64Support.CHUNKED));
 
         return xmlCert;
@@ -375,12 +372,10 @@ public class KeyInfoSupport {
         Constraint.isNotNull(crl, "X.509 CRL cannot be null");
         
         final XMLObjectBuilder<org.opensaml.xmlsec.signature.X509CRL> xmlCRLBuilder =
-                (XMLObjectBuilder<org.opensaml.xmlsec.signature.X509CRL>)
-                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
-                        org.opensaml.xmlsec.signature.X509CRL.DEFAULT_ELEMENT_NAME);
+                    XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
+                            org.opensaml.xmlsec.signature.X509CRL.DEFAULT_ELEMENT_NAME);
         final org.opensaml.xmlsec.signature.X509CRL xmlCRL =
-                Constraint.isNotNull(xmlCRLBuilder, "X509Certificate builder not available").buildObject(
-                        org.opensaml.xmlsec.signature.X509CRL.DEFAULT_ELEMENT_NAME);
+                xmlCRLBuilder.buildObject(org.opensaml.xmlsec.signature.X509CRL.DEFAULT_ELEMENT_NAME);
         xmlCRL.setValue(Base64Support.encode(crl.getEncoded(), Base64Support.CHUNKED));
 
         return xmlCRL;
@@ -393,11 +388,10 @@ public class KeyInfoSupport {
      * @return the new X509SubjectName
      */
     @Nonnull public static X509SubjectName buildX509SubjectName(@Nullable final String subjectName) {
-        final XMLObjectBuilder<X509SubjectName> xmlSubjectNameBuilder = (XMLObjectBuilder<X509SubjectName>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(X509SubjectName.DEFAULT_ELEMENT_NAME);
-        final X509SubjectName xmlSubjectName =
-                Constraint.isNotNull(xmlSubjectNameBuilder, "X509SubjectName builder not available").buildObject(
+        final XMLObjectBuilder<X509SubjectName> xmlSubjectNameBuilder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
                         X509SubjectName.DEFAULT_ELEMENT_NAME);
+        final X509SubjectName xmlSubjectName = xmlSubjectNameBuilder.buildObject(X509SubjectName.DEFAULT_ELEMENT_NAME);
         xmlSubjectName.setValue(subjectName);
         return xmlSubjectName;
     }
@@ -413,25 +407,21 @@ public class KeyInfoSupport {
             @Nullable final BigInteger serialNumber) {
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
         
-        final XMLObjectBuilder<X509IssuerName> xmlIssuerNameBuilder = (XMLObjectBuilder<X509IssuerName>)
-                builderFactory.getBuilder(X509IssuerName.DEFAULT_ELEMENT_NAME);
-        final X509IssuerName xmlIssuerName =
-                Constraint.isNotNull(xmlIssuerNameBuilder, "X509IssuerName builder not available").buildObject(
-                        X509IssuerName.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<X509IssuerName> xmlIssuerNameBuilder =
+                builderFactory.getBuilderOrThrow(X509IssuerName.DEFAULT_ELEMENT_NAME);
+        final X509IssuerName xmlIssuerName = xmlIssuerNameBuilder.buildObject(X509IssuerName.DEFAULT_ELEMENT_NAME);
         xmlIssuerName.setValue(issuerName);
 
-        final XMLObjectBuilder<X509SerialNumber> xmlSerialNumberBuilder = (XMLObjectBuilder<X509SerialNumber>)
-                builderFactory.getBuilder(X509SerialNumber.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<X509SerialNumber> xmlSerialNumberBuilder =
+                builderFactory.getBuilderOrThrow(X509SerialNumber.DEFAULT_ELEMENT_NAME);
         final X509SerialNumber xmlSerialNumber =
-                Constraint.isNotNull(xmlSerialNumberBuilder, "X509SerialNumber builder not available").buildObject(
-                        X509SerialNumber.DEFAULT_ELEMENT_NAME);
+                xmlSerialNumberBuilder.buildObject(X509SerialNumber.DEFAULT_ELEMENT_NAME);
         xmlSerialNumber.setValue(serialNumber);
 
-        final XMLObjectBuilder<X509IssuerSerial> xmlIssuerSerialBuilder = (XMLObjectBuilder<X509IssuerSerial>)
-                builderFactory.getBuilder(X509IssuerSerial.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<X509IssuerSerial> xmlIssuerSerialBuilder =
+                builderFactory.getBuilderOrThrow(X509IssuerSerial.DEFAULT_ELEMENT_NAME);
         final X509IssuerSerial xmlIssuerSerial =
-                Constraint.isNotNull(xmlIssuerSerialBuilder, "X509IssuerSerial builder not available").buildObject(
-                        X509IssuerSerial.DEFAULT_ELEMENT_NAME);
+                xmlIssuerSerialBuilder.buildObject(X509IssuerSerial.DEFAULT_ELEMENT_NAME);
         xmlIssuerSerial.setX509IssuerName(xmlIssuerName);
         xmlIssuerSerial.setX509SerialNumber(xmlSerialNumber);
 
@@ -450,10 +440,9 @@ public class KeyInfoSupport {
             return null;
         }
 
-        final XMLObjectBuilder<X509SKI> xmlSKIBuilder = (XMLObjectBuilder<X509SKI>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(X509SKI.DEFAULT_ELEMENT_NAME);
-        final X509SKI xmlSKI = Constraint.isNotNull(xmlSKIBuilder, "X509SKI builder not available").buildObject(
-                X509SKI.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<X509SKI> xmlSKIBuilder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(X509SKI.DEFAULT_ELEMENT_NAME);
+        final X509SKI xmlSKI = xmlSKIBuilder.buildObject(X509SKI.DEFAULT_ELEMENT_NAME);
         xmlSKI.setValue(Base64Support.encode(skiPlainValue, Base64Support.CHUNKED));
 
         return xmlSKI;
@@ -479,10 +468,9 @@ public class KeyInfoSupport {
         final MessageDigest md = MessageDigest.getInstance(jceAlg);
         final byte[] hash = md.digest(javaCert.getEncoded());
         
-        final XMLObjectBuilder<X509Digest> builder = (XMLObjectBuilder<X509Digest>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(X509Digest.DEFAULT_ELEMENT_NAME);
-        final X509Digest xmlDigest = Constraint.isNotNull(builder, "X509Digest builder not available").buildObject(
-                X509Digest.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<X509Digest> builder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(X509Digest.DEFAULT_ELEMENT_NAME);
+        final X509Digest xmlDigest = builder.buildObject(X509Digest.DEFAULT_ELEMENT_NAME);
         xmlDigest.setAlgorithm(algorithmURI);
         xmlDigest.setValue(Base64Support.encode(hash, Base64Support.CHUNKED));
         
@@ -502,10 +490,9 @@ public class KeyInfoSupport {
     public static void addPublicKey(@Nonnull final KeyInfo keyInfo, @Nullable final PublicKey pk) {
         Constraint.isNotNull(keyInfo, "KeyInfo cannot be null");
         
-        final XMLObjectBuilder<KeyValue> keyValueBuilder = (XMLObjectBuilder<KeyValue>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(KeyValue.DEFAULT_ELEMENT_NAME);
-        final KeyValue keyValue = Constraint.isNotNull(keyValueBuilder, "KeyValue builder not available").buildObject(
-                KeyValue.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<KeyValue> keyValueBuilder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(KeyValue.DEFAULT_ELEMENT_NAME);
+        final KeyValue keyValue = keyValueBuilder.buildObject(KeyValue.DEFAULT_ELEMENT_NAME);
 
         // TODO handle ECKeyValue
         
@@ -531,21 +518,16 @@ public class KeyInfoSupport {
         
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
         
-        final XMLObjectBuilder<RSAKeyValue> rsaKeyValueBuilder = (XMLObjectBuilder<RSAKeyValue>)
-                builderFactory.getBuilder(RSAKeyValue.DEFAULT_ELEMENT_NAME);
-        final RSAKeyValue rsaKeyValue =
-                Constraint.isNotNull(rsaKeyValueBuilder, "RSAKeyValue builder not available").buildObject(
-                        RSAKeyValue.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<RSAKeyValue> rsaKeyValueBuilder =
+                builderFactory.getBuilderOrThrow(RSAKeyValue.DEFAULT_ELEMENT_NAME);
+        final RSAKeyValue rsaKeyValue = rsaKeyValueBuilder.buildObject(RSAKeyValue.DEFAULT_ELEMENT_NAME);
         
-        final XMLObjectBuilder<Modulus> modulusBuilder = (XMLObjectBuilder<Modulus>)
-                builderFactory.getBuilder(Modulus.DEFAULT_ELEMENT_NAME);
-        final Modulus modulus = Constraint.isNotNull(modulusBuilder, "Modulus builder not available").buildObject(
-                Modulus.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<Modulus> modulusBuilder = builderFactory.getBuilderOrThrow(Modulus.DEFAULT_ELEMENT_NAME);
+        final Modulus modulus = modulusBuilder.buildObject(Modulus.DEFAULT_ELEMENT_NAME);
         
-        final XMLObjectBuilder<Exponent> exponentBuilder = (XMLObjectBuilder<Exponent>)
-                builderFactory.getBuilder(Exponent.DEFAULT_ELEMENT_NAME);
-        final Exponent exponent = Constraint.isNotNull(exponentBuilder, "Exponent builder not available").buildObject(
-                Exponent.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<Exponent> exponentBuilder =
+                builderFactory.getBuilderOrThrow(Exponent.DEFAULT_ELEMENT_NAME);
+        final Exponent exponent = exponentBuilder.buildObject(Exponent.DEFAULT_ELEMENT_NAME);
 
         modulus.setValueBigInt(rsaPubKey.getModulus());
         rsaKeyValue.setModulus(modulus);
@@ -567,21 +549,19 @@ public class KeyInfoSupport {
         
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
 
-        final XMLObjectBuilder<DSAKeyValue> dsaKeyValueBuilder = (XMLObjectBuilder<DSAKeyValue>)
-                builderFactory.getBuilder(DSAKeyValue.DEFAULT_ELEMENT_NAME);
-        final DSAKeyValue dsaKeyValue =
-                Constraint.isNotNull(dsaKeyValueBuilder, "DSAKeyValue builder not available").buildObject(
-                        DSAKeyValue.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<DSAKeyValue> dsaKeyValueBuilder =
+                builderFactory.getBuilderOrThrow(DSAKeyValue.DEFAULT_ELEMENT_NAME);
+        final DSAKeyValue dsaKeyValue = dsaKeyValueBuilder.buildObject(DSAKeyValue.DEFAULT_ELEMENT_NAME);
 
-        final XMLObjectBuilder<Y> yBuilder = (XMLObjectBuilder<Y>) builderFactory.getBuilder(Y.DEFAULT_ELEMENT_NAME);
-        final XMLObjectBuilder<G> gBuilder = (XMLObjectBuilder<G>) builderFactory.getBuilder(G.DEFAULT_ELEMENT_NAME);
-        final XMLObjectBuilder<P> pBuilder = (XMLObjectBuilder<P>) builderFactory.getBuilder(P.DEFAULT_ELEMENT_NAME);
-        final XMLObjectBuilder<Q> qBuilder = (XMLObjectBuilder<Q>) builderFactory.getBuilder(Q.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<Y> yBuilder = builderFactory.getBuilderOrThrow(Y.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<G> gBuilder = builderFactory.getBuilderOrThrow(G.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<P> pBuilder = builderFactory.getBuilderOrThrow(P.DEFAULT_ELEMENT_NAME);
+        final XMLObjectBuilder<Q> qBuilder = builderFactory.getBuilderOrThrow(Q.DEFAULT_ELEMENT_NAME);
         
-        final Y y = Constraint.isNotNull(yBuilder, "Y builder not available").buildObject(Y.DEFAULT_ELEMENT_NAME);
-        final G g = Constraint.isNotNull(gBuilder, "G builder not available").buildObject(G.DEFAULT_ELEMENT_NAME);
-        final P p = Constraint.isNotNull(pBuilder, "P builder not available").buildObject(P.DEFAULT_ELEMENT_NAME);
-        final Q q = Constraint.isNotNull(qBuilder, "Q builder not available").buildObject(Q.DEFAULT_ELEMENT_NAME);
+        final Y y = yBuilder.buildObject(Y.DEFAULT_ELEMENT_NAME);
+        final G g = gBuilder.buildObject(G.DEFAULT_ELEMENT_NAME);
+        final P p = pBuilder.buildObject(P.DEFAULT_ELEMENT_NAME);
+        final Q q = qBuilder.buildObject(Q.DEFAULT_ELEMENT_NAME);
 
         y.setValueBigInt(dsaPubKey.getY());
         dsaKeyValue.setY(y);
@@ -612,11 +592,10 @@ public class KeyInfoSupport {
         Constraint.isNotNull(keyInfo, "KeyInfo cannot be null");
         Constraint.isNotNull(pk, "Public key cannot be null");
         
-        final XMLObjectBuilder<DEREncodedKeyValue> builder = (XMLObjectBuilder<DEREncodedKeyValue>)
-                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+        final XMLObjectBuilder<DEREncodedKeyValue> builder =
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
                         DEREncodedKeyValue.DEFAULT_ELEMENT_NAME);
-        final DEREncodedKeyValue keyValue = Constraint.isNotNull(builder,
-                "DEREncodedKeyValue builder not available").buildObject(DEREncodedKeyValue.DEFAULT_ELEMENT_NAME);
+        final DEREncodedKeyValue keyValue = builder.buildObject(DEREncodedKeyValue.DEFAULT_ELEMENT_NAME);
         
         final KeyFactory keyFactory = KeyFactory.getInstance(pk.getAlgorithm());
         final X509EncodedKeySpec keySpec = keyFactory.getKeySpec(pk, X509EncodedKeySpec.class);
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/support/SignatureSupport.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/support/SignatureSupport.java
index 1214280..bad5b49 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/support/SignatureSupport.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/support/SignatureSupport.java
@@ -263,9 +263,8 @@ public final class SignatureSupport {
         final String trimmed = StringSupport.trimOrNull(uri);
         if (trimmed == null) {
             return false;
-        } else {
-            return C14N_ALGORITHMS.contains(trimmed);
         }
+        return C14N_ALGORITHMS.contains(trimmed);
     }
     
     /**
@@ -285,7 +284,7 @@ public final class SignatureSupport {
         Constraint.isNotNull(parameters, "Signature signing parameters cannot be null");
 
         final XMLObjectBuilder<Signature> signatureBuilder =
-                (XMLObjectBuilder<Signature>) XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilder(
+                XMLObjectProviderRegistrySupport.getBuilderFactory().getBuilderOrThrow(
                         Signature.DEFAULT_ELEMENT_NAME);
         final Signature signature = signatureBuilder.buildObject(Signature.DEFAULT_ELEMENT_NAME);
 
diff --git a/opensaml-xmlsec-api/src/test/java/org/opensaml/xmlsec/crypto/XMLSigningUtilTest.java b/opensaml-xmlsec-api/src/test/java/org/opensaml/xmlsec/crypto/XMLSigningUtilTest.java
index 202cbd6..f5b143c 100644
--- a/opensaml-xmlsec-api/src/test/java/org/opensaml/xmlsec/crypto/XMLSigningUtilTest.java
+++ b/opensaml-xmlsec-api/src/test/java/org/opensaml/xmlsec/crypto/XMLSigningUtilTest.java
@@ -135,18 +135,18 @@ public class XMLSigningUtilTest extends OpenSAMLInitBaseTestCase {
         
     }
     
-    private byte[] getControlSignature(byte[] data, SecretKey secretKey, String algorithm) 
+    private byte[] getControlSignature(byte[] data1, SecretKey secretKey, String algorithm) 
             throws NoSuchAlgorithmException, InvalidKeyException {
         Mac mac = Mac.getInstance(algorithm);
         mac.init(secretKeyAES128);
-        return mac.doFinal(data);
+        return mac.doFinal(data1);
     }
 
-    private byte[] getControlSignature(byte[] data, PrivateKey privateKey, String algorithm) 
+    private byte[] getControlSignature(byte[] data1, PrivateKey privateKey, String algorithm) 
             throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
         Signature sig = Signature.getInstance(algorithm);
         sig.initSign(privateKey);
-        sig.update(data);
+        sig.update(data1);
         return sig.sign();
     }
 }
diff --git a/opensaml-xmlsec-impl/.settings/org.eclipse.jdt.core.prefs b/opensaml-xmlsec-impl/.settings/org.eclipse.jdt.core.prefs
index 6063eee..7fa508c 100644
--- a/opensaml-xmlsec-impl/.settings/org.eclipse.jdt.core.prefs
+++ b/opensaml-xmlsec-impl/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=ignore
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
 org.eclipse.jdt.core.codeComplete.fieldPrefixes=
@@ -10,22 +19,38 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=info
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -33,45 +58,79 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=info
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=info
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=11
@@ -350,3 +409,5 @@ org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodImpl.java
index 0ff0033..06d65cc 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodImpl.java
@@ -49,7 +49,7 @@ public class AgreementMethodImpl extends AbstractXMLObject implements AgreementM
     private RecipientKeyInfo recipientKeyInfo;
     
     /** List of wildcard <any> XMLObject children. */
-    private IndexedXMLObjectChildrenList xmlChildren;
+    private IndexedXMLObjectChildrenList<XMLObject> xmlChildren;
 
     /**
      * Constructor.
@@ -61,17 +61,17 @@ public class AgreementMethodImpl extends AbstractXMLObject implements AgreementM
     protected AgreementMethodImpl(final String namespaceURI, final String elementLocalName,
             final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        xmlChildren = new IndexedXMLObjectChildrenList(this);
+        xmlChildren = new IndexedXMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public String getAlgorithm() {
-        return this.algorithm;
+        return algorithm;
     }
 
     /** {@inheritDoc} */
     public void setAlgorithm(final String newAlgorithm) {
-        this.algorithm = prepareForAssignment(this.algorithm, newAlgorithm);
+        algorithm = prepareForAssignment(algorithm, newAlgorithm);
     }
 
     /** {@inheritDoc} */
@@ -81,36 +81,36 @@ public class AgreementMethodImpl extends AbstractXMLObject implements AgreementM
 
     /** {@inheritDoc} */
     public void setKANonce(final KANonce newKANonce) {
-        this.kaNonce = prepareForAssignment(this.kaNonce, newKANonce);
+        kaNonce = prepareForAssignment(kaNonce, newKANonce);
     }
 
     /** {@inheritDoc} */
     public OriginatorKeyInfo getOriginatorKeyInfo() {
-        return this.originatorKeyInfo;
+        return originatorKeyInfo;
     }
 
     /** {@inheritDoc} */
     public void setOriginatorKeyInfo(final OriginatorKeyInfo newOriginatorKeyInfo) {
-        this.originatorKeyInfo = prepareForAssignment(this.originatorKeyInfo, newOriginatorKeyInfo);
+        originatorKeyInfo = prepareForAssignment(originatorKeyInfo, newOriginatorKeyInfo);
     }
 
     /** {@inheritDoc} */
     public RecipientKeyInfo getRecipientKeyInfo() {
-        return this.recipientKeyInfo;
+        return recipientKeyInfo;
     }
 
     /** {@inheritDoc} */
     public void setRecipientKeyInfo(final RecipientKeyInfo newRecipientKeyInfo) {
-        this.recipientKeyInfo = prepareForAssignment(this.recipientKeyInfo, newRecipientKeyInfo);
+        recipientKeyInfo = prepareForAssignment(recipientKeyInfo, newRecipientKeyInfo);
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects() {
-        return (List<XMLObject>) this.xmlChildren;
+        return xmlChildren;
     }
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects(final QName typeOrName) {
-        return (List<XMLObject>) this.xmlChildren.subList(typeOrName);
+        return (List<XMLObject>) xmlChildren.subList(typeOrName);
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionMethodImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionMethodImpl.java
index c0ff969..5711d06 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionMethodImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionMethodImpl.java
@@ -63,37 +63,37 @@ public class EncryptionMethodImpl extends AbstractXMLObject implements Encryptio
 
     /** {@inheritDoc} */
     public String getAlgorithm() {
-        return this.algorithm;
+        return algorithm;
     }
 
     /** {@inheritDoc} */
     public void setAlgorithm(final String newAlgorithm) {
-        this.algorithm = prepareForAssignment(this.algorithm, newAlgorithm);
+        algorithm = prepareForAssignment(algorithm, newAlgorithm);
     }
 
     /** {@inheritDoc} */
     public KeySize getKeySize() {
-        return this.keySize;
+        return keySize;
     }
 
     /** {@inheritDoc} */
     public void setKeySize(final KeySize newKeySize) {
-        this.keySize = prepareForAssignment(this.keySize, newKeySize);
+        keySize = prepareForAssignment(keySize, newKeySize);
     }
 
     /** {@inheritDoc} */
     public OAEPparams getOAEPparams() {
-        return this.oaepParams;
+        return oaepParams;
     }
 
     /** {@inheritDoc} */
     public void setOAEPparams(final OAEPparams newOAEPparams) {
-        this.oaepParams = prepareForAssignment(this.oaepParams, newOAEPparams);
+        oaepParams = prepareForAssignment(oaepParams, newOAEPparams);
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects() {
-        return this.unknownChildren;
+        return unknownChildren;
     }
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects(final QName typeOrName) {
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertiesImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertiesImpl.java
index d19dc82..03bf55b 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertiesImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertiesImpl.java
@@ -36,7 +36,7 @@ public class EncryptionPropertiesImpl extends AbstractXMLObject implements Encry
     private String id;
     
     /** EncryptionProperty child elements. */
-    private final XMLObjectChildrenList encryptionProperties;
+    private final XMLObjectChildrenList<EncryptionProperty> encryptionProperties;
 
     /**
      * Constructor.
@@ -48,7 +48,7 @@ public class EncryptionPropertiesImpl extends AbstractXMLObject implements Encry
     protected EncryptionPropertiesImpl(final String namespaceURI, final String elementLocalName,
             final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        encryptionProperties = new XMLObjectChildrenList<EncryptionProperty>(this);
+        encryptionProperties = new XMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
@@ -65,14 +65,14 @@ public class EncryptionPropertiesImpl extends AbstractXMLObject implements Encry
 
     /** {@inheritDoc} */
     public List<EncryptionProperty> getEncryptionProperties() {
-        return (List<EncryptionProperty>) encryptionProperties;
+        return encryptionProperties;
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<XMLObject>) encryptionProperties);
+        children.addAll(encryptionProperties);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertyImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertyImpl.java
index 79dc088..0971550 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertyImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/EncryptionPropertyImpl.java
@@ -41,7 +41,7 @@ public class EncryptionPropertyImpl extends AbstractXMLObject implements
     private String id;
     
     /** Child elements from the <any> content model. */
-    private final IndexedXMLObjectChildrenList unknownChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> unknownChildren;
     
     /** "anyAttribute" attributes. */
     private final AttributeMap unknownAttributes;
@@ -89,7 +89,7 @@ public class EncryptionPropertyImpl extends AbstractXMLObject implements
 
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects() {
-        return (List<XMLObject>) unknownChildren;
+        return unknownChildren;
     }
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects(final QName typeOrName) {
@@ -100,7 +100,7 @@ public class EncryptionPropertyImpl extends AbstractXMLObject implements
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<XMLObject>) unknownChildren);
+        children.addAll(unknownChildren);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ReferenceListImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ReferenceListImpl.java
index 923eb93..66d0077 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ReferenceListImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ReferenceListImpl.java
@@ -35,7 +35,7 @@ import org.opensaml.xmlsec.encryption.ReferenceType;
 public class ReferenceListImpl extends AbstractXMLObject implements ReferenceList {
     
     /** ReferenceType child elements. */
-    private final IndexedXMLObjectChildrenList indexedChildren;
+    private final IndexedXMLObjectChildrenList<ReferenceType> indexedChildren;
     
     /**
      * Constructor.
@@ -47,12 +47,12 @@ public class ReferenceListImpl extends AbstractXMLObject implements ReferenceLis
     protected ReferenceListImpl(final String namespaceURI, final String elementLocalName,
             final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        indexedChildren = new IndexedXMLObjectChildrenList<ReferenceType>(this);
+        indexedChildren = new IndexedXMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public List<ReferenceType> getReferences() {
-        return (List<ReferenceType>) indexedChildren;
+        return indexedChildren;
     }
 
     /** {@inheritDoc} */
@@ -69,7 +69,7 @@ public class ReferenceListImpl extends AbstractXMLObject implements ReferenceLis
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<XMLObject>) indexedChildren);
+        children.addAll(indexedChildren);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/TransformsImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/TransformsImpl.java
index f54b9c3..d4051d9 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/TransformsImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/TransformsImpl.java
@@ -33,7 +33,7 @@ import org.opensaml.xmlsec.signature.Transform;
 public class TransformsImpl extends AbstractXMLObject implements Transforms {
     
     /** Transform child elements. */
-    private final XMLObjectChildrenList transforms;
+    private final XMLObjectChildrenList<Transform> transforms;
 
     /**
      * Constructor.
@@ -44,19 +44,19 @@ public class TransformsImpl extends AbstractXMLObject implements Transforms {
      */
     protected TransformsImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        transforms = new XMLObjectChildrenList<Transform>(this);
+        transforms = new XMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public List<Transform> getTransforms() {
-        return (List<Transform>) this.transforms;
+        return this.transforms;
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<Transform>) transforms);
+        children.addAll(transforms);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicDecryptionParametersResolver.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicDecryptionParametersResolver.java
index 67fbcfd..cf9b4c4 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicDecryptionParametersResolver.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicDecryptionParametersResolver.java
@@ -58,9 +58,8 @@ public class BasicDecryptionParametersResolver extends AbstractSecurityParameter
         final DecryptionParameters params = resolveSingle(criteria);
         if (params != null) {
             return Collections.singletonList(params);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolver.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolver.java
index 2636748..50b395f 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolver.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolver.java
@@ -49,8 +49,6 @@ import com.google.common.collect.Collections2;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.PredicateSupport;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
@@ -132,9 +130,8 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
         final EncryptionParameters params = resolveSingle(criteria);
         if (params != null) {
             return Collections.singletonList(params);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /** {@inheritDoc} */
@@ -168,9 +165,8 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
         if (validate(params, encryptionOptional)) {
             logResult(params);
             return params;
-        } else {
-            return null;
         }
+        return null;
         
     }
 
@@ -219,24 +215,6 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
         }
     }
 
-    /**
-     * Validate that the {@link EncryptionParameters} instance has all the required properties populated.
-     * 
-     * <p>Equivalent to: {@link #validate(EncryptionParameters, boolean)} called with false</p>
-     * 
-     * @param params the parameters instance to evaluate
-     * 
-     * @return true if parameters instance passes validation, false otherwise
-     * 
-     * @deprecated use {@link #validate(EncryptionParameters, boolean)}.
-     */
-    @Deprecated
-    protected boolean validate(@Nonnull final EncryptionParameters params) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD, getClass().getName() + ".validate(EncryptionParameters)", 
-                null, "validate(EncryptionParameters, boolean)");
-        return validate(params, false);
-    }
-    
 // Checkstyle: CyclomaticComplexity OFF
     /**
      * Validate that the {@link EncryptionParameters} instance has all the required properties populated.
@@ -342,11 +320,10 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
                     params.setDataEncryptionCredential(dataEncryptionCredential);
                     params.setDataEncryptionAlgorithm(dataEncryptionAlgorithm);
                     break;
-                } else {
-                    log.debug("Unable to resolve data encryption algorithm for credential with key type '{}', " 
-                            + "considering other credentials", 
-                            CredentialSupport.extractEncryptionKey(dataEncryptionCredential).getAlgorithm());
                 }
+                log.debug("Unable to resolve data encryption algorithm for credential with key type '{}', " 
+                        + "considering other credentials", 
+                        CredentialSupport.extractEncryptionKey(dataEncryptionCredential).getAlgorithm());
             }
         }
         
@@ -361,11 +338,10 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
                 params.setKeyTransportEncryptionCredential(keyTransportCredential);
                 params.setKeyTransportEncryptionAlgorithm(keyTransportAlgorithm);
                 break;
-            } else {
-                log.debug("Unable to resolve key transport algorithm for credential with key type '{}', " 
-                        + "considering other credentials", 
-                        CredentialSupport.extractEncryptionKey(keyTransportCredential).getAlgorithm());
             }
+            log.debug("Unable to resolve key transport algorithm for credential with key type '{}', " 
+                    + "considering other credentials", 
+                    CredentialSupport.extractEncryptionKey(keyTransportCredential).getAlgorithm());
         }
         
         resolveAndPopulateRSAOAEPParams(params, criteria, whitelistBlacklistPredicate);
@@ -546,9 +522,8 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
             log.trace("Data encryption credential was null, selecting algorithm based on effective algorithms alone");
             if (!dataEncryptionAlgorithms.isEmpty()) {
                 return dataEncryptionAlgorithms.get(0);
-            } else {
-                return null;
             }
+            return null;
         }
         
         for (final String algorithm : dataEncryptionAlgorithms) {
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningParametersResolver.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningParametersResolver.java
index ff7fbb9..2701e9e 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningParametersResolver.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningParametersResolver.java
@@ -103,9 +103,8 @@ public class BasicSignatureSigningParametersResolver
         final SignatureSigningParameters params = resolveSingle(criteria);
         if (params != null) {
             return Collections.singletonList(params);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /** {@inheritDoc} */
@@ -135,9 +134,8 @@ public class BasicSignatureSigningParametersResolver
         if (validate(params)) {
             logResult(params);
             return params;
-        } else {
-            return null;
         }
+        return null;
     }
     
     /**
@@ -236,9 +234,8 @@ public class BasicSignatureSigningParametersResolver
                     params.setSigningCredential(credential);
                     params.setSignatureAlgorithm(algorithm);
                     return;
-                } else {
-                    log.trace("Credential failed eval against algorithm: {}", algorithm);
                 }
+                log.trace("Credential failed eval against algorithm: {}", algorithm);
             }
         }
         
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureValidationParametersResolver.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureValidationParametersResolver.java
index e77e0af..851ab43 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureValidationParametersResolver.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureValidationParametersResolver.java
@@ -58,9 +58,8 @@ public class BasicSignatureValidationParametersResolver
         final SignatureValidationParameters params = resolveSingle(criteria);
         if (params != null) {
             return Collections.singletonList(params);
-        } else {
-            return Collections.emptyList();
         }
+        return Collections.emptyList();
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/BasicKeyInfoGeneratorFactory.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/BasicKeyInfoGeneratorFactory.java
index 8c45b1a..fd1e325 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/BasicKeyInfoGeneratorFactory.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/BasicKeyInfoGeneratorFactory.java
@@ -206,9 +206,8 @@ public class BasicKeyInfoGeneratorFactory implements KeyInfoGeneratorFactory {
             final List<XMLObject> children = keyInfo.getOrderedChildren();
             if (children != null && children.size() > 0) {
                 return keyInfo;
-            } else {
-                return null;
             }
+            return null;
         }
         
         /** Process the values of {@link Credential#getKeyNames()}.
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/StaticKeyInfoGenerator.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/StaticKeyInfoGenerator.java
index aa0d778..49a9d48 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/StaticKeyInfoGenerator.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/StaticKeyInfoGenerator.java
@@ -71,9 +71,8 @@ public class StaticKeyInfoGenerator implements KeyInfoGenerator {
     @Nonnull public KeyInfo generate(@Nullable final Credential credential) throws SecurityException {
         if (keyInfo.getParent() == null) {
             return keyInfo;
-        } else {
-            return clone(keyInfo);
         }
+        return clone(keyInfo);
     }
     
     /**
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/X509KeyInfoGeneratorFactory.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/X509KeyInfoGeneratorFactory.java
index 6eb9369..bb5eb60 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/X509KeyInfoGeneratorFactory.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/X509KeyInfoGeneratorFactory.java
@@ -447,9 +447,8 @@ public class X509KeyInfoGeneratorFactory extends BasicKeyInfoGeneratorFactory {
             final List<XMLObject> keyInfoChildren = keyInfo.getOrderedChildren();
             if (keyInfoChildren != null && keyInfoChildren.size() > 0) {
                 return keyInfo;
-            } else {
-                return null;
             }
+            return null;
         }
         
         /** Process the value of {@link X509Credential#getEntityCertificate()}.
@@ -668,7 +667,7 @@ public class X509KeyInfoGeneratorFactory extends BasicKeyInfoGeneratorFactory {
             if (options.emitSubjectAltNamesAsKeyNames && options.subjectAltNames.size() > 0) {
                 final Integer[] nameTypes = new Integer[ options.subjectAltNames.size() ];
                 options.subjectAltNames.toArray(nameTypes);
-                final List altnames = X509Support.getAltNames(cert, nameTypes);
+                final List<?> altnames = X509Support.getAltNames(cert, nameTypes);
                 if (altnames != null) {
                     for (final Object altNameValue : altnames) {
                         // Each returned value should either be a String or a DER-encoded byte array.
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/AbstractKeyInfoProvider.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/AbstractKeyInfoProvider.java
index a35af6c..ef99d01 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/AbstractKeyInfoProvider.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/AbstractKeyInfoProvider.java
@@ -68,9 +68,8 @@ public abstract class AbstractKeyInfoProvider implements KeyInfoProvider {
         // Just want to provide a single place to build credential contexts for a provider.
         if (kiContext != null) {
             return new KeyInfoCredentialContext(kiContext.getKeyInfo());
-        } else {
-            return null;
         }
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/KeyInfoReferenceProvider.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/KeyInfoReferenceProvider.java
index 83b5754..506c756 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/KeyInfoReferenceProvider.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/keyinfo/impl/provider/KeyInfoReferenceProvider.java
@@ -118,9 +118,8 @@ public class KeyInfoReferenceProvider extends AbstractKeyInfoProvider {
             final String uri = ref.getURI();
             if (uri != null && uri.startsWith("#")) {
                 return ref;
-            } else {
-                log.debug("KeyInfoReference did not contain a same-document URI reference, cannot handle");
             }
+            log.debug("KeyInfoReference did not contain a same-document URI reference, cannot handle");
         }
         return null;
     }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
index a933702..5eee0b8 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandler.java
@@ -117,7 +117,7 @@ public class PopulateSignatureValidationParametersHandler extends AbstractMessag
         if (resolver == null) {
             throw new ComponentInitializationException("SignatureValidationParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<MessageContext,List<SignatureValidationConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<SignatureValidationConfiguration> apply(final MessageContext input) {
                     return Collections.singletonList(
                             SecurityConfigurationSupport.getGlobalSignatureValidationConfiguration());
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/KeyInfoImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/KeyInfoImpl.java
index 5eb2af4..d6f837c 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/KeyInfoImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/KeyInfoImpl.java
@@ -45,7 +45,7 @@ import org.opensaml.xmlsec.signature.X509Data;
 public class KeyInfoImpl extends AbstractXMLObject implements KeyInfo {
     
     /** The list of XMLObject child elements. */
-    private final IndexedXMLObjectChildrenList indexedChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
     
     /** The Id attribute value. */
     private String id;
@@ -59,7 +59,7 @@ public class KeyInfoImpl extends AbstractXMLObject implements KeyInfo {
      */
     protected KeyInfoImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        indexedChildren = new IndexedXMLObjectChildrenList(this);
+        indexedChildren = new IndexedXMLObjectChildrenList<>(this);
     }
     
     /** {@inheritDoc} */
@@ -76,7 +76,7 @@ public class KeyInfoImpl extends AbstractXMLObject implements KeyInfo {
 
     /** {@inheritDoc} */
     public List<XMLObject> getXMLObjects() {
-        return (List<XMLObject>) indexedChildren;
+        return indexedChildren;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/PGPDataImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/PGPDataImpl.java
index 56e2e34..11703cd 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/PGPDataImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/PGPDataImpl.java
@@ -42,7 +42,7 @@ public class PGPDataImpl extends AbstractXMLObject implements PGPData {
     private PGPKeyPacket pgpKeyPacket;
     
     /** List of <any> wildcard XMLObject children. */
-    private final IndexedXMLObjectChildrenList xmlChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> xmlChildren;
 
     /**
      * Constructor.
@@ -53,7 +53,7 @@ public class PGPDataImpl extends AbstractXMLObject implements PGPData {
      */
     protected PGPDataImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        xmlChildren = new IndexedXMLObjectChildrenList(this);
+        xmlChildren = new IndexedXMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
@@ -78,7 +78,7 @@ public class PGPDataImpl extends AbstractXMLObject implements PGPData {
 
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects() {
-        return (List<XMLObject>) xmlChildren;
+        return xmlChildren;
     }
     /** {@inheritDoc} */
     public List<XMLObject> getUnknownXMLObjects(final QName typeOrName) {
@@ -95,7 +95,7 @@ public class PGPDataImpl extends AbstractXMLObject implements PGPData {
         if (pgpKeyPacket != null) {
             children.add(pgpKeyPacket);
         }
-        children.addAll((List<XMLObject>) xmlChildren);
+        children.addAll(xmlChildren);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/SPKIDataImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/SPKIDataImpl.java
index c60e300..467271d 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/SPKIDataImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/SPKIDataImpl.java
@@ -35,7 +35,7 @@ import org.opensaml.xmlsec.signature.SPKISexp;
 public class SPKIDataImpl extends AbstractXMLObject implements SPKIData {
     
     /** The list of XMLObject child elements. */
-    private final IndexedXMLObjectChildrenList indexedChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
 
     /**
      * Constructor.
@@ -46,12 +46,12 @@ public class SPKIDataImpl extends AbstractXMLObject implements SPKIData {
      */
     protected SPKIDataImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        indexedChildren = new IndexedXMLObjectChildrenList(this);
+        indexedChildren = new IndexedXMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getXMLObjects() {
-        return (List<XMLObject>) this.indexedChildren;
+        return this.indexedChildren;
     }
 
     /** {@inheritDoc} */
@@ -68,7 +68,7 @@ public class SPKIDataImpl extends AbstractXMLObject implements SPKIData {
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<XMLObject>) indexedChildren);
+        children.addAll(indexedChildren);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformImpl.java
index fa1b8ce..133471a 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformImpl.java
@@ -38,7 +38,7 @@ public class TransformImpl extends AbstractXMLObject implements Transform {
     private String algorithm;
     
     /** "any" children. */
-    private final IndexedXMLObjectChildrenList indexedChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
 
     /**
      * Constructor.
@@ -64,7 +64,7 @@ public class TransformImpl extends AbstractXMLObject implements Transform {
 
     /** {@inheritDoc} */
     public List<XMLObject> getAllChildren() {
-        return (List<XMLObject>) indexedChildren ;
+        return indexedChildren ;
     }
 
     /** {@inheritDoc} */
@@ -81,7 +81,7 @@ public class TransformImpl extends AbstractXMLObject implements Transform {
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<XMLObject>) indexedChildren);
+        children.addAll(indexedChildren);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformsImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformsImpl.java
index effc9bf..739d7db 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformsImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/TransformsImpl.java
@@ -33,7 +33,7 @@ import org.opensaml.xmlsec.signature.Transforms;
 public class TransformsImpl extends AbstractXMLObject implements Transforms {
     
     /** Transform children. */
-    private final XMLObjectChildrenList transforms;
+    private final XMLObjectChildrenList<Transform> transforms;
 
     /**
      * Constructor.
@@ -44,19 +44,19 @@ public class TransformsImpl extends AbstractXMLObject implements Transforms {
      */
     protected TransformsImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        transforms = new XMLObjectChildrenList<Transform>(this);
+        transforms = new XMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public List<Transform> getTransforms() {
-        return (List<Transform>) this.transforms;
+        return this.transforms;
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
         
-        children.addAll((List<Transform>) transforms);
+        children.addAll(transforms);
         
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/X509DataImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/X509DataImpl.java
index 79152be..e03ce43 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/X509DataImpl.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/impl/X509DataImpl.java
@@ -38,7 +38,7 @@ import org.opensaml.xmlsec.signature.X509SubjectName;
 public class X509DataImpl extends AbstractXMLObject implements X509Data {
 
     /** The list of XMLObject child elements. */
-    private final IndexedXMLObjectChildrenList indexedChildren;
+    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
 
     /**
      * Constructor.
@@ -49,12 +49,12 @@ public class X509DataImpl extends AbstractXMLObject implements X509Data {
      */
     protected X509DataImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
-        indexedChildren = new IndexedXMLObjectChildrenList(this);
+        indexedChildren = new IndexedXMLObjectChildrenList<>(this);
     }
 
     /** {@inheritDoc} */
     public List<XMLObject> getXMLObjects() {
-        return (List<XMLObject>) indexedChildren;
+        return indexedChildren;
     }
 
     /** {@inheritDoc} */
@@ -96,7 +96,7 @@ public class X509DataImpl extends AbstractXMLObject implements X509Data {
     public List<XMLObject> getOrderedChildren() {
         final ArrayList<XMLObject> children = new ArrayList<>();
 
-        children.addAll((List<XMLObject>) indexedChildren);
+        children.addAll(indexedChildren);
 
         if (children.size() == 0) {
             return null;
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/BaseSignatureTrustEngine.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/BaseSignatureTrustEngine.java
index d9acdcb..335664d 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/BaseSignatureTrustEngine.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/BaseSignatureTrustEngine.java
@@ -201,9 +201,8 @@ public abstract class BaseSignatureTrustEngine<TrustBasisType> implements Signat
                         if (evaluateTrust(kiCred, trustBasis)) {
                             log.debug("Successfully established trust of KeyInfo-derived credential");
                             return true;
-                        } else {
-                            log.debug("Failed to establish trust of KeyInfo-derived credential");
                         }
+                        log.debug("Failed to establish trust of KeyInfo-derived credential");
                     }
                 }
             } catch (final ResolverException e) {
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ExplicitKeySignatureTrustEngine.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ExplicitKeySignatureTrustEngine.java
index ae5fc14..688b379 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ExplicitKeySignatureTrustEngine.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/ExplicitKeySignatureTrustEngine.java
@@ -158,9 +158,8 @@ public class ExplicitKeySignatureTrustEngine extends BaseSignatureTrustEngine<It
                     if (evaluateTrust(candidateCredential, trustedCredentials)) {
                         log.debug("Successfully established trust of supplied candidate credential");
                         return true;
-                    } else {
-                        log.debug("Failed to establish trust of supplied candidate credential");
                     }
+                    log.debug("Failed to establish trust of supplied candidate credential");
                 }
             } catch (final SecurityException e) {
                 // Java 7 now throws this exception under conditions such as mismatched key sizes.
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngine.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngine.java
index 03d1e20..6e221ec 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngine.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngine.java
@@ -188,9 +188,8 @@ public class PKIXSignatureTrustEngine extends
                 if (evaluateTrust(candidateCredential, validationPair)) {
                     log.debug("Successfully established trust of supplied candidate credential");
                     return true;
-                } else {
-                    log.debug("Failed to establish trust of supplied candidate credential");
                 }
+                log.debug("Failed to establish trust of supplied candidate credential");
             } else {
                 log.debug("Cryptographic verification of raw signature failed with candidate credential");
             }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/SignatureAlgorithmValidator.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/SignatureAlgorithmValidator.java
index 4fe009c..951d70a 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/SignatureAlgorithmValidator.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/signature/support/impl/SignatureAlgorithmValidator.java
@@ -152,9 +152,8 @@ public class SignatureAlgorithmValidator {
                 AttributeSupport.getAttributeValue(signatureMethod, null, ATTR_NAME_ALGORTHM));
         if (signatureMethodAlgorithm != null) {
             return signatureMethodAlgorithm;
-        } else {
-            throw new SignatureException("SignatureMethod Algorithm was null");
         }
+        throw new SignatureException("SignatureMethod Algorithm was null");
     }
 
     
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodTest.java
index 79e55a9..df6e4a2 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/AgreementMethodTest.java
@@ -94,8 +94,8 @@ public class AgreementMethodTest extends XMLObjectProviderBaseTestCase {
         
         am.setAlgorithm(expectedAlgorithm);
         am.setKANonce((KANonce) buildXMLObject(KANonce.DEFAULT_ELEMENT_NAME));
-        am.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
-        am.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        am.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        am.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
         am.setOriginatorKeyInfo((OriginatorKeyInfo) buildXMLObject(OriginatorKeyInfo.DEFAULT_ELEMENT_NAME));
         am.setRecipientKeyInfo((RecipientKeyInfo) buildXMLObject(RecipientKeyInfo.DEFAULT_ELEMENT_NAME));
         
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DataReferenceTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DataReferenceTest.java
index 4d07831..dc76501 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DataReferenceTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DataReferenceTest.java
@@ -84,8 +84,8 @@ public class DataReferenceTest extends XMLObjectProviderBaseTestCase {
         DataReference ref = (DataReference) buildXMLObject(DataReference.DEFAULT_ELEMENT_NAME);
         
         ref.setURI(expectedURI);
-        ref.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
-        ref.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        ref.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        ref.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
         
         assertXMLEquals(expectedChildElementsDOM, ref);
     }
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyReferenceTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyReferenceTest.java
index a8753fd..26d5f62 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyReferenceTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyReferenceTest.java
@@ -84,8 +84,8 @@ public class KeyReferenceTest extends XMLObjectProviderBaseTestCase {
         KeyReference ref = (KeyReference) buildXMLObject(KeyReference.DEFAULT_ELEMENT_NAME);
         
         ref.setURI(expectedURI);
-        ref.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
-        ref.getUnknownXMLObjects().add((SimpleXMLObject) buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        ref.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+        ref.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
         
         assertXMLEquals(expectedChildElementsDOM, ref);
     }
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MGFTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MGFTest.java
index f297549..80b5e4a 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MGFTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MGFTest.java
@@ -88,7 +88,7 @@ public class MGFTest extends XMLObjectProviderBaseTestCase {
         
         mgf.setAlgorithm(expectedAlgorithm);
         
-        XMLObjectBuilder<XSAny> xsAnyBuilder = (XMLObjectBuilder<XSAny>) builderFactory.getBuilder(XSAny.TYPE_NAME);
+        XMLObjectBuilder<XSAny> xsAnyBuilder = builderFactory.getBuilderOrThrow(XSAny.TYPE_NAME);
         XSAny parameters = xsAnyBuilder.buildObject(Parameters.DEFAULT_ELEMENT_NAME);
         parameters.setTextContent(expectedParametersContent);
         mgf.setParameters(parameters);
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolverTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolverTest.java
index adbe27b..7969024 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolverTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/ChainingEncryptedKeyResolverTest.java
@@ -64,7 +64,7 @@ public class ChainingEncryptedKeyResolverTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getEncryptedKeys().isEmpty());
@@ -87,7 +87,7 @@ public class ChainingEncryptedKeyResolverTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getEncryptedKeys().isEmpty());
@@ -115,7 +115,7 @@ public class ChainingEncryptedKeyResolverTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertTrue(encData.getKeyInfo().getEncryptedKeys().isEmpty());
@@ -143,7 +143,7 @@ public class ChainingEncryptedKeyResolverTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getEncryptedKeys().isEmpty());
@@ -172,7 +172,7 @@ public class ChainingEncryptedKeyResolverTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getEncryptedKeys().isEmpty());
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleDecryptionTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleDecryptionTest.java
index 1a44664..13a4ec7 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleDecryptionTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleDecryptionTest.java
@@ -415,8 +415,8 @@ public class SimpleDecryptionTest extends XMLObjectBaseTestCase {
     @Test
     public void testErrorInvalidDataDecryptionKey() throws NoSuchAlgorithmException, NoSuchProviderException, KeyException {
         Key badKey = AlgorithmSupport.generateSymmetricKey(encURI);
-        BasicCredential encCred = new BasicCredential((SecretKey) badKey);
-        KeyInfoCredentialResolver badEncResolver = new StaticKeyInfoCredentialResolver(encCred);
+        BasicCredential encCred1 = new BasicCredential((SecretKey) badKey);
+        KeyInfoCredentialResolver badEncResolver = new StaticKeyInfoCredentialResolver(encCred1);
         
         Decrypter decrypter = new Decrypter(badEncResolver, null, null);
         
@@ -438,8 +438,8 @@ public class SimpleDecryptionTest extends XMLObjectBaseTestCase {
     @Test
     public void testErrorInvalidKeyDecryptionKey() throws NoSuchAlgorithmException, NoSuchProviderException {
         KeyPair badKeyPair = AlgorithmSupport.generateKeyPair(kekURI, 1024);
-        BasicCredential kekCred = new BasicCredential(badKeyPair.getPublic(), badKeyPair.getPrivate());
-        KeyInfoCredentialResolver badKEKResolver = new StaticKeyInfoCredentialResolver(kekCred);
+        BasicCredential kekCred1 = new BasicCredential(badKeyPair.getPublic(), badKeyPair.getPrivate());
+        KeyInfoCredentialResolver badKEKResolver = new StaticKeyInfoCredentialResolver(kekCred1);
         
         Decrypter decrypter = new Decrypter(null, badKEKResolver, null);
         
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleEncryptionTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleEncryptionTest.java
index 2473611..ce66e63 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleEncryptionTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleEncryptionTest.java
@@ -615,12 +615,11 @@ public class SimpleEncryptionTest extends XMLObjectBaseTestCase {
         if (! hasKeyInfo) {
             Assert.assertNull(encKey.getKeyInfo(), "Unexpected KeyInfo was present");
             return;
-        } else {
-            Assert.assertNotNull(encKey.getKeyInfo(), "KeyInfo was not present");
-            Assert.assertNotNull(encKey.getKeyInfo().getKeyNames().get(0), "KeyName was not present");
-            Assert.assertEquals(encKey.getKeyInfo().getKeyNames().get(0).getValue(), expectedKEKKeyNameAES, 
-                    "Unexpected KEK KeyName");
         }
+        Assert.assertNotNull(encKey.getKeyInfo(), "KeyInfo was not present");
+        Assert.assertNotNull(encKey.getKeyInfo().getKeyNames().get(0), "KeyName was not present");
+        Assert.assertEquals(encKey.getKeyInfo().getKeyNames().get(0).getValue(), expectedKEKKeyNameAES, 
+                "Unexpected KEK KeyName");
     }
  
     /**
@@ -636,39 +635,35 @@ public class SimpleEncryptionTest extends XMLObjectBaseTestCase {
         if (! hasKeyInfo) {
             Assert.assertNull(encKey.getKeyInfo(), "Unexpected KeyInfo was present");
             return;
-        } else {
-            Assert.assertNotNull(encKey.getKeyInfo(), "KeyInfo was not present");
-            Assert.assertNotNull(encKey.getKeyInfo().getKeyNames().get(0), "KeyName was not present");
-            Assert.assertEquals(encKey.getKeyInfo().getKeyNames().get(0).getValue(), expectedKEKKeyNameRSA, 
-                    "Unexpected KEK KeyName");
         }
+        Assert.assertNotNull(encKey.getKeyInfo(), "KeyInfo was not present");
+        Assert.assertNotNull(encKey.getKeyInfo().getKeyNames().get(0), "KeyName was not present");
+        Assert.assertEquals(encKey.getKeyInfo().getKeyNames().get(0).getValue(), expectedKEKKeyNameRSA, 
+                "Unexpected KEK KeyName");
     }
     
     private String getDigestMethod(EncryptedKey encryptedKey) {
         List<XMLObject> digestMethods = encryptedKey.getEncryptionMethod().getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME);
         if (digestMethods != null && digestMethods.size() > 0) { 
             return ((DigestMethod)digestMethods.get(0)).getAlgorithm();
-        } else {
-            return null;
         }
+        return null;
     }
     
     private String getMGF(EncryptedKey encryptedKey) {
         List<XMLObject> mgfs = encryptedKey.getEncryptionMethod().getUnknownXMLObjects(MGF.DEFAULT_ELEMENT_NAME);
         if (mgfs != null && mgfs.size() > 0) {
             return ((MGF)mgfs.get(0)).getAlgorithm();
-        } else {
-            return null;
         }
+        return null;
     }
     
     private String getOAEPParams(EncryptedKey encryptedKey) {
         OAEPparams params = encryptedKey.getEncryptionMethod().getOAEPparams();
         if (params != null) {
             return params.getValue();
-        } else {
-            return null;
         }
+        return null;
     }
     
 }
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleKeyInfoReferenceEncryptedKeyResolverTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleKeyInfoReferenceEncryptedKeyResolverTest.java
index 08690b9..9844773 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleKeyInfoReferenceEncryptedKeyResolverTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleKeyInfoReferenceEncryptedKeyResolverTest.java
@@ -50,7 +50,7 @@ public class SimpleKeyInfoReferenceEncryptedKeyResolverTest extends XMLObjectBas
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getXMLObjects(KeyInfoReference.DEFAULT_ELEMENT_NAME).isEmpty());
@@ -75,7 +75,7 @@ public class SimpleKeyInfoReferenceEncryptedKeyResolverTest extends XMLObjectBas
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getXMLObjects(KeyInfoReference.DEFAULT_ELEMENT_NAME).isEmpty());
@@ -100,7 +100,7 @@ public class SimpleKeyInfoReferenceEncryptedKeyResolverTest extends XMLObjectBas
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getKeyInfoReferences().isEmpty());
@@ -128,7 +128,7 @@ public class SimpleKeyInfoReferenceEncryptedKeyResolverTest extends XMLObjectBas
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getKeyInfoReferences().isEmpty());
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleRetrievalMethodEncryptedKeyResolverTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleRetrievalMethodEncryptedKeyResolverTest.java
index 4a008c9..85ea8ae 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleRetrievalMethodEncryptedKeyResolverTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/support/SimpleRetrievalMethodEncryptedKeyResolverTest.java
@@ -51,7 +51,7 @@ public class SimpleRetrievalMethodEncryptedKeyResolverTest extends XMLObjectBase
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getRetrievalMethods().isEmpty());
@@ -76,7 +76,7 @@ public class SimpleRetrievalMethodEncryptedKeyResolverTest extends XMLObjectBase
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getRetrievalMethods().isEmpty());
@@ -102,7 +102,7 @@ public class SimpleRetrievalMethodEncryptedKeyResolverTest extends XMLObjectBase
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getRetrievalMethods().isEmpty());
@@ -126,7 +126,7 @@ public class SimpleRetrievalMethodEncryptedKeyResolverTest extends XMLObjectBase
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getRetrievalMethods().isEmpty());
@@ -152,7 +152,7 @@ public class SimpleRetrievalMethodEncryptedKeyResolverTest extends XMLObjectBase
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0));
         Assert.assertNotNull(sxo.getSimpleXMLObjects().get(0).getEncryptedData());
         
-        EncryptedData encData = (EncryptedData) sxo.getSimpleXMLObjects().get(0).getEncryptedData();
+        EncryptedData encData = sxo.getSimpleXMLObjects().get(0).getEncryptedData();
         
         Assert.assertNotNull(encData.getKeyInfo());
         Assert.assertFalse(encData.getKeyInfo().getRetrievalMethods().isEmpty());
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolverTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolverTest.java
index 72e82a4..df27a5b 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolverTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolverTest.java
@@ -402,9 +402,8 @@ public class AbstractSecurityParametersResolverTest extends XMLObjectBaseTestCas
             WhitelistBlacklistParameters params = resolveSingle(criteria);
             if (params != null) {
                 return Collections.singletonList(params);
-            } else {
-                return Collections.emptyList();
             }
+            return Collections.emptyList();
         }
 
         /** {@inheritDoc} */
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolverTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolverTest.java
index 0beedfb..6774c22 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolverTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionParametersResolverTest.java
@@ -524,12 +524,12 @@ public class BasicEncryptionParametersResolverTest extends XMLObjectBaseTestCase
     public class MapBasedKeyTransportAlgorithmPredicate implements KeyTransportAlgorithmPredicate {
         private Map<String,String> algoMap;
         
-        public MapBasedKeyTransportAlgorithmPredicate(Map<String,String> algoMap) {
-            this.algoMap = algoMap;
+        public MapBasedKeyTransportAlgorithmPredicate(Map<String,String> map) {
+            algoMap = map;
         }
         
         public boolean test(@Nullable SelectionInput input) {
-            return this.algoMap.get(input.getDataEncryptionAlgorithm()).equals(input.getKeyTransportAlgorithm());
+            return algoMap.get(input.getDataEncryptionAlgorithm()).equals(input.getKeyTransportAlgorithm());
         }
     }
 
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupportTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupportTest.java
index 63cd343..8dd303d 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupportTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupportTest.java
@@ -624,7 +624,7 @@ public class KeyInfoSupportTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(x509Cert, "X509Certificate was null");
 
         java.security.cert.X509Certificate javaCert = null;
-        javaCert = (java.security.cert.X509Certificate) KeyInfoSupport.getCertificate(x509Cert);
+        javaCert = KeyInfoSupport.getCertificate(x509Cert);
 
         Assert.assertEquals(javaCert, javaCert1, "Inserted X509Certificate was not the expected value");
 
@@ -647,7 +647,7 @@ public class KeyInfoSupportTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(x509CRL, "X509CRL was null");
 
         java.security.cert.X509CRL javaCRL = null;
-        javaCRL = (java.security.cert.X509CRL) KeyInfoSupport.getCRL(x509CRL);
+        javaCRL = KeyInfoSupport.getCRL(x509CRL);
 
         Assert.assertEquals(javaCRL, javaCRL1, "Inserted X509CRL was not the expected value");
 
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
index 68e92d1..c591522 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/ChainingSignatureTrustEngineTest.java
@@ -123,12 +123,12 @@ public class ChainingSignatureTrustEngineTest extends XMLObjectBaseTestCase {
 
         private Boolean trusted;
 
-        private MockSignatureTrustEngine(Boolean trusted) {
-            this.trusted = trusted;
+        private MockSignatureTrustEngine(Boolean flag) {
+            trusted = flag;
         }
 
         /** {@inheritDoc} */
-        public boolean validate(Signature token, CriteriaSet trustBasisCriteria) throws SecurityException {
+        public boolean validate(Signature tok, CriteriaSet trustBasisCriteria) throws SecurityException {
             if (trusted == null) {
                 throw new SecurityException("This means an error happened");
             }
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngineTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngineTest.java
index 1ab7c1b..73c3f58 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngineTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/signature/support/impl/PKIXSignatureTrustEngineTest.java
@@ -661,16 +661,16 @@ public class PKIXSignatureTrustEngineTest extends XMLObjectBaseTestCase {
         child.setValue("SomeSimpleValueAsTextContent");
         sxo.getSimpleXMLObjects().add(child);
         
-        Signature signature = (Signature) buildXMLObject(Signature.DEFAULT_ELEMENT_NAME);
-        signature.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-        signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-        signature.setSigningCredential(signingX509Cred);
+        Signature sig = (Signature) buildXMLObject(Signature.DEFAULT_ELEMENT_NAME);
+        sig.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+        sig.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
+        sig.setSigningCredential(signingX509Cred);
         
         DocumentInternalIDContentReference idContentRef = new DocumentInternalIDContentReference(sxo.getId());
         idContentRef.setDigestAlgorithm(SignatureConstants.ALGO_ID_DIGEST_SHA1);
         idContentRef.getTransforms().add(SignatureConstants.TRANSFORM_ENVELOPED_SIGNATURE);
         idContentRef.getTransforms().add(SignatureConstants.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
-        signature.getContentReferences().add(idContentRef);
+        sig.getContentReferences().add(idContentRef);
         
         if (emitKeyInfo) {
             X509KeyInfoGeneratorFactory kiFactory = new X509KeyInfoGeneratorFactory();
@@ -688,10 +688,10 @@ public class PKIXSignatureTrustEngineTest extends XMLObjectBaseTestCase {
             } catch (SecurityException e) {
                 Assert.fail("Error generating KeyInfo from signing credential: " + e);
             }
-            signature.setKeyInfo(keyInfo);
+            sig.setKeyInfo(keyInfo);
         }        
         
-        sxo.setSignature(signature);
+        sxo.setSignature(sig);
         
         try {
             XMLObjectProviderRegistrySupport.getMarshallerFactory().getMarshaller(sxo).marshall(sxo);
@@ -699,7 +699,7 @@ public class PKIXSignatureTrustEngineTest extends XMLObjectBaseTestCase {
             Assert.fail("Error marshalling object for signing: " + e);
         }
         
-        Signer.signObject(signature);
+        Signer.signObject(sig);
         
         /*
         try {

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


More information about the commits mailing list