[java-opensaml] branch master updated: IDP-1405 - Remove use of Guava Function/Predicate interfaces

Scott Cantor cantor.2 at osu.edu
Tue Feb 5 10:48:33 EST 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=a66c3b864733dd207aad11e16dbb04532a3c5e5e

The following commit(s) were added to refs/heads/master by this push:
       new  a66c3b8   IDP-1405 - Remove use of Guava Function/Predicate interfaces
a66c3b8 is described below

commit a66c3b864733dd207aad11e16dbb04532a3c5e5e
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Feb 1 16:14:23 2019 -0500

    IDP-1405 - Remove use of Guava Function/Predicate interfaces
    
    https://issues.shibboleth.net/jira/browse/IDP-1405
---
 .../context/navigate/ChildContextLookup.java       |   4 +-
 .../navigate/ContextDataLookupFunction.java        |   4 +-
 .../messaging/context/navigate/MessageLookup.java  |   3 +-
 .../context/navigate/ParentContextLookup.java      |   1 -
 .../RecursiveTypedParentContextLookup.java         |   4 +-
 .../context/navigate/RootContextLookup.java        |   2 +-
 .../messaging/context/navigate/package-info.java   |   2 +-
 .../messaging/handler/AbstractMessageHandler.java  |   5 +-
 .../NoConfidentialityMessageChannelPredicate.java  |   5 +-
 .../logic/NoIntegrityMessageChannelPredicate.java  |   5 +-
 .../pipeline/StaticPipelineNameStrategy.java       |   4 +-
 .../impl/AbstractMessageChannelSecurity.java       |  15 ++--
 .../handler/impl/CheckExpectedIssuer.java          |   5 +-
 .../handler/impl/CheckMandatoryAuthentication.java |   4 +-
 .../handler/impl/CheckMandatoryIssuer.java         |   4 +-
 .../impl/MessageHandlerErrorStrategyAdapter.java   |  11 +--
 .../handler/impl/SchemaValidateXMLMessage.java     |   5 +-
 .../impl/URLEvaluatingMessageChannelSecurity.java  |  14 +--
 .../handler/impl/CheckExpectedIssuerTest.java      |  39 +++-----
 .../impl/CheckMandatoryAuthenticationTest.java     |  22 +----
 .../handler/impl/CheckMandatoryIssuerTest.java     |  22 +----
 .../URLEvaluatingMessageChannelSecurityTest.java   |  33 ++-----
 .../action/AbstractConditionalProfileAction.java   |   5 +-
 .../AbstractHandlerDelegatingProfileAction.java    |  15 ++--
 .../org/opensaml/profile/action/ActionSupport.java |   5 +-
 .../navigate/CurrentOrPreviousEventLookup.java     |   5 +-
 .../navigate/InboundMessageContextLookup.java      |   3 +-
 .../navigate/OutboundMessageContextLookup.java     |   3 +-
 .../ParentProfileRequestContextLookup.java         |   2 +-
 .../profile/context/navigate/ProfileIdLookup.java  |   1 -
 .../profile/logic/BrowserProfilePredicate.java     |   5 +-
 .../opensaml/profile/logic/IPRangePredicate.java   |   5 +-
 .../logic/MessageContextPredicateAdapter.java      |  28 +++---
 .../NoConfidentialityMessageChannelPredicate.java  |   5 +-
 .../logic/NoIntegrityMessageChannelPredicate.java  |   5 +-
 .../profile/logic/PredicateAccessControl.java      |   6 +-
 .../opensaml/profile/logic/ProfileIdPredicate.java |   6 +-
 .../logic/MessageContextPredicateAdapterTest.java  |  16 ++--
 .../impl/AbstractMessageChannelSecurity.java       |  25 +++---
 .../opensaml/profile/action/impl/CheckAccess.java  |   4 +-
 .../org/opensaml/profile/action/impl/LogEvent.java |   3 +-
 .../PopulateClientTLSValidationParameters.java     |  10 +--
 .../action/impl/PopulateDecryptionParameters.java  |   9 +-
 .../profile/action/impl/PopulateMetricContext.java |   4 +-
 .../PopulateSignatureValidationParameters.java     |  11 +--
 .../saml/common/binding/BindingDescriptor.java     |   7 +-
 .../AttributeConsumerServiceLookupFunction.java    |   2 +-
 .../SAMLMessageContextAuthenticationFunction.java  |   4 +-
 .../navigate/SAMLMessageContextIssuerFunction.java |   4 +-
 .../messaging/logic/ProxiedRequesterPredicate.java |   5 +-
 .../logic/SignatureCapableBindingPredicate.java    |   6 +-
 .../soap/SAMLSOAPClientContextBuilder.java         |   6 +-
 .../profile/AbstractNameIdentifierGenerator.java   |  11 ++-
 .../logic/AbstractNameIDPolicyPredicate.java       |   7 +-
 .../logic/AbstractRegistrationInfoPredicate.java   |   4 +-
 .../profile/logic/DefaultLocalErrorPredicate.java  |  21 +++--
 .../profile/logic/EntityAttributesPredicate.java   |  12 ++-
 .../profile/logic/EntityGroupNamePredicate.java    |   5 +-
 .../common/profile/logic/EntityIdPredicate.java    |   4 +-
 .../MetadataNameIdentifierFormatStrategy.java      |   3 +-
 .../profile/logic/RegistrationPolicyPredicate.java |   2 +-
 .../opensaml/saml/config/SAMLConfiguration.java    |   4 +-
 .../entity/EvaluableEntityDescriptorCriterion.java |   6 +-
 .../role/EvaluableRoleDescriptorCriterion.java     |   6 +-
 .../IsTimeboundSAMLObjectValidPredicate.java       |   8 +-
 .../profile/AbstractSAML2NameIDGenerator.java      |   7 +-
 .../impl/AddChannelBindingsHeaderHandler.java      |   5 +-
 .../PopulateSignatureSigningParametersHandler.java |  10 +--
 .../SAMLAddAttributeConsumingServiceHandler.java   |  10 +--
 .../impl/AddAudienceRestrictionToAssertions.java   |   7 +-
 .../profile/impl/AddInResponseToToResponse.java    |   7 +-
 .../impl/AddNotBeforeConditionToAssertions.java    |   8 +-
 .../impl/AddNotOnOrAfterConditionToAssertions.java |   8 +-
 .../impl/PopulateSignatureSigningParameters.java   |  17 ++--
 .../saml/common/profile/impl/SignAssertions.java   |   8 +-
 .../common/profile/impl/VerifyChannelBindings.java |  20 +++--
 ...aluableEntityRoleEntityDescriptorCriterion.java |   2 +-
 .../EvaluableEntityRoleDescriptorCriterion.java    |   2 +-
 .../EvaluableProtocolRoleDescriptorCriterion.java  |   2 +-
 .../impl/BasicDynamicTrustedNamesStrategy.java     |   4 +-
 .../filter/impl/EntityAttributesFilter.java        |   6 +-
 .../resolver/filter/impl/NameIDFormatFilter.java   |   4 +-
 .../resolver/filter/impl/PredicateFilter.java      |   7 +-
 .../filter/impl/ScriptedTrustedNamesFunction.java  |   4 +-
 .../filter/impl/SignatureValidationFilter.java     |   3 +-
 .../impl/AbstractDynamicHTTPMetadataResolver.java  |   9 +-
 .../impl/AbstractDynamicMetadataResolver.java      |   8 +-
 .../resolver/impl/AbstractMetadataResolver.java    |   2 +-
 .../DefaultLocalDynamicSourceKeyGenerator.java     |   5 +-
 .../resolver/impl/EntityIDDigestGenerator.java     |   6 +-
 .../FunctionDrivenDynamicHTTPMetadataResolver.java |   9 +-
 .../impl/HTTPEntityIDRequestURLBuilder.java        |   8 +-
 .../resolver/impl/HTTPMetadataResolver.java        |   3 +-
 .../resolver/impl/IdentityEntityIDGenerator.java   |   8 +-
 .../impl/LocalDynamicMetadataResolver.java         |   5 +-
 .../MetadataQueryProtocolRequestURLBuilder.java    |   4 +-
 .../impl/PredicateRoleDescriptorResolver.java      |   6 +-
 .../resolver/impl/RegexRequestURLBuilder.java      |   8 +-
 .../resolver/impl/TemplateRequestURLBuilder.java   |   5 +-
 .../resolver/index/impl/EndpointMetadataIndex.java |   6 +-
 .../index/impl/FunctionDrivenMetadataIndex.java    |   3 +-
 .../index/impl/LockableMetadataIndexManager.java   |   5 +-
 .../resolver/index/impl/MetadataIndexManager.java  |   4 +-
 .../index/impl/SAMLArtifactMetadataIndex.java      |   2 +-
 .../impl/AddDoNotCacheConditionToAssertions.java   |   7 +-
 .../profile/impl/AddNameIdentifierToSubjects.java  |   3 +-
 .../saml/saml1/profile/impl/AddResponseShell.java  |  10 +--
 .../saml1/profile/impl/AddStatusToResponse.java    |  10 +--
 .../impl/AddSubjectConfirmationToSubjects.java     |   6 +-
 .../impl/CopyNameIdentifierFromRequest.java        |  14 ++-
 .../saml/saml1/profile/impl/ResolveArtifacts.java  |  13 +--
 .../binding/impl/AddConsentToResponseHandler.java  |   5 +-
 .../impl/ExtractConsentFromRequestHandler.java     |   5 +-
 .../impl/ExtractProxiedRequestersHandler.java      |   4 +-
 .../saml2/profile/impl/AbstractDecryptAction.java  |  13 +--
 .../saml2/profile/impl/AbstractEncryptAction.java  |  14 +--
 .../profile/impl/AbstractResponseShellAction.java  |  10 +--
 .../impl/AddChannelBindingsToAssertions.java       |  13 ++-
 .../profile/impl/AddGeneratedKeyToAssertions.java  |  13 ++-
 .../saml2/profile/impl/AddNameIDToSubjects.java    |  20 ++---
 .../impl/AddOneTimeUseConditionToAssertions.java   |   8 +-
 .../impl/AddProxyRestrictionToAssertions.java      |   7 +-
 .../saml2/profile/impl/AddStatusResponseShell.java |  16 ++--
 .../saml2/profile/impl/AddStatusToResponse.java    |   9 +-
 .../impl/AddSubjectConfirmationToSubjects.java     |   7 +-
 .../saml2/profile/impl/CopyNameIDFromRequest.java  |  14 ++-
 .../saml/saml2/profile/impl/DecryptAssertions.java |   2 +-
 .../saml/saml2/profile/impl/DecryptAttributes.java |   2 +-
 .../saml/saml2/profile/impl/DecryptNameIDs.java    |   4 +-
 .../saml/saml2/profile/impl/EncryptAssertions.java |   7 +-
 .../saml/saml2/profile/impl/EncryptAttributes.java |   7 +-
 .../saml/saml2/profile/impl/EncryptNameIDs.java    |   7 +-
 .../saml2/profile/impl/PopulateECPContext.java     |  12 ++-
 .../saml/saml2/profile/impl/ResolveArtifact.java   |  12 +--
 ...ultSAML20AssertionValidationContextBuilder.java |   6 +-
 ...ecuritySAML20AssertionTokenSecurityHandler.java |   3 +-
 .../InlineSelfEncryptionParametersStrategy.java    |   4 +-
 .../SAMLMetadataEncryptionParametersResolver.java  |  29 +++---
 ...MetadataSignatureSigningParametersResolver.java |  11 ++-
 ...ulateSignatureSigningParametersHandlerTest.java |   4 +-
 .../AddAudienceRestrictionToAssertionsTest.java    |  10 +--
 .../AddNotOnOrAfterConditionToAssertionsTest.java  |  11 +--
 .../PopulateSignatureSigningParametersTest.java    |   6 +-
 .../filter/impl/EntityAttributesFilterTest.java    |  11 +--
 .../filter/impl/NameIDFormatFilterTest.java        |   5 +-
 .../impl/AbstractDynamicMetadataResolverTest.java  |   6 +-
 .../impl/PredicateRoleDescriptorResolverTest.java  |   2 +-
 .../impl/TemplateRequestURLBuilderTest.java        |  11 +--
 .../impl/ConstantEntityDescriptorFunction.java     |   3 +-
 .../index/impl/EndpointMetadataIndexTest.java      |  12 +--
 .../index/impl/MetadataIndexManagerTest.java       |   2 +-
 .../index/impl/SimpleStringCriteriaFunction.java   |   3 +-
 .../impl/UppercaseEntityIdDescriptorFunction.java  |   3 +-
 .../AbstractSAML1NameIdentifierGeneratorTest.java  |   9 +-
 .../impl/AddNameIdentifierToSubjectsTest.java      |   2 +-
 .../saml1/profile/impl/ResolveArtifactsTest.java   |   9 +-
 .../profile/AbstractSAML2NameIDGeneratorTest.java  |  16 +---
 .../profile/impl/AddNameIDToSubjectsTest.java      |   2 +-
 .../impl/AddProxyRestrictionToAssertionsTest.java  |  16 +---
 .../profile/impl/AddStatusResponseShellTest.java   |   8 +-
 .../saml2/profile/impl/ResolveArtifactTest.java    |   9 +-
 .../saml2/profile/impl/TestSelfEncryption.java     |  30 ++-----
 ...AML20AssertionValidationContextBuilderTest.java |   3 +-
 ...itySAML20AssertionTokenSecurityHandlerTest.java |   3 +-
 ...InlineSelfEncryptionParametersStrategyTest.java |   2 +-
 ...MLMetadataEncryptionParametersResolverTest.java |   2 +-
 .../src/test/resources/logback-test.xml            |  14 +--
 opensaml-security-api/.project                     |  11 +++
 .../messaging/HttpClientSecurityContext.java       |   4 +-
 .../impl/EvaluableCredentialCriterion.java         |   6 +-
 .../impl/EvaluableEntityIDCredentialCriterion.java |   2 +-
 .../EvaluableKeyAlgorithmCredentialCriterion.java  |   2 +-
 .../EvaluableKeyLengthCredentialCriterion.java     |   2 +-
 .../impl/EvaluableKeyNameCredentialCriterion.java  |   2 +-
 .../EvaluablePublicKeyCredentialCriterion.java     |   2 +-
 .../impl/EvaluableUsageCredentialCriterion.java    |   2 +-
 ...aluableX509CertSelectorCredentialCriterion.java |   2 +-
 .../EvaluableX509DigestCredentialCriterion.java    |   2 +-
 ...aluableX509IssuerSerialCredentialCriterion.java |   2 +-
 ...509SubjectKeyIdentifierCredentialCriterion.java |   2 +-
 ...valuableX509SubjectNameCredentialCriterion.java |   2 +-
 ...bstractCriteriaFilteringCredentialResolver.java |  10 +--
 ...opulateHttpClientSecurityParametersHandler.java |   7 +-
 .../EvaluableEntityIDCredentialCriterionTest.java  |   8 +-
 ...aluableKeyAlgorithmCredentialCriterionTest.java |   6 +-
 .../EvaluableKeyLengthCredentialCriterionTest.java |   6 +-
 .../EvaluableKeyNameCredentialCriterionTest.java   |   8 +-
 .../EvaluablePublicKeyCredentialCriterionTest.java |   8 +-
 .../EvaluableUsageCredentialCriterionTest.java     |  10 +--
 ...bleX509CertSelectorCredentialCriterionTest.java |  10 +--
 ...EvaluableX509DigestCredentialCriterionTest.java |  10 +--
 ...bleX509IssuerSerialCredentialCriterionTest.java |   8 +-
 ...ubjectKeyIdentifierCredentialCriterionTest.java |  10 +--
 ...ableX509SubjectNameCredentialCriterionTest.java |   8 +-
 .../http/AbstractPipelineHttpSOAPClient.java       |   3 +-
 .../opensaml/soap/client/http/HttpSOAPClient.java  |   9 +-
 .../client/http/PipelineFactoryHttpSOAPClient.java |   4 +-
 .../messaging/SOAPClientDestinationURILookup.java  |   8 +-
 .../SOAPClientPipelineNameMappingFunction.java     |  11 +--
 .../SOAPClientPipelineNameMappingPredicate.java    |  15 ++--
 .../SOAPClientSecurityProfileIdLookupFunction.java |  12 ++-
 .../AbstractHeaderGeneratingMessageHandler.java    |   8 +-
 .../soap/soap11/profile/impl/AddSOAPFault.java     |   6 +-
 .../soap/soap11/profile/impl/AddSOAPFaultTest.java |  35 ++------
 .../storage/AbstractMapBackedStorageService.java   |   7 +-
 .../impl/ServletRequestScopedStorageService.java   |   8 +-
 .../impl/client/ClientStorageSaveContext.java      |   7 +-
 .../impl/client/LoadClientStorageServices.java     |   9 +-
 .../client/PopulateClientStorageSaveContext.java   |  10 +--
 .../xmlsec/KeyTransportAlgorithmPredicate.java     |   4 +-
 .../impl/AbstractSecurityParametersResolver.java   |   2 +-
 .../impl/AlgorithmRuntimeSupportedPredicate.java   |   6 +-
 .../impl/BasicEncryptionParametersResolver.java    |  22 ++---
 .../BasicSignatureSigningParametersResolver.java   |  10 +--
 .../opensaml/xmlsec/impl/BlacklistPredicate.java   |   4 +-
 .../opensaml/xmlsec/impl/WhitelistPredicate.java   |   4 +-
 ...pulateSignatureValidationParametersHandler.java |   3 +-
 .../AbstractSecurityParametersResolverTest.java    |  45 +++++-----
 .../AlgorithmRuntimeSupportedPredicateTest.java    | 100 ++++++++++-----------
 .../impl/BasicEncryptionConfigurationTest.java     |   2 +-
 .../BasicEncryptionParametersResolverTest.java     |   4 +-
 .../xmlsec/impl/BlacklistPredicateTest.java        |  42 ++++-----
 .../xmlsec/impl/WhitelistPredicateTest.java        |  42 ++++-----
 223 files changed, 796 insertions(+), 1107 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ChildContextLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ChildContextLookup.java
index 7e191d2..6c54988 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ChildContextLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ChildContextLookup.java
@@ -35,7 +35,7 @@ public class ChildContextLookup<ParentContext extends BaseContext, ChildContext
         ContextDataLookupFunction<ParentContext, ChildContext> {
 
     /** Child context type to look up. */
-    private final Class<ChildContext> childType;
+    @Nonnull private final Class<ChildContext> childType;
 
     /**
      * Whether the child context should be created if it doesn't exist. This requires that the child context has a
@@ -66,7 +66,6 @@ public class ChildContextLookup<ParentContext extends BaseContext, ChildContext
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public ChildContext apply(@Nullable final ParentContext input) {
         if (input == null) {
             return null;
@@ -74,4 +73,5 @@ public class ChildContextLookup<ParentContext extends BaseContext, ChildContext
 
         return input.getSubcontext(childType, autocreate);
     }
+    
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ContextDataLookupFunction.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ContextDataLookupFunction.java
index 573c6c4..899c512 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ContextDataLookupFunction.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ContextDataLookupFunction.java
@@ -17,9 +17,9 @@
 
 package org.opensaml.messaging.context.navigate;
 
-import org.opensaml.messaging.context.BaseContext;
+import java.util.function.Function;
 
-import com.google.common.base.Function;
+import org.opensaml.messaging.context.BaseContext;
 
 /**
  * A {@link Function} that is used to navigate a {@link BaseContext} tree and extract data from it.
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
index a4fbc74..842397a 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
@@ -33,7 +33,7 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 public class MessageLookup<T> implements ContextDataLookupFunction<MessageContext, T> {
 
     /** Child context type to look up. */
-    private final Class<T> messageType;
+    @Nonnull private final Class<T> messageType;
     
     /**
      * Constructor.
@@ -45,7 +45,6 @@ public class MessageLookup<T> implements ContextDataLookupFunction<MessageContex
     }
     
     /** {@inheritDoc} */
-    @Override
     @Nullable public T apply(@Nullable final MessageContext input) {
         if (input != null && messageType.isInstance(input.getMessage())) {
             return (T) input.getMessage();
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ParentContextLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ParentContextLookup.java
index 5e74bbc..1a1de07 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ParentContextLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/ParentContextLookup.java
@@ -31,7 +31,6 @@ public class ParentContextLookup<StartContext extends BaseContext, ParentContext
         implements ContextDataLookupFunction<StartContext, ParentContext> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public ParentContext apply(@Nullable final StartContext input) {
         if (input == null) {
             return null;
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookup.java
index 89cc56e..1b392d4 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookup.java
@@ -37,7 +37,7 @@ public class RecursiveTypedParentContextLookup<StartContext extends BaseContext,
         implements ContextDataLookupFunction<StartContext, ParentContext> {
     
     /** The target parent class. */
-    private Class<ParentContext> parentClass;
+    @Nonnull private Class<ParentContext> parentClass;
     
     /**
      * Constructor.
@@ -50,7 +50,6 @@ public class RecursiveTypedParentContextLookup<StartContext extends BaseContext,
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public ParentContext apply(@Nullable final StartContext input) {
         if (input == null) {
             return null;
@@ -66,4 +65,5 @@ public class RecursiveTypedParentContextLookup<StartContext extends BaseContext,
         
         return null;
     }
+    
 }
\ No newline at end of file
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 1badaff..f042eb8 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
@@ -31,7 +31,6 @@ public class RootContextLookup<StartContext extends BaseContext, RootContext ext
         ContextDataLookupFunction<StartContext, RootContext> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public RootContext apply(@Nullable final BaseContext input) {
         if (input == null) {
             return null;
@@ -43,4 +42,5 @@ public class RootContextLookup<StartContext extends BaseContext, RootContext ext
             return apply(input.getParent());
         }
     }
+    
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/package-info.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/package-info.java
index 14ce902..4b04c57 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/package-info.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/package-info.java
@@ -16,7 +16,7 @@
  */
 
 /**
- * A set of {@link com.google.common.base.Function}s used to navigate and lookup data
+ * A set of functions used to navigate and lookup data
  * from a tree of {@link org.opensaml.messaging.context.BaseContext}s.
  */
 
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 cadf68c..2f11aba 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.handler;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.annotation.Prototype;
@@ -29,7 +31,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -144,7 +145,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
      */
     protected boolean doPreInvoke(@Nonnull final MessageContext<MessageType> messageContext)
             throws MessageHandlerException {
-        if (activationCondition.apply(messageContext)) {
+        if (activationCondition.test(messageContext)) {
             log.debug("{} Activation condition for handler returned true", getLogPrefix());
             return true;
         } else {
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
index a99e32d..888a76f 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoConfidentialityMessageChannelPredicate.java
@@ -22,7 +22,7 @@ import javax.annotation.Nullable;
 import org.opensaml.messaging.context.MessageChannelSecurityContext;
 import org.opensaml.messaging.context.MessageContext;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * A predicate implementation that indicates whether the message channel does
@@ -33,8 +33,7 @@ import com.google.common.base.Predicate;
 public class NoConfidentialityMessageChannelPredicate implements Predicate<MessageContext> {
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final MessageContext input) {
+    public boolean test(@Nullable final MessageContext input) {
         return input == null
                 || !input.getSubcontext(MessageChannelSecurityContext.class, true).isConfidentialityActive();
     }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
index 7478a53..2b899c6 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/logic/NoIntegrityMessageChannelPredicate.java
@@ -22,7 +22,7 @@ import javax.annotation.Nullable;
 import org.opensaml.messaging.context.MessageChannelSecurityContext;
 import org.opensaml.messaging.context.MessageContext;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * A predicate implementation that indicates whether the message channel does
@@ -33,8 +33,7 @@ import com.google.common.base.Predicate;
 public class NoIntegrityMessageChannelPredicate implements Predicate<MessageContext> {
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final MessageContext input) {
+    public boolean test(@Nullable final MessageContext input) {
         return input == null || !input.getSubcontext(MessageChannelSecurityContext.class, true).isIntegrityActive();
     }
     
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
index c41fda8..47884ff 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
@@ -17,14 +17,14 @@
 
 package org.opensaml.messaging.pipeline;
 
+import java.util.function.Function;
+
 import javax.annotation.Nullable;
 
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.messaging.context.InOutOperationContext;
 
-import com.google.common.base.Function;
-
 /**
  * Static strategy function for resolving a pipeline name.
  */
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
index b8a68d0..b0c3925 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.handler.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -25,8 +27,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
@@ -43,7 +43,7 @@ public abstract class AbstractMessageChannelSecurity<MessageType> extends Abstra
      * Strategy used to look up the parent {@link BaseContext} on which the
      * {@link org.opensaml.messaging.context.MessageChannelSecurityContext} will be populated.
      */
-    @Nonnull private Function<MessageContext, BaseContext> parentContextLookupStrategy;
+    @Nonnull private Function<MessageContext,BaseContext> parentContextLookupStrategy;
     
     /** Parent for eventual context. */
     @Nullable private BaseContext parentContext;
@@ -75,11 +75,12 @@ public abstract class AbstractMessageChannelSecurity<MessageType> extends Abstra
     @Override
     protected boolean doPreInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
 
-        parentContext = parentContextLookupStrategy.apply(messageContext);
-        if (parentContext != null) {
-            return super.doPreInvoke(messageContext);
+        if (!super.doPreInvoke(messageContext)) {
+            return false;
         }
-        return false;
+        
+        parentContext = parentContextLookupStrategy.apply(messageContext);
+        return parentContext != null;
     }
     
     /**
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuer.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuer.java
index 68fcfe8..4718390 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuer.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuer.java
@@ -18,6 +18,7 @@
 package org.opensaml.messaging.handler.impl;
 
 import java.util.Objects;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -32,15 +33,13 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Message handler that checks that a message context has an issuer.
  */
 public final class CheckExpectedIssuer extends AbstractMessageHandler {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(CheckExpectedIssuer.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(CheckExpectedIssuer.class);
 
     /** Strategy used to look up the issuer associated with the message context. */
     @NonnullAfterInit private Function<MessageContext,String> issuerLookupStrategy;
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthentication.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthentication.java
index 2a752d3..64ee163 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthentication.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthentication.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.handler.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -28,8 +30,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
 
-import com.google.common.base.Function;
-
 /**
  * Message handler that checks that a message context is authenticated.
  */
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuer.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuer.java
index a60c484..e8017a5 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuer.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuer.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.handler.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -28,8 +30,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
 
-import com.google.common.base.Function;
-
 /**
  * Message handler that checks that a message context has an issuer.
  */
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 0ae772e..b796a26 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
@@ -22,6 +22,7 @@ import java.util.List;
 
 import javax.annotation.Nonnull;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.messaging.context.MessageContext;
@@ -64,13 +65,13 @@ import com.google.common.collect.Collections2;
 public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMessageHandler<MessageType> {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(MessageHandlerErrorStrategyAdapter.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(MessageHandlerErrorStrategyAdapter.class);
     
     /** The wrapped message handler. */
-    private MessageHandler<MessageType> wrappedHandler;
+    @Nonnull private MessageHandler<MessageType> wrappedHandler;
     
     /** The list of typed error handlers. */
-    private List<TypedMessageErrorHandler> errorHandlers;
+    @Nonnull @NonnullElements private List<TypedMessageErrorHandler> errorHandlers;
     
     /** Flag indicating whether the wrapped handler's exception should be rethrown after being handled successfully. */
     private boolean rethrowIfHandled;
@@ -86,7 +87,7 @@ public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMes
      * @param typedErrorHandlers the list of typed error handlers to apply
      */
     public MessageHandlerErrorStrategyAdapter(@Nonnull final MessageHandler<MessageType> messageHandler, 
-            @Nonnull final List<TypedMessageErrorHandler> typedErrorHandlers) {
+            @Nonnull @NonnullElements final List<TypedMessageErrorHandler> typedErrorHandlers) {
         wrappedHandler = Constraint.isNotNull(messageHandler, "Wrapped MessageHandler cannot be null");
         errorHandlers = new ArrayList<>(Collections2.filter(
                 Constraint.isNotNull(typedErrorHandlers, "List of TypedMessageErroHandlers cannot be null"), 
@@ -156,4 +157,4 @@ public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMes
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
index ced5bae..79e9dda 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
@@ -44,10 +44,10 @@ import org.xml.sax.SAXException;
 public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends AbstractMessageHandler<MessageType> {
 
     /** Class logger. */
-    private Logger log = LoggerFactory.getLogger(SchemaValidateXMLMessage.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(SchemaValidateXMLMessage.class);
 
     /** Schema used to validate incoming messages. */
-    private final Schema validationSchema;
+    @Nonnull private final Schema validationSchema;
 
     /**
      * Constructor.
@@ -55,7 +55,6 @@ public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends Abs
      * @param schema schema used to validate incoming messages
      */
     public SchemaValidateXMLMessage(@Nonnull final Schema schema) {
-        super();
         validationSchema = Constraint.isNotNull(schema, "Schema cannot be null");
     }
 
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 37f819a..0bb94ca 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
@@ -18,6 +18,7 @@
 package org.opensaml.messaging.handler.impl;
 
 import java.net.MalformedURLException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -28,8 +29,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -42,13 +41,13 @@ import net.shibboleth.utilities.java.support.net.URLBuilder;
 public class URLEvaluatingMessageChannelSecurity extends AbstractMessageChannelSecurity {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(URLEvaluatingMessageChannelSecurity.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(URLEvaluatingMessageChannelSecurity.class);
 
     /** Flag controlling whether traffic on the default TLS port is "secure". */
     private boolean defaultPortInsecure;
     
     /** Function which looks up the URL to evaluate. */
-    @NonnullAfterInit private Function<MessageContext, String> urlLookup;
+    @NonnullAfterInit private Function<MessageContext,String> urlLookup;
     
     /** The target resolved URL. */
     @Nullable private String url;
@@ -98,7 +97,12 @@ public class URLEvaluatingMessageChannelSecurity extends AbstractMessageChannelS
     }
 
     /** {@inheritDoc} */
+    @Override
     protected boolean doPreInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
+        if (!super.doPreInvoke(messageContext)) {
+            return false;
+        }
+
         url = urlLookup.apply(messageContext);
         if (url != null) {
             try {
@@ -116,7 +120,7 @@ public class URLEvaluatingMessageChannelSecurity extends AbstractMessageChannelS
 
     /** {@inheritDoc} */
     @Override
-    protected void doInvoke(final MessageContext messageContext) {
+    protected void doInvoke(@Nonnull final MessageContext messageContext) {
         final MessageChannelSecurityContext channelContext =
                 getParentContext().getSubcontext(MessageChannelSecurityContext.class, true);
         
diff --git a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuerTest.java b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuerTest.java
index fdd33fd..a8a7fac 100644
--- a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuerTest.java
+++ b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckExpectedIssuerTest.java
@@ -17,16 +17,13 @@
 
 package org.opensaml.messaging.handler.impl;
 
-import javax.annotation.Nullable;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.messaging.handler.impl.CheckMandatoryIssuer;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 /** Unit test for {@link CheckMandatoryIssuer}. */
 public class CheckExpectedIssuerTest {
@@ -34,8 +31,8 @@ public class CheckExpectedIssuerTest {
     @Test
     public void testMatch() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer("issuer"));
-        action.setExpectedIssuerLookupStrategy(new MockIssuer("issuer"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant("issuer"));
+        action.setExpectedIssuerLookupStrategy(FunctionSupport.constant("issuer"));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -45,8 +42,8 @@ public class CheckExpectedIssuerTest {
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testNotMatch() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer("issuer"));
-        action.setExpectedIssuerLookupStrategy(new MockIssuer("issuerNOT"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant("issuer"));
+        action.setExpectedIssuerLookupStrategy(FunctionSupport.constant("issuerNOT"));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -56,8 +53,8 @@ public class CheckExpectedIssuerTest {
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testNoIssuer() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer(null));
-        action.setExpectedIssuerLookupStrategy(new MockIssuer("issuer"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant(null));
+        action.setExpectedIssuerLookupStrategy(FunctionSupport.constant("issuer"));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -67,8 +64,8 @@ public class CheckExpectedIssuerTest {
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testNoExpectedIssuer() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer("issuer"));
-        action.setExpectedIssuerLookupStrategy(new MockIssuer("null"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant("issuer"));
+        action.setExpectedIssuerLookupStrategy(FunctionSupport.constant("null"));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -78,29 +75,15 @@ public class CheckExpectedIssuerTest {
     @Test(expectedExceptions=ComponentInitializationException.class)
     public void testMissingIssuerStrategy() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setExpectedIssuerLookupStrategy(new MockIssuer("issuer"));
+        action.setExpectedIssuerLookupStrategy(FunctionSupport.constant("issuer"));
         action.initialize();
     }
     
     @Test(expectedExceptions=ComponentInitializationException.class)
     public void testMissingExpectedIssuerStrategy() throws Exception {
         final CheckExpectedIssuer action = new CheckExpectedIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer("issuer"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant("issuer"));
         action.initialize();
     }
     
-    private class MockIssuer implements Function<MessageContext,String> {
-
-        final String issuer;
-        
-        MockIssuer(@Nullable final String s) {
-            issuer = s;
-        }
-        
-        /** {@inheritDoc} */
-        public String apply(MessageContext input) {
-            return issuer;
-        }
-        
-    }
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthenticationTest.java b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthenticationTest.java
index 763d12d..6d25a93 100644
--- a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthenticationTest.java
+++ b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryAuthenticationTest.java
@@ -21,14 +21,14 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 /** Unit test for {@link CheckMandatoryAuthentication}. */
 public class CheckMandatoryAuthenticationTest {
 
     @Test public void testAuthenticated() throws Exception {
         final CheckMandatoryAuthentication action = new CheckMandatoryAuthentication();
-        action.setAuthenticationLookupStrategy(new MockAuthenticated(true));
+        action.setAuthenticationLookupStrategy(FunctionSupport.constant(true));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -37,25 +37,11 @@ public class CheckMandatoryAuthenticationTest {
 
     @Test(expectedExceptions=MessageHandlerException.class) public void testNotAuthenticated() throws Exception {
         final CheckMandatoryAuthentication action = new CheckMandatoryAuthentication();
-        action.setAuthenticationLookupStrategy(new MockAuthenticated(false));
+        action.setAuthenticationLookupStrategy(FunctionSupport.constant(false));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
         action.invoke(mc);
     }
-    
-    private class MockAuthenticated implements Function<MessageContext,Boolean> {
-
-        final boolean authenticated;
-        
-        MockAuthenticated(final boolean flag) {
-            authenticated = flag;
-        }
-        
-        /** {@inheritDoc} */
-        public Boolean apply(MessageContext input) {
-            return authenticated;
-        }
-        
-    }
+
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuerTest.java b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuerTest.java
index d58fbcd..910b7fa 100644
--- a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuerTest.java
+++ b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/CheckMandatoryIssuerTest.java
@@ -17,21 +17,19 @@
 
 package org.opensaml.messaging.handler.impl;
 
-import javax.annotation.Nullable;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.messaging.handler.impl.CheckMandatoryIssuer;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 /** Unit test for {@link CheckMandatoryIssuer}. */
 public class CheckMandatoryIssuerTest {
 
     @Test public void testWithIssuer() throws Exception {
         final CheckMandatoryIssuer action = new CheckMandatoryIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer("issuer"));
+        action.setIssuerLookupStrategy(FunctionSupport.constant("issuer"));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
@@ -40,25 +38,11 @@ public class CheckMandatoryIssuerTest {
 
     @Test(expectedExceptions=MessageHandlerException.class) public void testNoIssuer() throws Exception {
         final CheckMandatoryIssuer action = new CheckMandatoryIssuer();
-        action.setIssuerLookupStrategy(new MockIssuer(null));
+        action.setIssuerLookupStrategy(FunctionSupport.constant(null));
         action.initialize();
 
         final MessageContext mc = new MessageContext();
         action.invoke(mc);
     }
-    
-    private class MockIssuer implements Function<MessageContext,String> {
 
-        final String issuer;
-        
-        MockIssuer(@Nullable final String s) {
-            issuer = s;
-        }
-        
-        /** {@inheritDoc} */
-        public String apply(MessageContext input) {
-            return issuer;
-        }
-        
-    }
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurityTest.java b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurityTest.java
index c81eabb..0259ec2 100644
--- a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurityTest.java
+++ b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/URLEvaluatingMessageChannelSecurityTest.java
@@ -24,9 +24,8 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 public class URLEvaluatingMessageChannelSecurityTest {
     
@@ -42,7 +41,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPSNoPort() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("https://www.example.edu"));
+        handler.setURLLookup(FunctionSupport.constant("https://www.example.edu"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -55,7 +54,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
 
     @Test
     public void testHTTPSWithDefaultPort() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("https://www.example.edu:443"));
+        handler.setURLLookup(FunctionSupport.constant("https://www.example.edu:443"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -68,7 +67,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPSWithDefaultPortAsSecure() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("https://www.example.edu:443"));
+        handler.setURLLookup(FunctionSupport.constant("https://www.example.edu:443"));
         handler.setDefaultPortInsecure(false);
         handler.initialize();
         
@@ -82,7 +81,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPSNoPortAsSecure() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("https://www.example.edu"));
+        handler.setURLLookup(FunctionSupport.constant("https://www.example.edu"));
         handler.setDefaultPortInsecure(false);
         handler.initialize();
         
@@ -96,7 +95,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPSWithNonDefaultPort() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("https://www.example.edu:8443"));
+        handler.setURLLookup(FunctionSupport.constant("https://www.example.edu:8443"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -109,7 +108,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPNoPort() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("http://www.example.edu"));
+        handler.setURLLookup(FunctionSupport.constant("http://www.example.edu"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -122,7 +121,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testHTTPWithPort() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("http://www.example.edu:80"));
+        handler.setURLLookup(FunctionSupport.constant("http://www.example.edu:80"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -135,7 +134,7 @@ public class URLEvaluatingMessageChannelSecurityTest {
     
     @Test
     public void testBadURL() throws ComponentInitializationException, MessageHandlerException {
-        handler.setURLLookup(new MockURLLookup("foobar"));
+        handler.setURLLookup(FunctionSupport.constant("foobar"));
         handler.initialize();
         
         handler.invoke(messageContext);
@@ -148,19 +147,5 @@ public class URLEvaluatingMessageChannelSecurityTest {
     public void testMissingURLLookup() throws ComponentInitializationException {
         handler.initialize();
     }
-    
-    private static class MockURLLookup implements Function<MessageContext, String> {
-        
-        private String url;
 
-        public MockURLLookup(String value) {
-            url = value;
-        }
-
-        /** {@inheritDoc} */
-        public String apply(MessageContext input) {
-            return url;
-        }
-        
-    }
 }
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 fa6460c..574f64f 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.action;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -25,7 +27,6 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -73,7 +74,7 @@ public abstract class AbstractConditionalProfileAction<InboundMessageType, Outbo
     @Override
     protected boolean doPreExecute(
             @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
-        if (activationCondition.apply(profileRequestContext)) {
+        if (activationCondition.test(profileRequestContext)) {
             return super.doPreExecute(profileRequestContext);
         } else {
             LoggerFactory.getLogger(AbstractConditionalProfileAction.class).debug(
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 2d8d73a..532ff47 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
@@ -17,6 +17,9 @@
 
 package org.opensaml.profile.action;
 
+import java.util.function.Function;
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -27,9 +30,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.ParentProfileRequestContextLookup;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 import net.shibboleth.utilities.java.support.component.DestructableComponent;
@@ -45,7 +45,8 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
         extends AbstractConditionalProfileAction {
     
     /** Lookup function for parent ProfileRequestContext. */
-    private static final ParentProfileRequestContextLookup PRC_LOOKUP = new ParentProfileRequestContextLookup();
+    @Nonnull private static final ParentProfileRequestContextLookup<MessageContext> PRC_LOOKUP
+        = new ParentProfileRequestContextLookup<>();
     
     /** The message handler delegate. */
     @Nonnull private DelegateType delegate;
@@ -127,7 +128,7 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
         if (predicate == null) {
             return null;
         } else {
-            return Predicates.compose(predicate, PRC_LOOKUP);
+            return Predicates.compose(predicate::test, PRC_LOOKUP::apply);
         }
     }
 
@@ -145,7 +146,7 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
         if (function == null) {
             return null;
         } else {
-            return Functions.compose(function, PRC_LOOKUP);
+            return function.compose(PRC_LOOKUP);
         }
     }
 
@@ -170,4 +171,4 @@ public abstract class AbstractHandlerDelegatingProfileAction<DelegateType extend
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
index bc644a1..40df4c3 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
@@ -38,7 +38,7 @@ public final class ActionSupport {
      * 
      * @param profileRequestContext the context to carry the event
      */
-    public static void buildProceedEvent(@Nonnull final ProfileRequestContext profileRequestContext) {
+    public static void buildProceedEvent(@Nonnull final ProfileRequestContext<?,?> profileRequestContext) {
         profileRequestContext.removeSubcontext(EventContext.class);
     }
 
@@ -49,7 +49,7 @@ public final class ActionSupport {
      * @param eventId the ID of the event
      * 
      */
-    public static void buildEvent(@Nonnull final ProfileRequestContext profileRequestContext,
+    public static void buildEvent(@Nonnull final ProfileRequestContext<?,?> profileRequestContext,
             @Nonnull @NotEmpty final String eventId) {
         
         Constraint.isNotNull(profileRequestContext, "Profile request context cannot be null");
@@ -58,4 +58,5 @@ public final class ActionSupport {
         
         profileRequestContext.getSubcontext(EventContext.class, true).setEvent(trimmedEventId);
     }
+    
 }
\ No newline at end of file
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 f00c95b..a25bd54 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
@@ -17,19 +17,18 @@
 
 package org.opensaml.profile.context.navigate;
 
+import java.util.function.Function;
+
 import javax.annotation.Nullable;
 
 import org.opensaml.profile.context.EventContext;
 import org.opensaml.profile.context.PreviousEventContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Function;
-
 /** Access either current or previous event from context tree. */
 public class CurrentOrPreviousEventLookup implements Function<ProfileRequestContext,EventContext> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public EventContext apply(@Nullable final ProfileRequestContext input) {
         if (input != null) {
             final EventContext eventCtx = input.getSubcontext(EventContext.class);
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/InboundMessageContextLookup.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/InboundMessageContextLookup.java
index 65da7ce..a38856c 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/InboundMessageContextLookup.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/InboundMessageContextLookup.java
@@ -27,10 +27,9 @@ import org.opensaml.profile.context.ProfileRequestContext;
  * A {@link ContextDataLookupFunction} that returns the inbound {@link MessageContext}
  * for a {@link ProfileRequestContext}.
  */
-public class InboundMessageContextLookup implements ContextDataLookupFunction<ProfileRequestContext, MessageContext> {
+public class InboundMessageContextLookup implements ContextDataLookupFunction<ProfileRequestContext,MessageContext> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public MessageContext apply(@Nullable final ProfileRequestContext input) {
         if (input != null) {
             return input.getInboundMessageContext();
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/OutboundMessageContextLookup.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/OutboundMessageContextLookup.java
index 8f0ba27..3115fb0 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/OutboundMessageContextLookup.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/OutboundMessageContextLookup.java
@@ -27,10 +27,9 @@ import org.opensaml.profile.context.ProfileRequestContext;
  * A {@link ContextDataLookupFunction} that returns the outbound {@link MessageContext}
  * for a {@link ProfileRequestContext}.
  */
-public class OutboundMessageContextLookup implements ContextDataLookupFunction<ProfileRequestContext, MessageContext> {
+public class OutboundMessageContextLookup implements ContextDataLookupFunction<ProfileRequestContext,MessageContext> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public MessageContext apply(@Nullable final ProfileRequestContext input) {
         if (input != null) {
             return input.getOutboundMessageContext();
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ParentProfileRequestContextLookup.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ParentProfileRequestContextLookup.java
index b1e2449..1d7331f 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ParentProfileRequestContextLookup.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ParentProfileRequestContextLookup.java
@@ -35,4 +35,4 @@ public class ParentProfileRequestContextLookup<StartContext extends BaseContext>
         super(ProfileRequestContext.class);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ProfileIdLookup.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ProfileIdLookup.java
index aca1a42..4cc313e 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ProfileIdLookup.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/navigate/ProfileIdLookup.java
@@ -28,7 +28,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 public class ProfileIdLookup implements ContextDataLookupFunction<ProfileRequestContext,String> {
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public String apply(@Nullable final ProfileRequestContext input) {
         if (input != null) {
             return input.getProfileId();
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/BrowserProfilePredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/BrowserProfilePredicate.java
index c3d59c3..50fc4bf 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/BrowserProfilePredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/BrowserProfilePredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * A predicate implementation that indicates whether the request is associated with a browser profile.
@@ -29,8 +29,7 @@ import com.google.common.base.Predicate;
 public class BrowserProfilePredicate implements Predicate<ProfileRequestContext> {
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
         return input != null && input.isBrowserProfile();
     }
     
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
index 812924f..2cb732b 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
@@ -27,7 +27,6 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.opensaml.messaging.context.BaseContext;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterables;
@@ -35,6 +34,7 @@ import com.google.common.net.InetAddresses;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.net.IPRange;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
@@ -101,8 +101,7 @@ public class IPRangePredicate implements Predicate<BaseContext> {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final BaseContext input) {
+    public boolean test(@Nullable final BaseContext input) {
         final String address = httpRequest != null ? httpRequest.getRemoteAddr() : null;
         if (address == null || !InetAddresses.isInetAddress(address)) {
             return false;
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/MessageContextPredicateAdapter.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/MessageContextPredicateAdapter.java
index 806059c..6e35410 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/MessageContextPredicateAdapter.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/MessageContextPredicateAdapter.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.logic;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -24,10 +26,8 @@ import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
-
-import com.google.common.base.Predicate;
+import org.opensaml.profile.context.navigate.ParentProfileRequestContextLookup;
 
 /**
  * A {@link Predicate} which adapts an existing {@link ProfileRequestContext} predicate
@@ -45,13 +45,15 @@ import com.google.common.base.Predicate;
  * via {@link org.opensaml.messaging.handler.AbstractMessageHandler#setActivationCondition(Predicate)}.
  * </p>
  */
-public class MessageContextPredicateAdapter implements Predicate<MessageContext> {
-    
-    /** The adapted predicate. */
-    private Predicate<ProfileRequestContext> adapted;
+public class MessageContextPredicateAdapter
+        implements net.shibboleth.utilities.java.support.logic.Predicate<MessageContext> {
     
     /** The lookup function for the ProfileRequestContext. */
-    private RecursiveTypedParentContextLookup<MessageContext, ProfileRequestContext> prcLookup; 
+    @Nonnull private static final ParentProfileRequestContextLookup<MessageContext> PRC_LOOKUP
+        = new ParentProfileRequestContextLookup<>();
+    
+    /** The adapted predicate. */
+    @Nonnull private Predicate<ProfileRequestContext> adapted;
     
     /** Flag indicating whether failure to resolve a parent ProfileRequestContext satisfies the predicate. */
     private boolean noPRCSatisfies;
@@ -81,22 +83,20 @@ public class MessageContextPredicateAdapter implements Predicate<MessageContext>
                 @ParameterName(name = "unresolvedSatisfies") final boolean unresolvedSatisfies) {
         adapted = Constraint.isNotNull(prcPredicate, "The adapted predicate may not be null");
         noPRCSatisfies = unresolvedSatisfies;
-        prcLookup = new RecursiveTypedParentContextLookup<>(ProfileRequestContext.class);
     }
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final MessageContext input) {
+    public boolean test(@Nullable final MessageContext input) {
         if (input == null) {
             return false;
         }
         
-        final ProfileRequestContext prc = prcLookup.apply(input);
+        final ProfileRequestContext prc = PRC_LOOKUP.apply(input);
         if (prc == null) {
             return noPRCSatisfies;
         }
         
-        return adapted.apply(prc);
+        return adapted.test(prc);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
index 9e980a4..a2e5985 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoConfidentialityMessageChannelPredicate.java
@@ -22,7 +22,7 @@ import javax.annotation.Nullable;
 import org.opensaml.messaging.context.MessageChannelSecurityContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * A predicate implementation that indicates whether the message channel does
@@ -33,8 +33,7 @@ import com.google.common.base.Predicate;
 public class NoConfidentialityMessageChannelPredicate implements Predicate<ProfileRequestContext> {
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
         return input == null
                 || !input.getSubcontext(MessageChannelSecurityContext.class, true).isConfidentialityActive();
     }
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
index 5e62350..da39c21 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/NoIntegrityMessageChannelPredicate.java
@@ -22,7 +22,7 @@ import javax.annotation.Nullable;
 import org.opensaml.messaging.context.MessageChannelSecurityContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * A predicate implementation that indicates whether the message channel does
@@ -33,8 +33,7 @@ import com.google.common.base.Predicate;
 public class NoIntegrityMessageChannelPredicate implements Predicate<ProfileRequestContext> {
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
         return input == null || !input.getSubcontext(MessageChannelSecurityContext.class, true).isIntegrityActive();
     }
     
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 23b54eb..1f9a2de 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.logic;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.servlet.ServletRequest;
@@ -31,8 +33,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-
 /**
  * Access control implementation based on a predicate over a {@link ProfileRequestContext}.
  * 
@@ -74,7 +74,7 @@ public class PredicateAccessControl extends AbstractIdentifiableInitializableCom
             final AccessControlContext acc = prc.getSubcontext(AccessControlContext.class, true);
             acc.setOperation(operation);
             acc.setResource(resource);
-            if (predicate.apply(prc)) {
+            if (predicate.test(prc)) {
                 prc.removeSubcontext(acc);
                 log.debug("{} Granted access based on predicate (Operation: {}, Resource: {})",
                         new Object[] {getLogPrefix(), operation, resource});
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/ProfileIdPredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/ProfileIdPredicate.java
index d71cb7e..6948031 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/ProfileIdPredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/ProfileIdPredicate.java
@@ -23,12 +23,11 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Predicate;
-
 /**
  * A predicate implementation that tests whether a profile request's profile ID matches an expected value.
  */
@@ -47,8 +46,7 @@ public class ProfileIdPredicate implements Predicate<ProfileRequestContext> {
     }
     
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
         return input != null && profileId.equals(input.getProfileId());
     }
     
diff --git a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
index 398ad68..e2cdcc3 100644
--- a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
+++ b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.logic;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nullable;
 
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
@@ -27,8 +29,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
-
 /**
  *
  */
@@ -45,21 +45,21 @@ public class MessageContextPredicateAdapterTest {
         mc.addSubcontext(new MockContext());
         prc.setOutboundMessageContext(mc);
         
-        Assert.assertTrue(adapter.apply(mc));
+        Assert.assertTrue(adapter.test(mc));
         
         mc.clearSubcontexts();
-        Assert.assertFalse(adapter.apply(mc));
+        Assert.assertFalse(adapter.test(mc));
         
-        Assert.assertFalse(adapter.apply(null));
+        Assert.assertFalse(adapter.test(null));
         
         // No parent, unresolved PRC doesn't satisfy (default)
         mc = new MessageContext<>();
         mc.addSubcontext(new MockContext());
-        Assert.assertFalse(adapter.apply(mc));
+        Assert.assertFalse(adapter.test(mc));
         
         // No parent, unresolved PRC does satisfy
         adapter = new MessageContextPredicateAdapter(wrapped, true);
-        Assert.assertTrue(adapter.apply(mc));
+        Assert.assertTrue(adapter.test(mc));
     }
     
     @Test(expectedExceptions=ConstraintViolationException.class)
@@ -75,7 +75,7 @@ public class MessageContextPredicateAdapterTest {
     }
     
     public static class MockPredicate implements Predicate<ProfileRequestContext> {
-        public boolean apply(@Nullable ProfileRequestContext input) {
+        public boolean test(@Nullable ProfileRequestContext input) {
             if (input == null || input.getOutboundMessageContext() == null) {
                 return false;
             }
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/AbstractMessageChannelSecurity.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/AbstractMessageChannelSecurity.java
index 1503370..ce77692 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/AbstractMessageChannelSecurity.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/AbstractMessageChannelSecurity.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.action.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -27,8 +29,6 @@ import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.base.Function;
-
 /**
  * Abstract base class for profile actions which populate a
  * {@link org.opensaml.messaging.context.MessageChannelSecurityContext} on a {@link BaseContext},
@@ -40,7 +40,7 @@ public abstract class AbstractMessageChannelSecurity extends AbstractProfileActi
      * Strategy used to look up the parent {@link BaseContext} on which the
      * {@link org.opensaml.messaging.context.MessageChannelSecurityContext} will be populated.
      */
-    @Nonnull private Function<ProfileRequestContext, BaseContext> parentContextLookupStrategy;
+    @Nonnull private Function<ProfileRequestContext,BaseContext> parentContextLookupStrategy;
     
     /** Parent for eventual context. */
     @Nullable private BaseContext parentContext;
@@ -48,11 +48,7 @@ public abstract class AbstractMessageChannelSecurity extends AbstractProfileActi
     /** Constructor. */
     public AbstractMessageChannelSecurity() {
         //TODO this just returns the input PRC - need better default?
-        parentContextLookupStrategy = new Function<ProfileRequestContext, BaseContext>() {
-            @Nullable public BaseContext apply(@Nullable final ProfileRequestContext input) {
-                return input;
-            }
-        };
+        parentContextLookupStrategy = input -> input;
     }
     
     /**
@@ -63,7 +59,7 @@ public abstract class AbstractMessageChannelSecurity extends AbstractProfileActi
      *          the {@link org.opensaml.messaging.context.MessageChannelSecurityContext}
      */
     public void setParentContextLookupStrategy(
-            @Nonnull final Function<ProfileRequestContext, BaseContext> strategy) {
+            @Nonnull final Function<ProfileRequestContext,BaseContext> strategy) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         parentContextLookupStrategy = Constraint.isNotNull(strategy, "Parent context lookup strategy cannot be null");
@@ -73,11 +69,12 @@ public abstract class AbstractMessageChannelSecurity extends AbstractProfileActi
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
-        parentContext = parentContextLookupStrategy.apply(profileRequestContext);
-        if (parentContext != null) {
-            return super.doPreExecute(profileRequestContext);
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
         }
-        return false;
+        
+        parentContext = parentContextLookupStrategy.apply(profileRequestContext);
+        return parentContext != null;
     }
     
     /**
@@ -86,7 +83,7 @@ public abstract class AbstractMessageChannelSecurity extends AbstractProfileActi
      * 
      * @return the parent context
      */
-    protected BaseContext getParentContext() {
+    @Nullable protected BaseContext getParentContext() {
         return parentContext;
     }
 
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/CheckAccess.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/CheckAccess.java
index 6caf590..adaffdc 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/CheckAccess.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/CheckAccess.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.action.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -37,8 +39,6 @@ import net.shibboleth.utilities.java.support.security.AccessControlService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * This action validates that a request comes from an authorized client, based on an injected service
  * and policy parameters.
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
index 3462031..d8fce21 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,8 +33,6 @@ import org.opensaml.profile.context.navigate.CurrentOrPreviousEventLookup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
index 1b3c09b..4a47fd9 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
@@ -19,6 +19,7 @@ package org.opensaml.profile.action.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -44,9 +45,6 @@ import org.opensaml.security.x509.tls.ClientTLSValidationParametersResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that resolves and populates {@link ClientTLSValidationParameters} on a 
  * {@link ClientTLSSecurityParametersContext} created/accessed via a lookup function, 
@@ -77,9 +75,9 @@ public class PopulateClientTLSValidationParameters extends AbstractProfileAction
      */
     public PopulateClientTLSValidationParameters() {
         // Create context by default.
-        securityParametersContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(ClientTLSSecurityParametersContext.class, true), 
-                new InboundMessageContextLookup());
+        securityParametersContextLookupStrategy =
+                new ChildContextLookup<>(ClientTLSSecurityParametersContext.class, true).compose(
+                        new InboundMessageContextLookup());
     }
 
     /**
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
index e96514b..2f7e2bd 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
@@ -19,6 +19,7 @@ package org.opensaml.profile.action.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -45,9 +46,6 @@ import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that resolves and populates {@link DecryptionParameters} on a {@link SecurityParametersContext}
  * created/accessed via a lookup function, by default on the inbound message context.
@@ -75,8 +73,9 @@ public class PopulateDecryptionParameters extends AbstractConditionalProfileActi
      */
     public PopulateDecryptionParameters() {
         // Create context by default.
-        securityParametersContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SecurityParametersContext.class, true), new InboundMessageContextLookup());
+        securityParametersContextLookupStrategy =
+                new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
+                        new InboundMessageContextLookup());
     }
 
     /**
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateMetricContext.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateMetricContext.java
index cbef56b..b7a0de8 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateMetricContext.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateMetricContext.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.profile.action.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -30,8 +32,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 
 /**
  * An action that populates a {@link MetricContext} child of the {@link ProfileRequestContext} with
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
index bc8182e..2bff499 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
@@ -19,6 +19,7 @@ package org.opensaml.profile.action.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -36,9 +37,6 @@ import org.opensaml.xmlsec.messaging.impl.PopulateSignatureValidationParametersH
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -75,8 +73,9 @@ public class PopulateSignatureValidationParameters
         super(PopulateSignatureValidationParametersHandler.class, new InboundMessageContextLookup());
         
         // Create context by default.
-        securityParametersContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SecurityParametersContext.class, true), new InboundMessageContextLookup());
+        securityParametersContextLookupStrategy =
+                new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
+                        new InboundMessageContextLookup());
     }
 
     /**
@@ -138,8 +137,6 @@ public class PopulateSignatureValidationParameters
         delegate.setConfigurationLookupStrategy(adapt(configurationLookupStrategy));
         delegate.setSecurityParametersContextLookupStrategy(adapt(securityParametersContextLookupStrategy));
         delegate.initialize();
-        
     }
-
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/BindingDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/BindingDescriptor.java
index b5a9314..bae93b4 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/BindingDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/BindingDescriptor.java
@@ -34,6 +34,8 @@
 
 package org.opensaml.saml.common.binding;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -45,7 +47,6 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -165,8 +166,8 @@ public class BindingDescriptor extends AbstractIdentifiableInitializableComponen
 
     /** {@inheritDoc} */
     @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
-        return activationCondition.apply(input);
+    public boolean test(@Nullable final ProfileRequestContext input) {
+        return activationCondition.test(input);
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/AttributeConsumerServiceLookupFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/AttributeConsumerServiceLookupFunction.java
index e06e8d0..3a896ce 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/AttributeConsumerServiceLookupFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/AttributeConsumerServiceLookupFunction.java
@@ -24,7 +24,7 @@ import org.opensaml.saml.common.messaging.context.AttributeConsumingServiceConte
 import org.opensaml.saml.saml2.metadata.AttributeConsumingService;
 
 /**
- * {@link com.google.common.base.Function} to return the {@link AttributeConsumingService}
+ * {@link ContextDataLookupFunction} to return the {@link AttributeConsumingService}
  * from the {@link AttributeConsumingServiceContext}.
  */
 public class AttributeConsumerServiceLookupFunction implements
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextAuthenticationFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextAuthenticationFunction.java
index b0e40b6..2f6c268 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextAuthenticationFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextAuthenticationFunction.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.messaging.context.navigate;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -26,8 +28,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.messaging.context.AbstractAuthenticatableSAMLEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 
-import com.google.common.base.Function;
-
 /**
  * Function that returns the authenticated state of a configured {@link AbstractAuthenticatableSAMLEntityContext},
  * defaulting to {@link SAMLPeerEntityContext}.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextIssuerFunction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextIssuerFunction.java
index d1b2a46..dcc90e6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextIssuerFunction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/context/navigate/SAMLMessageContextIssuerFunction.java
@@ -17,14 +17,14 @@
 
 package org.opensaml.saml.common.messaging.context.navigate;
 
+import java.util.function.Function;
+
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLSelfEntityContext;
 
-import com.google.common.base.Function;
-
 /**
  * Function that returns the entityID from a {@link SAMLPeerEntityContext} or {@link SAMLSelfEntityContext}.
  */
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 9c79638..35973d7 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
@@ -28,10 +28,9 @@ import javax.annotation.Nullable;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProxiedRequesterContext;
 
-import com.google.common.base.Predicate;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
@@ -57,7 +56,7 @@ public class ProxiedRequesterPredicate implements Predicate<MessageContext<?>> {
     }
     
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final MessageContext<?> input) {
+    @Nullable public boolean test(@Nullable final MessageContext<?> input) {
         
         final ProxiedRequesterContext ctx = input != null ? input.getSubcontext(ProxiedRequesterContext.class) : null;
         if (ctx != null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
index a39096f..30ec61c 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
@@ -17,11 +17,13 @@
 
 package org.opensaml.saml.common.messaging.logic;
 
+import javax.annotation.Nullable;
+
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * Predicate that determines whether the binding associated with a message context is
@@ -30,7 +32,7 @@ import com.google.common.base.Predicate;
 public class SignatureCapableBindingPredicate implements Predicate<MessageContext<SAMLObject>> {
 
     /** {@inheritDoc} */
-    public boolean apply(final MessageContext<SAMLObject> input) {
+    public boolean test(@Nullable final MessageContext<SAMLObject> input) {
         return input != null && SAMLBindingSupport.isSigningCapableBinding(input);
     }
 
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 e7e96a9..2e279be 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.messaging.soap;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
@@ -44,8 +46,6 @@ import org.opensaml.security.messaging.HttpClientSecurityContext;
 import org.opensaml.soap.client.SOAPClientContext;
 import org.opensaml.soap.client.security.SOAPClientSecurityContext;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
@@ -409,7 +409,7 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
     public static class DefaultTLSCriteriaSetStrategy implements Function<MessageContext<?>, CriteriaSet> {
 
         /** {@inheritDoc} */
-        public CriteriaSet apply(@Nullable final MessageContext<?> messageContext) {
+        @Nullable public CriteriaSet apply(@Nullable final MessageContext<?> messageContext) {
             final CriteriaSet criteria = new CriteriaSet();
             criteria.add(new UsageCriterion(UsageType.SIGNING));
             
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 176a6bb..c6f0cbf 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
@@ -18,6 +18,8 @@
 package org.opensaml.saml.common.profile;
 
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -34,8 +36,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.SAMLException;
 import org.opensaml.saml.common.SAMLObject;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -257,9 +257,8 @@ public abstract class AbstractNameIdentifierGenerator<NameIdType extends SAMLObj
     }
 
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final ProfileRequestContext input) {
-        return activationCondition.apply(input);
+    public boolean test(@Nullable final ProfileRequestContext input) {
+        return activationCondition.test(input);
     }
 
     /** {@inheritDoc} */
@@ -270,7 +269,7 @@ public abstract class AbstractNameIdentifierGenerator<NameIdType extends SAMLObj
 
         if (!Objects.equals(format, theFormat)) {
             throw new SAMLException("The format to generate does not match the value configured");
-        } else if (!apply(profileRequestContext)) {
+        } else if (!test(profileRequestContext)) {
             return null;
         }
         return doGenerate(profileRequestContext);
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 4778f0f..239c256 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
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -31,6 +32,7 @@ import net.shibboleth.utilities.java.support.component.AbstractInitializableComp
 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.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -41,9 +43,6 @@ import org.opensaml.saml.saml2.core.NameIDPolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-
 /**
  * Base class for implementations of {@link Predicate} that handle evaluation of name identifier content in various
  * scenarios.
@@ -126,7 +125,7 @@ public abstract class AbstractNameIDPolicyPredicate extends AbstractInitializabl
     }
 
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
 
         final SAMLObject target = objectLookupStrategy.apply(input);
         if (target == null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractRegistrationInfoPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractRegistrationInfoPredicate.java
index c6d1a5c..309d90f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractRegistrationInfoPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/AbstractRegistrationInfoPredicate.java
@@ -26,7 +26,7 @@ import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.opensaml.saml.saml2.metadata.Extensions;
 
-import com.google.common.base.Predicate;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 
 /**
  * Base class for predicate that acts on {@link RegistrationInfo} content.
@@ -93,7 +93,7 @@ public abstract class AbstractRegistrationInfoPredicate implements Predicate<Ent
     }
     
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final EntityDescriptor input) {
+    public boolean test(@Nullable final EntityDescriptor input) {
         
         final RegistrationInfo info = getRegistrationInfo(input);
         if (info != null) {
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 5444aad..cbb4213 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
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -37,6 +38,7 @@ import org.opensaml.saml.saml2.core.AuthnRequest;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -44,10 +46,6 @@ import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
-
 /**
  * Predicate that decides whether to handle an error by returning a SAML response to a requester
  * or fail locally.
@@ -76,14 +74,15 @@ public class DefaultLocalErrorPredicate implements Predicate<ProfileRequestConte
     /** Constructor. */
     public DefaultLocalErrorPredicate() {
         // Default: outbound msg context -> SAMLBindingContext
-        bindingContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SAMLBindingContext.class), new OutboundMessageContextLookup());
+        bindingContextLookupStrategy =
+                new ChildContextLookup<>(SAMLBindingContext.class).compose(
+                        new OutboundMessageContextLookup());
         
         // Default: outbound msg context -> SAMLPeerEntityContext -> SAMLEndpointContext
-        endpointContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SAMLEndpointContext.class),
-                Functions.compose(new ChildContextLookup<>(SAMLPeerEntityContext.class),
-                        new OutboundMessageContextLookup()));
+        endpointContextLookupStrategy =
+                new ChildContextLookup<>(SAMLEndpointContext.class).compose(
+                        new ChildContextLookup<>(SAMLPeerEntityContext.class)).compose(
+                                new OutboundMessageContextLookup());
         
         eventContextLookupStrategy = new CurrentOrPreviousEventLookup();
         
@@ -132,7 +131,7 @@ public class DefaultLocalErrorPredicate implements Predicate<ProfileRequestConte
     
 // Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final ProfileRequestContext input) {
+    public boolean test(@Nullable final ProfileRequestContext input) {
         
         if (input == null) {
             return true;
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 fd60536..43d1469 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
@@ -43,7 +43,6 @@ import org.opensaml.saml.saml2.metadata.Extensions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
@@ -55,6 +54,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
@@ -149,8 +149,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
 
 // Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final EntityDescriptor input) {
+    public boolean test(@Nullable final EntityDescriptor input) {
         if (input == null) {
             return false;
         }
@@ -193,9 +192,9 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
         final EntityAttributesMatcher matcher = new EntityAttributesMatcher(entityAttributes);
         
         if (matchAll) {
-            return Iterables.all(candidateSet, matcher);
+            return Iterables.all(candidateSet, matcher::test);
         } else {
-            if (Iterables.tryFind(candidateSet, matcher).isPresent()) {
+            if (Iterables.tryFind(candidateSet, matcher::test).isPresent()) {
                 return true;
             }
         }
@@ -337,8 +336,7 @@ public class EntityAttributesPredicate implements Predicate<EntityDescriptor> {
         }
                 
         /** {@inheritDoc} */
-        @Override
-        public boolean apply(@Nonnull final Candidate input) {
+        public boolean test(@Nonnull final Candidate input) {
             final List<String> tagvals = input.values;
             final List<Pattern> tagexps = input.regexps;
 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityGroupNamePredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityGroupNamePredicate.java
index e36da22..691f0f3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityGroupNamePredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityGroupNamePredicate.java
@@ -34,13 +34,13 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableSet;
 
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -105,8 +105,7 @@ public class EntityGroupNamePredicate implements Predicate<EntityDescriptor> {
     
 // Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
-    @Override
-    public boolean apply(@Nullable final EntityDescriptor input) {
+    public boolean test(@Nullable final EntityDescriptor input) {
         
         if (input == null) {
             log.debug("Input was null, condition is false");
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityIdPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityIdPredicate.java
index 6ee9def..c332136 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityIdPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/EntityIdPredicate.java
@@ -26,13 +26,13 @@ import javax.annotation.Nullable;
 
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableSet;
 
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
@@ -62,7 +62,7 @@ public class EntityIdPredicate implements Predicate<EntityDescriptor> {
     }
     
     /** {@inheritDoc} */
-    @Override public boolean apply(@Nullable final EntityDescriptor input) {
+    public boolean test(@Nullable final EntityDescriptor input) {
         
         if (input == null || input.getEntityID() == null) {
             return false;
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 6c1bae2..1381ee9 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.common.profile.logic;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -35,8 +36,6 @@ import org.opensaml.saml.saml2.metadata.SSODescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Function to return a set of candidate NameIdentifier/NameID Format values derived from an entity's
  * SAML metadata. 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/RegistrationPolicyPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/RegistrationPolicyPredicate.java
index 6648c41..54816ea 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/RegistrationPolicyPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/profile/logic/RegistrationPolicyPredicate.java
@@ -39,7 +39,7 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
  * Predicate to determine whether one of a set of names matches an entity's
  * {@link RegistrationPolicy}.
  */
-public class RegistrationPolicyPredicate  extends AbstractRegistrationInfoPredicate {
+public class RegistrationPolicyPredicate extends AbstractRegistrationInfoPredicate {
 
     /** Policies to match on. */
     @Nonnull @NonnullElements private final Set<String> policySet;
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 f6b7e45..32363f7 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
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -31,7 +32,6 @@ import org.joda.time.format.DateTimeFormatter;
 import org.opensaml.saml.saml1.binding.artifact.SAML1ArtifactBuilderFactory;
 import org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 
@@ -178,7 +178,7 @@ public class SAMLConfiguration {
             allowedBindingURLSchemes = Collections.emptyList();
         } else {
             final Collection<String> normalized = Collections2.transform(
-                    StringSupport.normalizeStringCollection(schemes), lowercaseFunction);
+                    StringSupport.normalizeStringCollection(schemes), lowercaseFunction::apply);
             allowedBindingURLSchemes = new ArrayList<>(normalized);
         }
     }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/entity/EvaluableEntityDescriptorCriterion.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/entity/EvaluableEntityDescriptorCriterion.java
index aaf91b7..1e6f006 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/entity/EvaluableEntityDescriptorCriterion.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/entity/EvaluableEntityDescriptorCriterion.java
@@ -17,9 +17,9 @@
 
 package org.opensaml.saml.metadata.criteria.entity;
 
-import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import java.util.function.Predicate;
 
-import com.google.common.base.Predicate;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 
@@ -28,4 +28,4 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
  */
 public interface EvaluableEntityDescriptorCriterion extends Predicate<EntityDescriptor>, Criterion {
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/role/EvaluableRoleDescriptorCriterion.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/role/EvaluableRoleDescriptorCriterion.java
index fc856c4..b645941 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/role/EvaluableRoleDescriptorCriterion.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/criteria/role/EvaluableRoleDescriptorCriterion.java
@@ -17,9 +17,9 @@
 
 package org.opensaml.saml.metadata.criteria.role;
 
-import org.opensaml.saml.saml2.metadata.RoleDescriptor;
+import java.util.function.Predicate;
 
-import com.google.common.base.Predicate;
+import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 
@@ -28,4 +28,4 @@ import net.shibboleth.utilities.java.support.resolver.Criterion;
  */
 public interface EvaluableRoleDescriptorCriterion extends Predicate<RoleDescriptor>, Criterion {
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/common/IsTimeboundSAMLObjectValidPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/common/IsTimeboundSAMLObjectValidPredicate.java
index 8fdd57a..d305a6e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/common/IsTimeboundSAMLObjectValidPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/common/IsTimeboundSAMLObjectValidPredicate.java
@@ -17,9 +17,11 @@
 
 package org.opensaml.saml.saml2.common;
 
-import org.opensaml.core.xml.XMLObject;
+import java.util.function.Predicate;
+
+import javax.annotation.Nullable;
 
-import com.google.common.base.Predicate;
+import org.opensaml.core.xml.XMLObject;
 
 /**
  * Predicate which applies {@link SAML2Support#isValid(XMLObject)} to the target input.
@@ -27,7 +29,7 @@ import com.google.common.base.Predicate;
 public class IsTimeboundSAMLObjectValidPredicate implements Predicate<XMLObject> {
 
     /** {@inheritDoc} */
-    public boolean apply(final XMLObject input) {
+    public boolean test(@Nullable final XMLObject input) {
         if (input == null) {
             return false;
         }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java
index f9df9c9..1698e05 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -35,8 +37,6 @@ import org.opensaml.saml.saml2.core.NameID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
 import com.google.common.base.Strings;
 
 /**
@@ -65,8 +65,7 @@ public abstract class AbstractSAML2NameIDGenerator extends AbstractNameIdentifie
         nameBuilder = (SAMLObjectBuilder<NameID>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<NameID>getBuilderOrThrow(
                         NameID.DEFAULT_ELEMENT_NAME);
-        requestLookupStrategy =
-                Functions.compose(new MessageLookup<>(AuthnRequest.class), new InboundMessageContextLookup());
+        requestLookupStrategy = new MessageLookup<>(AuthnRequest.class).compose(new InboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
index 5f8dbff..f13fa19 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.binding.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -37,8 +39,6 @@ import org.opensaml.soap.util.SOAPSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * MessageHandler to add {@link ChannelBindings} headers to an outgoing SOAP envelope.
  */
@@ -55,7 +55,6 @@ public class AddChannelBindingsHeaderHandler extends AbstractMessageHandler {
     
     /** Constructor. */
     public AddChannelBindingsHeaderHandler() {
-        super();
         channelBindingsContextLookupStrategy = new ChildContextLookup<>(ChannelBindingsContext.class);
     }
     
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 b391202..27cdd88 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.common.binding.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -39,9 +40,6 @@ import org.opensaml.xmlsec.criterion.SignatureSigningConfigurationCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -86,9 +84,9 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
         securityParametersContextLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class, true);
 
         // Default: msg context -> SAMLPeerEntityContext -> SAMLMetadataContext
-        metadataContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<SAMLPeerEntityContext,SAMLMetadataContext>(SAMLMetadataContext.class),
-                new ChildContextLookup<MessageContext,SAMLPeerEntityContext>(SAMLPeerEntityContext.class));
+        metadataContextLookupStrategy =
+                new ChildContextLookup<>(SAMLMetadataContext.class).compose(
+                        new ChildContextLookup<>(SAMLPeerEntityContext.class));
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
index b21ef47..19d96da 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandler.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.common.binding.impl;
 
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -45,9 +46,6 @@ import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * SAML {@link org.opensaml.messaging.handler.MessageHandler} that attaches an {@link AttributeConsumingServiceContext}
  * to the {@link SAMLMetadataContext} based on the content of an {@link AuthnRequest} in the message context.
@@ -74,11 +72,9 @@ public class SAMLAddAttributeConsumingServiceHandler extends AbstractMessageHand
      * Constructor.
      */
     public SAMLAddAttributeConsumingServiceHandler() {
-        super();
         metadataContextLookupStrategy =
-                Functions.compose(
-                        new ChildContextLookup<SAMLPeerEntityContext,SAMLMetadataContext>(SAMLMetadataContext.class),
-                        new ChildContextLookup<MessageContext,SAMLPeerEntityContext>(SAMLPeerEntityContext.class));
+                new ChildContextLookup<>(SAMLMetadataContext.class).compose(
+                        new ChildContextLookup<>(SAMLPeerEntityContext.class));
         authnRequestLookupStrategy = new AuthnRequestLookup();
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
index 3a1067d..516c25e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.common.profile.impl;
 
 import java.util.Collection;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -43,9 +44,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action adds an audience restriction condition to every assertion contained in a SAML 1/2
  * response, with the audiences obtained from a lookup function. If the containing Conditions is not present,
@@ -83,8 +81,7 @@ public class AddAudienceRestrictionToAssertions extends AbstractConditionalProfi
     public AddAudienceRestrictionToAssertions() {
         addingAudiencesToExistingRestriction = true;
 
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
index ac08455..9d47543 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -46,9 +47,6 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that adds the <code>InResponseTo</code> attribute to a response message if a SAML message ID is set on
  * the inbound message context.
@@ -77,8 +75,7 @@ public class AddInResponseToToResponse extends AbstractConditionalProfileAction
     
     /** Constructor. */
     public AddInResponseToToResponse() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
         requestIdLookupStrategy = new DefaultRequestIdLookupStrategy();
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
index f1ccafa..596a5d7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -35,9 +37,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that adds the <code>NotBefore</code> attribute to every assertion in a SAML 1/2
  * response message. If the containing Conditions is not present, it will be created.
@@ -58,8 +57,7 @@ public class AddNotBeforeConditionToAssertions extends AbstractConditionalProfil
     
     /** Constructor. */
     public AddNotBeforeConditionToAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
index 03c07b6..ac5640c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -38,9 +40,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that adds the <code>NotBefore</code> attribute to every assertion in a SAML 1/2
  * response message. If the containing Conditions is not present, it will be created.
@@ -67,8 +66,7 @@ public class AddNotOnOrAfterConditionToAssertions extends AbstractConditionalPro
 
     /** Constructor. */
     public AddNotOnOrAfterConditionToAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
         
         defaultAssertionLifetime = 5 * 60 * 1000;
     }
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 9713b46..6f4db21 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.common.profile.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -39,9 +40,6 @@ import org.opensaml.xmlsec.context.SecurityParametersContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -87,14 +85,15 @@ public class PopulateSignatureSigningParameters
         super(PopulateSignatureSigningParametersHandler.class, new OutboundMessageContextLookup());
 
         // Create context by default.
-        securityParametersContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SecurityParametersContext.class, true), new OutboundMessageContextLookup());
+        securityParametersContextLookupStrategy =
+                new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
+                        new OutboundMessageContextLookup());
 
         // Default: outbound msg context -> SAMLPeerEntityContext -> SAMLMetadataContext
-        metadataContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SAMLMetadataContext.class),
-                Functions.compose(new ChildContextLookup<>(SAMLPeerEntityContext.class),
-                        new OutboundMessageContextLookup()));
+        metadataContextLookupStrategy =
+                new ChildContextLookup<>(SAMLMetadataContext.class).compose(
+                        new ChildContextLookup<>(SAMLPeerEntityContext.class).compose(
+                                new OutboundMessageContextLookup()));
         
         setErrorEvent(EventIds.INVALID_SEC_CFG);
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
index f6b904c..1da6e07 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.common.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -44,9 +46,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that signs assertions in a SAML 1/2 Response returned by a lookup strategy,
  * by default the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -76,8 +75,7 @@ public class SignAssertions extends AbstractProfileAction {
 
     /** Constructor. */
     public SignAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
         securityParametersLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class);
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
index a4c5b05..644b91c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.common.profile.impl;
 
 import java.util.Objects;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -39,9 +40,6 @@ import org.opensaml.soap.messaging.context.SOAP11Context;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that verifies two sets of {@link ChannelBindings} from two different {@link ChannelBindingsContext}
  * objects obtained via lookup functions, by default from below the inbound message context and from below
@@ -82,14 +80,18 @@ public class VerifyChannelBindings extends AbstractProfileAction {
 
     /** Constructor. */
     public VerifyChannelBindings() {
-        channelBindingsLookupStrategy1 = Functions.compose(new ChildContextLookup<>(ChannelBindingsContext.class),
-                new InboundMessageContextLookup());
-        channelBindingsLookupStrategy2 = Functions.compose(new ChildContextLookup<>(ChannelBindingsContext.class),
-                Functions.compose(new ChildContextLookup<>(SOAP11Context.class), new InboundMessageContextLookup()));
+        channelBindingsLookupStrategy1 =
+                new ChildContextLookup<>(ChannelBindingsContext.class).compose(
+                        new InboundMessageContextLookup());
+        
+        channelBindingsLookupStrategy2 =
+                new ChildContextLookup<>(ChannelBindingsContext.class).compose(
+                        new ChildContextLookup<>(SOAP11Context.class).compose(
+                                new InboundMessageContextLookup()));
                 
         channelBindingsCreationStrategy =
-                Functions.compose(new ChildContextLookup<>(ChannelBindingsContext.class, true),
-                                new OutboundMessageContextLookup());
+                new ChildContextLookup<>(ChannelBindingsContext.class, true).compose(
+                        new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/entity/impl/EvaluableEntityRoleEntityDescriptorCriterion.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/entity/impl/EvaluableEntityRoleEntityDescriptorCriterion.java
index 48076cc..67d9274 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/entity/impl/EvaluableEntityRoleEntityDescriptorCriterion.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/entity/impl/EvaluableEntityRoleEntityDescriptorCriterion.java
@@ -59,7 +59,7 @@ public class EvaluableEntityRoleEntityDescriptorCriterion implements EvaluableEn
     }
 
     /** {@inheritDoc} */
-    public boolean apply(final EntityDescriptor entityDescriptor) {
+    public boolean test(final EntityDescriptor entityDescriptor) {
         if (entityDescriptor == null) {
             return false;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableEntityRoleDescriptorCriterion.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableEntityRoleDescriptorCriterion.java
index 59ad39a..c811ba2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableEntityRoleDescriptorCriterion.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableEntityRoleDescriptorCriterion.java
@@ -60,7 +60,7 @@ public class EvaluableEntityRoleDescriptorCriterion implements EvaluableRoleDesc
     }
     
     /** {@inheritDoc} */
-    public boolean apply(final RoleDescriptor input) {
+    public boolean test(final RoleDescriptor input) {
         if (input == null) {
             return false;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableProtocolRoleDescriptorCriterion.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableProtocolRoleDescriptorCriterion.java
index 0cf9c79..6eb070e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableProtocolRoleDescriptorCriterion.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/criteria/role/impl/EvaluableProtocolRoleDescriptorCriterion.java
@@ -61,7 +61,7 @@ public class EvaluableProtocolRoleDescriptorCriterion implements EvaluableRoleDe
     }
     
     /** {@inheritDoc} */
-    public boolean apply(final RoleDescriptor input) {
+    public boolean test(final RoleDescriptor input) {
         if (input == null) {
             return false;
         }
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 b1ede4b..e77ac5c 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -33,8 +34,6 @@ import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 
-import com.google.common.base.Function;
-
 /**
  * Function which implements a basic strategy for extracting trusted names for PKIX trust engine evaluation.
  * 
@@ -53,7 +52,6 @@ import com.google.common.base.Function;
 public class BasicDynamicTrustedNamesStrategy implements Function<XMLObject, Set<String>> {
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull @NonnullElements public Set<String> apply(@Nullable final XMLObject input) {
         if (input == null) {
             return Collections.emptySet();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
index 947a723..ed1db75 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -49,7 +50,6 @@ import org.opensaml.saml.saml2.metadata.Extensions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Collections2;
@@ -153,7 +153,7 @@ public class EntityAttributesFilter extends AbstractInitializableComponent imple
         }
         
         for (final Map.Entry<Predicate<EntityDescriptor>,Collection<Attribute>> entry : applyMap.asMap().entrySet()) {
-            if (!entry.getValue().isEmpty() && entry.getKey().apply(descriptor)) {
+            if (!entry.getValue().isEmpty() && entry.getKey().test(descriptor)) {
                 
                 // Put extension objects in place.
                 Extensions extensions = descriptor.getExtensions();
@@ -222,7 +222,7 @@ public class EntityAttributesFilter extends AbstractInitializableComponent imple
                     while (iter.hasNext()) {
                         final SAMLObject attribute = iter.next();
                         if (attribute instanceof Attribute) {
-                            if (!attributeFilter.apply((Attribute) attribute)) {
+                            if (!attributeFilter.test((Attribute) attribute)) {
                                 log.warn("Filtering pre-existing attribute '{}' from entity '{}'",
                                         ((Attribute) attribute).getName(), descriptor.getEntityID());
                                 iter.remove();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
index 047237c..a2a0b5c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -45,7 +46,6 @@ import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
@@ -133,7 +133,7 @@ public class NameIDFormatFilter extends AbstractInitializableComponent implement
      */
     protected void filterEntityDescriptor(@Nonnull final EntityDescriptor descriptor) {
         for (final Map.Entry<Predicate<EntityDescriptor>,Collection<String>> entry : applyMap.asMap().entrySet()) {
-            if (!entry.getValue().isEmpty() && entry.getKey().apply(descriptor)) {
+            if (!entry.getValue().isEmpty() && entry.getKey().test(descriptor)) {
                 for (final RoleDescriptor role : descriptor.getRoleDescriptors()) {
                     filterRoleDescriptor(role, entry.getValue());
                 }
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 906f3fa..77548fd 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -34,8 +35,6 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-
 /**
  * A filter that removes any {@link EntityDescriptor} that does or does not match a {@link Predicate}, thus
  * a whitelist or blacklist. 
@@ -127,7 +126,7 @@ public class PredicateFilter implements MetadataFilter {
         } else if (metadata instanceof EntityDescriptor) {
             final EntityDescriptor entity = (EntityDescriptor) metadata;
             
-            if (Direction.EXCLUDE.equals(direction) == condition.apply(entity)) {
+            if (Direction.EXCLUDE.equals(direction) == condition.test(entity)) {
                 log.trace("Filtering out entity {} ", entity.getEntityID());
                 return null;
             } else {
@@ -153,7 +152,7 @@ public class PredicateFilter implements MetadataFilter {
             final Iterator<EntityDescriptor> entityDescriptorsItr = entityDescriptors.iterator();
             while (entityDescriptorsItr.hasNext()) {
                 final EntityDescriptor entityDescriptor = entityDescriptorsItr.next();
-                if (Direction.EXCLUDE.equals(direction) == condition.apply(entityDescriptor)) {
+                if (Direction.EXCLUDE.equals(direction) == condition.test(entityDescriptor)) {
                     log.trace("Filtering out entity {} from group {}", entityDescriptor.getEntityID(),
                             descriptor.getName());
                     emptyEntityDescriptors.add(entityDescriptor);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ScriptedTrustedNamesFunction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ScriptedTrustedNamesFunction.java
index 160e1a0..9dd5561 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ScriptedTrustedNamesFunction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ScriptedTrustedNamesFunction.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -33,8 +34,6 @@ import net.shibboleth.utilities.java.support.scripting.EvaluableScript;
 
 import org.opensaml.core.xml.XMLObject;
 
-import com.google.common.base.Function;
-
 /**
  * A scripted {@link Function} which can be injected into
  * {@link SignatureValidationFilter#setDynamicTrustedNamesStrategy(Function)}.
@@ -73,7 +72,6 @@ public class ScriptedTrustedNamesFunction extends AbstractScriptEvaluator implem
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nullable public Set<String> apply(@Nullable final XMLObject context) {
         return (Set<String>) evaluate(context);
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
index 9039327..2f7520a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -44,8 +45,6 @@ import org.opensaml.xmlsec.signature.support.SignatureTrustEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
index 3e9fb19..ae3aeba 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
@@ -55,7 +55,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 
-import com.google.common.base.Function;
 import com.google.common.base.Strings;
 import com.google.common.collect.Collections2;
 import com.google.common.io.ByteStreams;
@@ -324,13 +323,7 @@ public abstract class AbstractDynamicHTTPMetadataResolver extends AbstractDynami
         } else {
             supportedContentTypes = new ArrayList<>(Collections2.transform(
                     StringSupport.normalizeStringCollection(types),
-                    new Function<String,String>() {
-                        @Override
-                        @Nullable public String apply(@Nullable final String input) {
-                            return input == null ? null : input.toLowerCase();
-                        }
-                    }
-                    ));
+                    s -> s == null ? null : s.toLowerCase()));
         }
     }
     
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 cfc5094..53bd0c5 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
@@ -32,6 +32,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -62,10 +64,8 @@ import com.codahale.metrics.Gauge;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.RatioGauge;
 import com.codahale.metrics.Timer.Context;
-import com.google.common.base.Function;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
@@ -170,7 +170,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
     private XMLObjectLoadSaveManager<EntityDescriptor> persistentCacheManager;
     
     /** Function for generating the String key used with the cache manager. */
-    private Function<EntityDescriptor, String> persistentCacheKeyGenerator;
+    private Function<EntityDescriptor,String> persistentCacheKeyGenerator;
     
     /** Flag indicating whether should initialize from the persistent cache in the background. */
     private boolean initializeFromPersistentCacheInBackground;
@@ -1435,7 +1435,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
             @Nonnull final EntityDescriptor descriptor) {
         
         if (isValid(descriptor)) {
-            if (getInitializationFromCachePredicate().apply(descriptor)) {
+            if (getInitializationFromCachePredicate().test(descriptor)) {
                 try {
                     processNewMetadata(descriptor, descriptor.getEntityID(), true);
                     log.trace("{} Successfully processed EntityDescriptor with entityID '{}' from cache", 
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 bab1dc6..5e329cc 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
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -63,7 +64,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/DefaultLocalDynamicSourceKeyGenerator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/DefaultLocalDynamicSourceKeyGenerator.java
index 05044e0..30a8a5b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/DefaultLocalDynamicSourceKeyGenerator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/DefaultLocalDynamicSourceKeyGenerator.java
@@ -24,14 +24,13 @@ import org.opensaml.saml.common.binding.artifact.SAMLArtifact;
 import org.opensaml.saml.common.binding.artifact.SAMLSourceIDArtifact;
 import org.opensaml.saml.criterion.ArtifactCriterion;
 
-import com.google.common.base.Function;
 import com.google.common.io.BaseEncoding;
 
 import net.shibboleth.utilities.java.support.codec.StringDigester;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
 /**
- * A default implementation of {@link Function} for use as a source key generator 
+ * A default implementation of {@link EntityIDDigestGenerator} for use as a source key generator 
  * with {@link LocalDynamicMetadataResolver}.
  * 
  * <p>
@@ -68,7 +67,7 @@ public class DefaultLocalDynamicSourceKeyGenerator extends EntityIDDigestGenerat
     }
 
     /** {@inheritDoc} */
-    public String apply(@Nullable final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         if (criteria == null) {
             return null;
         }
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 2d25762..0b69bde 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
@@ -18,6 +18,7 @@
 package org.opensaml.saml.metadata.resolver.impl;
 
 import java.security.NoSuchAlgorithmException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -25,8 +26,6 @@ import javax.annotation.Nullable;
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.security.crypto.JCAConstants;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.codec.StringDigester;
 import net.shibboleth.utilities.java.support.codec.StringDigester.OutputFormat;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -86,8 +85,7 @@ public class EntityIDDigestGenerator implements Function<CriteriaSet, String> {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public String apply(final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         if (criteria == null || !criteria.contains(EntityIdCriterion.class)) {
             return null;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
index d3f6182..9825ad9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.metadata.resolver.impl;
 
 import java.util.Timer;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -26,8 +27,6 @@ import org.apache.http.client.HttpClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -45,17 +44,17 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 public class FunctionDrivenDynamicHTTPMetadataResolver extends AbstractDynamicHTTPMetadataResolver {
     
     /** Logger. */
-    private final Logger log = LoggerFactory.getLogger(FunctionDrivenDynamicHTTPMetadataResolver.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(FunctionDrivenDynamicHTTPMetadataResolver.class);
     
     /** Function for building the request URL. */
-    private Function<CriteriaSet, String> requestURLBuilder;
+    @Nonnull private Function<CriteriaSet, String> requestURLBuilder;
 
     /**
      * Constructor.
      *
      * @param client the instance of {@link HttpClient} used to fetch remote metadata
      */
-    public FunctionDrivenDynamicHTTPMetadataResolver(final HttpClient client) {
+    public FunctionDrivenDynamicHTTPMetadataResolver(@Nonnull final HttpClient client) {
         this(null, client);
     }
     
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 0e19026..0fcdba9 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -27,8 +29,6 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Function which examines an entity ID from supplied criteria and returns it as a metadata request URL 
  * if and only if the entity ID is an HTTP or HTTPS URL.
@@ -36,10 +36,10 @@ import com.google.common.base.Function;
 public class HTTPEntityIDRequestURLBuilder implements Function<CriteriaSet, String> {
     
     /** Logger. */
-    private final Logger log = LoggerFactory.getLogger(HTTPEntityIDRequestURLBuilder.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPEntityIDRequestURLBuilder.class);
 
     /** {@inheritDoc} */
-    @Override @Nullable public String apply(@Nonnull final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         Constraint.isNotNull(criteria, "Criteria was null");
         if (!criteria.contains(EntityIdCriterion.class)) {
             log.trace("Criteria did not contain entity ID, unable to build request URL");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
index 5c1dc59..c8aecfd 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
@@ -23,6 +23,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Timer;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.net.ssl.SSLPeerUnverifiedException;
 
@@ -68,7 +69,7 @@ import org.slf4j.LoggerFactory;
 public class HTTPMetadataResolver extends AbstractReloadingMetadataResolver {
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(HTTPMetadataResolver.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPMetadataResolver.class);
 
     /** HTTP Client used to pull the metadata. */
     private HttpClient httpClient;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/IdentityEntityIDGenerator.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/IdentityEntityIDGenerator.java
index b6a346d..3ea551d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/IdentityEntityIDGenerator.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/IdentityEntityIDGenerator.java
@@ -17,9 +17,11 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
-import org.opensaml.core.criterion.EntityIdCriterion;
+import java.util.function.Function;
+
+import javax.annotation.Nullable;
 
-import com.google.common.base.Function;
+import org.opensaml.core.criterion.EntityIdCriterion;
 
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
@@ -29,7 +31,7 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 public class IdentityEntityIDGenerator implements Function<CriteriaSet, String> {
     
     /** {@inheritDoc} */
-    public String apply(final CriteriaSet input) {
+    @Nullable public String apply(@Nullable final CriteriaSet input) {
         if (input == null) {
             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 ab7ebe1..62b503f 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver.impl;
 
 import java.io.IOException;
 import java.util.Timer;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -30,8 +31,6 @@ import org.opensaml.core.xml.persist.XMLObjectLoadSaveManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
@@ -42,7 +41,7 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 public class LocalDynamicMetadataResolver extends AbstractDynamicMetadataResolver {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(LocalDynamicMetadataResolver.class);
+    @Nullable private Logger log = LoggerFactory.getLogger(LocalDynamicMetadataResolver.class);
     
     /** The manager for the local store of metadata. */
     @Nonnull private XMLObjectLoadSaveManager<XMLObject> sourceManager;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
index a68e8a5..9cfd889 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/MetadataQueryProtocolRequestURLBuilder.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -27,7 +28,6 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 import com.google.common.escape.Escaper;
@@ -134,7 +134,7 @@ public class MetadataQueryProtocolRequestURLBuilder implements Function<Criteria
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public String apply(@Nonnull final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         Constraint.isNotNull(criteria, "Criteria was null");
         if (criteria.contains(EntityIdCriterion.class)) {
             log.debug("Criteria contained entity ID, building on that basis");
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 2873187..f15cd2f 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
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
 import java.util.UUID;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -40,7 +41,6 @@ import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 
@@ -277,14 +277,14 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
                 log.debug("Resolved {} RoleDescriptor candidates via role criteria, performing predicate filtering", 
                         Iterables.size(candidates));
             }
-            return predicateFilterCandidates(Iterables.filter(candidates, predicate), criteria, false);
+            return predicateFilterCandidates(Iterables.filter(candidates, predicate::test), criteria, false);
         } else if (isResolveViaPredicatesOnly()) {
             final Iterable<RoleDescriptor> candidates = getAllCandidates(entityDescriptorsSource);
             if (log.isDebugEnabled()) {
                 log.debug("Resolved {} RoleDescriptor total candidates for predicate-only resolution", 
                         Iterables.size(candidates));
             }
-            return predicateFilterCandidates(Iterables.filter(candidates, predicate), criteria, true);
+            return predicateFilterCandidates(Iterables.filter(candidates, predicate::test), criteria, true);
         } else {
             log.debug("Found no role criteria and predicate-only resolution is disabled, returning empty collection");
             return Collections.emptySet();
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 34b4b5b..f98de96 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
@@ -17,6 +17,7 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
+import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -32,8 +33,6 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Function which produces a URL by evaluating a supplied regular expression against the criteria entity ID, 
  * and applying the result to a supplied replacement string.
@@ -75,7 +74,7 @@ import com.google.common.base.Function;
 public class RegexRequestURLBuilder implements Function<CriteriaSet, String> {
     
     /** Logger. */
-    private final Logger log = LoggerFactory.getLogger(RegexRequestURLBuilder.class);
+    @Nullable private final Logger log = LoggerFactory.getLogger(RegexRequestURLBuilder.class);
     
     /** The compiled pattern. */
     private Pattern pattern;
@@ -107,8 +106,7 @@ public class RegexRequestURLBuilder implements Function<CriteriaSet, String> {
     }
 
     /** {@inheritDoc} */
-    @Override
-    @Nullable public String apply(@Nonnull final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         Constraint.isNotNull(criteria, "Criteria was null");
         if (!criteria.contains(EntityIdCriterion.class)) {
             log.trace("Criteria did not contain entity ID, unable to build request URL");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilder.java
index 741a974..58c9cf4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilder.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver.impl;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -29,7 +30,6 @@ import org.opensaml.core.criterion.EntityIdCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.net.UrlEscapers;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -214,8 +214,7 @@ public class TemplateRequestURLBuilder implements Function<CriteriaSet, String>
     }
 
     /** {@inheritDoc} */
-    @Override
-    @Nullable public String apply(@Nonnull final CriteriaSet criteria) {
+    @Nullable public String apply(@Nullable final CriteriaSet criteria) {
         Constraint.isNotNull(criteria, "Criteria was null");
         if (!criteria.contains(EntityIdCriterion.class)) {
             log.trace("Criteria did not contain entity ID, unable to build request URL");
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 42bc973..03c5d79 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
@@ -23,6 +23,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -40,7 +41,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
@@ -109,7 +109,7 @@ public class EndpointMetadataIndex implements MetadataIndex {
                     endpointType = endpoint.getElementQName();
                 }
                 
-                if (endpointSelectionPredicate.apply(endpoint)) {
+                if (endpointSelectionPredicate.test(endpoint)) {
                     final String location = StringSupport.trimOrNull(endpoint.getLocation());
                     if (location != null) {
                         log.trace("Indexing Endpoint: role '{}', endpoint type '{}', location '{}'", 
@@ -249,7 +249,7 @@ public class EndpointMetadataIndex implements MetadataIndex {
         }
 
         /** {@inheritDoc} */
-        public boolean apply(@Nullable final Endpoint endpoint) {
+        public boolean test(@Nullable final Endpoint endpoint) {
             if (endpoint == null) {
                 return false;
             }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndex.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndex.java
index b67c56b..27abbdf 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndex.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndex.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.metadata.resolver.index.impl;
 
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,8 +33,6 @@ import org.opensaml.saml.metadata.resolver.index.MetadataIndex;
 import org.opensaml.saml.metadata.resolver.index.MetadataIndexKey;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
-import com.google.common.base.Function;
-
 /**
  * Implementation of {@link MetadataIndex} which is based on injected strategy functions.
  */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/LockableMetadataIndexManager.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/LockableMetadataIndexManager.java
index 891ee6e..48a08f5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/LockableMetadataIndexManager.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/LockableMetadataIndexManager.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.index.impl;
 import java.util.Set;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -27,8 +28,6 @@ import javax.annotation.Nullable;
 import org.opensaml.saml.metadata.resolver.index.MetadataIndex;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
@@ -72,4 +71,4 @@ public class LockableMetadataIndexManager<T> extends MetadataIndexManager<T> {
     }
 
 
-}
+}
\ No newline at end of file
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 2779142..a239d95 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
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,7 +33,6 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableSet;
 
@@ -60,7 +60,7 @@ public class MetadataIndexManager<T> {
     private Map<MetadataIndex, MetadataIndexStore<T>> indexes;
     
     /** Function to extract the data item to be indexed from an EntityDescriptor. */
-    private Function<EntityDescriptor, T> entityDescriptorFunction;
+    private Function<EntityDescriptor,T> entityDescriptorFunction;
     
     /**
      * Constructor.
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 6ecd88a..f752a8e 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
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -51,7 +52,6 @@ import org.opensaml.security.crypto.JCAConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
index 83b2e68..ba0cff9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml1.profile.impl;
 
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -41,9 +42,6 @@ import org.opensaml.saml.saml1.profile.SAML1ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action to add a {@link DoNotCacheCondition} to every {@link Assertion} in a {@link Response} message.
  * If the containing {@link Conditions} is not present, it will be created.
@@ -64,8 +62,7 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
 
     /** Constructor. */
     public AddDoNotCacheConditionToAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
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 b1c3a85..110e880 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml1.profile.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -46,8 +47,6 @@ import org.opensaml.saml.saml1.profile.SAML1NameIdentifierGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
  * in all the assertions found via a lookup strategy, by default from the outbound message context.
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
index 1413321..e77e2b8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -42,8 +44,6 @@ import org.opensaml.saml.saml1.core.StatusCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Action that creates an empty {@link Response}, and sets it as the
  * message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -74,11 +74,7 @@ public class AddResponseShell extends AbstractProfileAction {
     /** Constructor. */
     public AddResponseShell() {
         // Default strategy is a 16-byte secure random source.
-        idGeneratorLookupStrategy = new Function<ProfileRequestContext,IdentifierGenerationStrategy>() {
-            public IdentifierGenerationStrategy apply(final ProfileRequestContext input) {
-                return new SecureRandomIdentifierGenerationStrategy();
-            }
-        };
+        idGeneratorLookupStrategy = prc -> new SecureRandomIdentifierGenerationStrategy();
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
index 3fe54f6..531fb55 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
@@ -23,6 +23,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -52,9 +54,6 @@ import org.opensaml.saml.saml1.core.StatusMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -101,8 +100,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
     
     /** Constructor. */
     public AddStatusToResponse() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
         detailedErrorsCondition = Predicates.alwaysFalse();
         defaultStatusCodes = Collections.emptyList();
         detailedErrors = false;
@@ -190,7 +188,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
             return false;
         }
 
-        detailedErrors = detailedErrorsCondition.apply(profileRequestContext);
+        detailedErrors = detailedErrorsCondition.test(profileRequestContext);
         
         log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled");
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
index bc033a7..ca9eb7c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Objects;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -51,8 +52,6 @@ import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -110,8 +109,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
         
         overwriteExisting = true;
         
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
         confirmationMethods = Collections.emptyList();
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
index 06c302a..552c4d7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml1.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -44,9 +46,6 @@ import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -99,12 +98,11 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
         
         overwriteExisting = true;
         
-        nameIdentifierContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SAMLSubjectNameIdentifierContext.class, true),
-                new InboundMessageContextLookup());
+        nameIdentifierContextLookupStrategy =
+                new ChildContextLookup<>(SAMLSubjectNameIdentifierContext.class, true).compose(
+                        new InboundMessageContextLookup());
         
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
index 7c6a199..d98f127 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml1.profile.impl;
 
 import java.io.IOException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -45,9 +46,6 @@ import org.opensaml.saml.saml1.core.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that resolves SAML 1.x artifacts inside a {@link Request} located via a lookup strategy,
  * by default from the inbound message context, and maps them to the corresponding assertions.
@@ -94,12 +92,9 @@ public class ResolveArtifacts extends AbstractProfileAction {
     
     /** Constructor. */
     public ResolveArtifacts() {
-        requestLookupStrategy =
-                Functions.compose(new MessageLookup<>(Request.class), new InboundMessageContextLookup());
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
-        requesterLookupStrategy =
-                Functions.compose(new SAMLMessageContextIssuerFunction(), new InboundMessageContextLookup());
+        requestLookupStrategy = new MessageLookup<>(Request.class).compose(new InboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
+        requesterLookupStrategy = new SAMLMessageContextIssuerFunction().compose(new InboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandler.java
index a5dee89..a230674 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.binding.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -28,8 +30,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.messaging.context.SAMLConsentContext;
 import org.opensaml.saml.saml2.core.StatusResponseType;
 
-import com.google.common.base.Function;
-
 /**
  * MessageHandler to set the Consent attribute on a {@link StatusResponseType} message.
  */
@@ -40,7 +40,6 @@ public class AddConsentToResponseHandler extends AbstractMessageHandler {
 
     /** Constructor. */
     public AddConsentToResponseHandler() {
-        super();
         consentContextStrategy = new ChildContextLookup<>(SAMLConsentContext.class);
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandler.java
index 4030afc..c71dae1 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.binding.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -28,8 +30,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.messaging.context.SAMLConsentContext;
 import org.opensaml.saml.saml2.core.RequestAbstractType;
 
-import com.google.common.base.Function;
-
 /**
  * MessageHandler to get the Consent attribute from a {@link RequestAbstractType} message.
  */
@@ -40,7 +40,6 @@ public class ExtractConsentFromRequestHandler extends AbstractMessageHandler {
 
     /** Constructor. */
     public ExtractConsentFromRequestHandler() {
-        super();
         consentContextStrategy = new ChildContextLookup<>(SAMLConsentContext.class, true);
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandler.java
index 9b0f996..3151c80 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.binding.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -30,8 +32,6 @@ import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.core.RequesterID;
 import org.opensaml.saml.saml2.core.Scoping;
 
-import com.google.common.base.Function;
-
 /**
  * MessageHandler to extract the proxied chain of requesters from an {@link AuthnRequest} message's
  * {@link Scoping} element.
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
index 86f0610..3f8e4f8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
@@ -17,6 +17,9 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -39,9 +42,6 @@ import org.opensaml.xmlsec.context.SecurityParametersContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -81,9 +81,10 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
     /** Constructor. */
     public AbstractDecryptAction() {
         errorFatal = true;
-        securityParamsLookupStrategy = Functions.compose(new ChildContextLookup<>(SecurityParametersContext.class),
-                new InboundMessageContextLookup());
-        messageLookupStrategy = Functions.compose(new MessageLookup<>(Object.class), new InboundMessageContextLookup());
+        securityParamsLookupStrategy =
+                new ChildContextLookup<>(SecurityParametersContext.class).compose(
+                        new InboundMessageContextLookup());
+        messageLookupStrategy = new MessageLookup<>(Object.class).compose(new InboundMessageContextLookup());
         decryptionPredicate = Predicates.alwaysTrue();
     }
     
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 11d76ce..5d833df 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
@@ -19,6 +19,8 @@ package org.opensaml.saml.saml2.profile.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -43,9 +45,6 @@ import org.opensaml.xmlsec.encryption.support.KeyEncryptionParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -86,9 +85,10 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
     
     /** Constructor. */
     public AbstractEncryptAction() {
-        encryptionCtxLookupStrategy = Functions.compose(new ChildContextLookup<>(EncryptionContext.class),
-                new OutboundMessageContextLookup());
-        keyPlacementLookupStrategy = FunctionSupport.<ProfileRequestContext,KeyPlacement>constant(KeyPlacement.INLINE);
+        encryptionCtxLookupStrategy =
+                new ChildContextLookup<>(EncryptionContext.class).compose(
+                        new OutboundMessageContextLookup());
+        keyPlacementLookupStrategy = FunctionSupport.constant(KeyPlacement.INLINE);
         encryptToSelf = Predicates.alwaysFalse();
     }
     
@@ -190,7 +190,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
         final List<KeyEncryptionParameters> keyParams = new ArrayList<>();
         keyParams.add(new KeyEncryptionParameters(params, recipient));
         
-        if (encryptToSelf.apply(profileRequestContext)) {
+        if (encryptToSelf.test(profileRequestContext)) {
             log.debug("{} Encryption to self was indicated", getLogPrefix());
             String selfRecipient = null;
             if (selfRecipientLookupStrategy != null) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
index 2049eed..9436d28 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
@@ -44,8 +46,6 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Abstract action that creates an empty object derived from {@link StatusResponseType},
  * and sets it as the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -86,11 +86,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
     /** Constructor. */
     public AbstractResponseShellAction() {
         // Default strategy is a 16-byte secure random source.
-        idGeneratorLookupStrategy = new Function<ProfileRequestContext,IdentifierGenerationStrategy>() {
-            public IdentifierGenerationStrategy apply(final ProfileRequestContext input) {
-                return new SecureRandomIdentifierGenerationStrategy();
-            }
-        };
+        idGeneratorLookupStrategy = prc -> new SecureRandomIdentifierGenerationStrategy();
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
index 22dc607..b440b76 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -41,9 +43,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action to add {@link ChannelBindings} extension(s) to every {@link Assertion} in a {@link Response} message.
  * 
@@ -74,10 +73,10 @@ public class AddChannelBindingsToAssertions extends AbstractConditionalProfileAc
 
     /** Constructor. */
     public AddChannelBindingsToAssertions() {
-        channelBindingsContextLookupStrategy = Functions.compose(new ChildContextLookup<>(ChannelBindingsContext.class),
-                new OutboundMessageContextLookup());
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        channelBindingsContextLookupStrategy =
+                new ChildContextLookup<>(ChannelBindingsContext.class).compose(
+                        new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
index 6b1ac7c..f9d9eed 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -42,9 +44,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action to add a {@link GeneratedKey} extension to every {@link Assertion} in a {@link Response} message.
  * 
@@ -75,10 +74,10 @@ public class AddGeneratedKeyToAssertions extends AbstractConditionalProfileActio
 
     /** Constructor. */
     public AddGeneratedKeyToAssertions() {
-        ecpContextLookupStrategy = Functions.compose(new ChildContextLookup<>(ECPContext.class),
-                new OutboundMessageContextLookup());
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        ecpContextLookupStrategy =
+                new ChildContextLookup<>(ECPContext.class).compose(
+                        new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
 
     /**
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 3fc0372..768edd0 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
@@ -19,6 +19,8 @@ package org.opensaml.saml.saml2.profile.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -58,9 +60,6 @@ import org.opensaml.saml.saml2.profile.SAML2NameIDGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 
 /**
@@ -151,8 +150,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         
         overwriteExisting = true;
         
-        requestLookupStrategy =
-                Functions.compose(new MessageLookup<>(AuthnRequest.class), new InboundMessageContextLookup());
+        requestLookupStrategy = new MessageLookup<>(AuthnRequest.class).compose(new InboundMessageContextLookup());
         assertionsLookupStrategy = new AssertionStrategy();
 
         // Default strategy is a 16-byte secure random source.
@@ -302,7 +300,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
             return false;
         }
         
-        if (!nameIDPolicyPredicate.apply(profileRequestContext)) {
+        if (!nameIDPolicyPredicate.test(profileRequestContext)) {
             log.debug("{} NameIDPolicy was unacceptable", getLogPrefix());
             ActionSupport.buildEvent(profileRequestContext, SAMLEventIds.INVALID_NAMEID_POLICY);
             return false;
@@ -485,8 +483,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         
         /** Constructor. */
         public NameIDPolicyLookupFunction() {
-            requestLookupStrategy =
-                    Functions.compose(new MessageLookup<>(AuthnRequest.class), new InboundMessageContextLookup());
+            requestLookupStrategy = new MessageLookup<>(AuthnRequest.class).compose(new InboundMessageContextLookup());
         }
 
         /**
@@ -499,7 +496,6 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         }
         
         /** {@inheritDoc} */
-        @Override
         @Nullable public SAMLObject apply(@Nullable final ProfileRequestContext profileRequestContext) {
             
             final AuthnRequest request = requestLookupStrategy.apply(profileRequestContext);
@@ -524,8 +520,9 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         
         /** Constructor. */
         public RequesterIdFromIssuerFunction() {
-            requestLookupStrategy = Functions.compose(new MessageLookup<>(RequestAbstractType.class),
-                    new InboundMessageContextLookup());
+            requestLookupStrategy =
+                    new MessageLookup<>(RequestAbstractType.class).compose(
+                            new InboundMessageContextLookup());
         }
 
         /**
@@ -539,7 +536,6 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
         }
         
         /** {@inheritDoc} */
-        @Override
         @Nullable public String apply(@Nullable final ProfileRequestContext profileRequestContext) {
             
             final RequestAbstractType request = requestLookupStrategy.apply(profileRequestContext);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
index 3ccd392..bf6c827 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -39,9 +41,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action to add a {@link OneTimeUse} condition to every {@link Assertion} in a {@link Response} message.
  * If the containing {@link Conditions} is not present, it will be created.
@@ -62,8 +61,7 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
 
     /** Constructor. */
     public AddOneTimeUseConditionToAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
index d5fadb6..464e423 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml2.profile.impl;
 
 import java.util.Collection;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -44,9 +45,6 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action adds an {@link ProxyRestriction} to every {@link Assertion} contained in a SAML 2
  * response, with the audiences and count obtained from a lookup function. If the containing
@@ -77,8 +75,7 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
     
     /** Constructor. */
     public AddProxyRestrictionToAssertions() {
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
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 bb4ad03..e7e874d 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
@@ -47,8 +49,6 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * Action that creates an empty object derived from {@link StatusResponseType},
  * and sets it as the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -89,11 +89,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
     /** Constructor. */
     public AddStatusResponseShell() {
         // Default strategy is a 16-byte secure random source.
-        idGeneratorLookupStrategy = new Function<ProfileRequestContext,IdentifierGenerationStrategy>() {
-            public IdentifierGenerationStrategy apply(final ProfileRequestContext input) {
-                return new SecureRandomIdentifierGenerationStrategy();
-            }
-        };
+        idGeneratorLookupStrategy = prc -> new SecureRandomIdentifierGenerationStrategy();
     }
     
     /**
@@ -153,6 +149,10 @@ public class AddStatusResponseShell extends AbstractProfileAction {
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
 
         final MessageContext outboundMessageCtx = profileRequestContext.getOutboundMessageContext();
         if (outboundMessageCtx == null) {
@@ -178,7 +178,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
 
         outboundMessageCtx.setMessage(null);
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
index 9f35908..4babb7b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
@@ -23,6 +23,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -51,9 +53,6 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -101,7 +100,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
     /** Constructor. */
     public AddStatusToResponse() {
         responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(StatusResponseType.class), new OutboundMessageContextLookup());
+                new MessageLookup<>(StatusResponseType.class).compose(new OutboundMessageContextLookup());
         detailedErrorsCondition = Predicates.alwaysFalse();
         defaultStatusCodes = Collections.emptyList();
         detailedErrors = false;
@@ -190,7 +189,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
             return false;
         }
 
-        detailedErrors = detailedErrorsCondition.apply(profileRequestContext);
+        detailedErrors = detailedErrorsCondition.test(profileRequestContext);
         
         log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled");
         
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 1ba4acb..54c5df5 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
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml2.profile.impl;
 
 import java.net.URI;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -49,9 +50,6 @@ import org.opensaml.saml.saml2.core.SubjectConfirmationData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that builds {@link SubjectConfirmation} and adds it to the {@link Subject} of all the assertions
  * found in a {@link Response}. The message to update is returned by a lookup strategy, by default the message
@@ -117,8 +115,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<SubjectConfirmationData>getBuilderOrThrow(
                         SubjectConfirmationData.DEFAULT_ELEMENT_NAME);
         overwriteExisting = true;
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
         
         // Default pulls from servlet request.
         addressLookupStrategy = new Function<ProfileRequestContext,String>() {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
index 04381c8..8e5cb0e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -42,9 +44,6 @@ import org.opensaml.saml.saml2.core.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that builds a {@link NameID} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -97,12 +96,11 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
         
         overwriteExisting = true;
         
-        nameIdentifierContextLookupStrategy = Functions.compose(
-                new ChildContextLookup<>(SAMLSubjectNameIdentifierContext.class, true),
-                new InboundMessageContextLookup());
+        nameIdentifierContextLookupStrategy =
+                new ChildContextLookup<>(SAMLSubjectNameIdentifierContext.class, true).compose(
+                        new InboundMessageContextLookup());
         
-        responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(Response.class), new OutboundMessageContextLookup());
+        responseLookupStrategy = new MessageLookup<>(Response.class).compose(new OutboundMessageContextLookup());
     }
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
index c71091f..d84bcd7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAssertions.java
@@ -88,7 +88,7 @@ public class DecryptAssertions extends AbstractDecryptAction {
     @Nullable private Assertion processEncryptedAssertion(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final EncryptedAssertion encAssert) throws DecryptionException {
         
-        if (!getDecryptionPredicate().apply(
+        if (!getDecryptionPredicate().test(
                 new Pair<ProfileRequestContext,EncryptedElementType>(profileRequestContext, encAssert))) {
             return null;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
index 3c4ef0d..532ce9f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptAttributes.java
@@ -94,7 +94,7 @@ public class DecryptAttributes extends AbstractDecryptAction {
     @Nullable private Attribute processEncryptedAttribute(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final EncryptedAttribute encAttr) throws DecryptionException {
         
-        if (!getDecryptionPredicate().apply(
+        if (!getDecryptionPredicate().test(
                 new Pair<ProfileRequestContext,EncryptedElementType>(profileRequestContext, encAttr))) {
             return null;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
index a6efedb..b00494c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/DecryptNameIDs.java
@@ -117,7 +117,7 @@ public class DecryptNameIDs extends AbstractDecryptAction {
     @Nullable private NameID processEncryptedID(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final EncryptedID encID) throws DecryptionException {
         
-        if (!getDecryptionPredicate().apply(
+        if (!getDecryptionPredicate().test(
                 new Pair<ProfileRequestContext,EncryptedElementType>(profileRequestContext, encID))) {
             return null;
         }
@@ -146,7 +146,7 @@ public class DecryptNameIDs extends AbstractDecryptAction {
     @Nullable private NewID processNewEncryptedID(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final NewEncryptedID encID) throws DecryptionException {
         
-        if (!getDecryptionPredicate().apply(
+        if (!getDecryptionPredicate().test(
                 new Pair<ProfileRequestContext,EncryptedElementType>(profileRequestContext, encID))) {
             return null;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
index 8943a48..3a93965 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml2.profile.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -46,9 +47,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that encrypts all assertions in a {@link Response} message obtained from a lookup
  * strategy, by default the outbound message context.
@@ -76,7 +74,8 @@ public class EncryptAssertions extends AbstractEncryptAction {
 
     public EncryptAssertions() {
         responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(StatusResponseType.class), new OutboundMessageContextLookup());
+                new MessageLookup<>(StatusResponseType.class).compose(
+                        new OutboundMessageContextLookup());
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
index 5f2d9de..d866d7e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml2.profile.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -48,9 +49,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that encrypts all attributes in a {@link Response} message obtained from a lookup strategy,
  * by default the outbound message context.
@@ -76,7 +74,8 @@ public class EncryptAttributes extends AbstractEncryptAction {
     /** Constructor. */
     public EncryptAttributes() {
         responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(StatusResponseType.class), new OutboundMessageContextLookup());
+                new MessageLookup<>(StatusResponseType.class).compose(
+                        new OutboundMessageContextLookup());
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
index 68e2f0b..2efb964 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -63,9 +64,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that encrypts all {@link NameID}s in a message obtained from a lookup strategy,
  * by default the outbound message context.
@@ -94,8 +92,7 @@ public class EncryptNameIDs extends AbstractEncryptAction {
     
     /** Constructor. */
     public EncryptNameIDs() {
-        messageLookupStrategy =
-                Functions.compose(new MessageLookup<>(SAMLObject.class), new OutboundMessageContextLookup());
+        messageLookupStrategy = new MessageLookup<>(SAMLObject.class).compose(new OutboundMessageContextLookup());
         excludedFormats = Collections.singleton(NameID.ENTITY);
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
index 99924c6..0556f39 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml2.profile.impl;
 
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -38,9 +39,6 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action to create and populate an {@link ECPContext} based on the request and, when encryption is in use,
  * generating a session key.
@@ -71,11 +69,11 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
      * @throws NoSuchAlgorithmException if unable to construct default random generator
      */
     public PopulateECPContext() throws NoSuchAlgorithmException {
-        ecpContextCreationStrategy = Functions.compose(new ChildContextLookup<>(ECPContext.class, true),
-                new OutboundMessageContextLookup());
+        ecpContextCreationStrategy =
+                new ChildContextLookup<>(ECPContext.class, true).compose(new OutboundMessageContextLookup());
         
-        encryptionContextLookupStrategy = Functions.compose(new ChildContextLookup<>(EncryptionContext.class),
-                new OutboundMessageContextLookup());
+        encryptionContextLookupStrategy =
+                new ChildContextLookup<>(EncryptionContext.class).compose(new OutboundMessageContextLookup());
         
         try {
             randomGenerator = SecureRandom.getInstance("SHA1PRNG");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
index e65a99d..06a030a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml2.profile.impl;
 
 import java.io.IOException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -43,9 +44,6 @@ import org.opensaml.saml.saml2.core.ArtifactResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 /**
  * Action that resolves a SAML 2.0 artifact inside an {@link ArtifactResolve} request located
  * via a lookup strategy, by default from the inbound message context, and maps it to the
@@ -93,12 +91,10 @@ public class ResolveArtifact extends AbstractProfileAction {
     
     /** Constructor. */
     public ResolveArtifact() {
-        requestLookupStrategy =
-                Functions.compose(new MessageLookup<>(ArtifactResolve.class), new InboundMessageContextLookup());
+        requestLookupStrategy = new MessageLookup<>(ArtifactResolve.class).compose(new InboundMessageContextLookup());
         responseLookupStrategy =
-                Functions.compose(new MessageLookup<>(ArtifactResponse.class), new OutboundMessageContextLookup());
-        requesterLookupStrategy =
-                Functions.compose(new SAMLMessageContextIssuerFunction(), new InboundMessageContextLookup());
+                new MessageLookup<>(ArtifactResponse.class).compose(new OutboundMessageContextLookup());
+        requesterLookupStrategy = new SAMLMessageContextIssuerFunction().compose(new InboundMessageContextLookup());
     }
     
     /**
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 9370b7b..d8cdc61 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
@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -49,8 +50,6 @@ import org.opensaml.security.x509.X509Credential;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  *  Function which implements default behavior for building an instance of {@link ValidationContext}
  *  from an instance of {@link SAML20AssertionTokenValidationInput}.
@@ -59,7 +58,7 @@ public class DefaultSAML20AssertionValidationContextBuilder
         implements Function<SAML20AssertionTokenValidationInput, ValidationContext> {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(DefaultSAML20AssertionValidationContextBuilder.class);
+    @Nullable private Logger log = LoggerFactory.getLogger(DefaultSAML20AssertionValidationContextBuilder.class);
     
     /** A function for resolving the signature validation CriteriaSet for a particular function. */
     private Function<Pair<MessageContext, Assertion>, CriteriaSet> signatureCriteriaSetFunction;
@@ -71,7 +70,6 @@ public class DefaultSAML20AssertionValidationContextBuilder
      * Constructor.
      */
     public DefaultSAML20AssertionValidationContextBuilder() {
-        super();
         signatureRequired = true;
     }
 
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 505fb4e..e411556 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml2.wssecurity.messaging.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -52,7 +53,6 @@ import org.opensaml.soap.wssecurity.messaging.WSSecurityContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.Strings;
 
 /**
@@ -84,7 +84,6 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
     
     /** Constructor. */
     public WSSecuritySAML20AssertionTokenSecurityHandler() {
-        super();
         setInvalidFatal(true);
         setValidationContextBuilder(new DefaultSAML20AssertionValidationContextBuilder());
     }
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 6a9e190..d0e4c05 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.security.impl;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -43,7 +44,6 @@ import org.opensaml.xmlsec.impl.BasicEncryptionConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 
 /**
@@ -53,7 +53,7 @@ public class InlineSelfEncryptionParametersStrategy
         implements Function<Pair<ProfileRequestContext, EncryptionParameters>, List<EncryptionParameters>> {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(InlineSelfEncryptionParametersStrategy.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(InlineSelfEncryptionParametersStrategy.class);
     
     /** Credential resolver for self-encryption. */
     @Nonnull private CredentialResolver credentialResolver;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolver.java
index d55ed17..4fc503b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/SAMLMetadataEncryptionParametersResolver.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.security.impl;
 
 import java.security.Key;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -50,8 +51,6 @@ import org.opensaml.xmlsec.signature.DigestMethod;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-
 /**
  * A specialization of {@link BasicEncryptionParametersResolver} which resolves
  * credentials and algorithm preferences against SAML metadata via a {@link MetadataCredentialResolver}.
@@ -71,10 +70,10 @@ import com.google.common.base.Predicate;
 public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionParametersResolver {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(SAMLMetadataEncryptionParametersResolver.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(SAMLMetadataEncryptionParametersResolver.class);
     
     /** Metadata credential resolver. */
-    private MetadataCredentialResolver credentialResolver;
+    @Nonnull private MetadataCredentialResolver credentialResolver;
     
     /**
      * Flag indicating whether the resolver should attempt to merge RSAOAEPParameters
@@ -269,8 +268,8 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
         if (digestMethods.size() > 0) {
             final DigestMethod digestMethod = (DigestMethod) digestMethods.get(0);
             final String digestAlgorithm = StringSupport.trimOrNull(digestMethod.getAlgorithm());
-            if (digestAlgorithm != null && whitelistBlacklistPredicate.apply(digestAlgorithm)
-                    && algoSupportPredicate.apply(digestAlgorithm)) {
+            if (digestAlgorithm != null && whitelistBlacklistPredicate.test(digestAlgorithm)
+                    && algoSupportPredicate.test(digestAlgorithm)) {
                 params.setDigestMethod(digestAlgorithm);
             }
         }
@@ -280,7 +279,7 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
             if (mgfs.size() > 0) {
                 final MGF mgf = (MGF) mgfs.get(0);
                 final String mgfAlgorithm = StringSupport.trimOrNull(mgf.getAlgorithm());
-                if (mgfAlgorithm != null && whitelistBlacklistPredicate.apply(mgfAlgorithm)) {
+                if (mgfAlgorithm != null && whitelistBlacklistPredicate.test(mgfAlgorithm)) {
                     params.setMaskGenerationFunction(mgfAlgorithm);
                 }
             }
@@ -327,14 +326,14 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
                 final String algorithm = encryptionMethod.getAlgorithm();
                 log.trace("Evaluating SAML metadata EncryptionMethod algorithm for key transport: {}", algorithm);
                 if (isKeyTransportAlgorithm(algorithm) 
-                        && whitelistBlacklistPredicate.apply(algorithm) 
-                        && getAlgorithmRuntimeSupportedPredicate().apply(algorithm)
+                        && whitelistBlacklistPredicate.test(algorithm) 
+                        && getAlgorithmRuntimeSupportedPredicate().test(algorithm)
                         && credentialSupportsEncryptionMethod(keyTransportCredential, encryptionMethod)
                         && evaluateEncryptionMethodChildren(encryptionMethod, criteria, whitelistBlacklistPredicate)) {
                     
                     boolean accepted = true;
                     if (keyTransportPredicate != null) {
-                        accepted = keyTransportPredicate.apply(new KeyTransportAlgorithmPredicate.SelectionInput(
+                        accepted = keyTransportPredicate.test(new KeyTransportAlgorithmPredicate.SelectionInput(
                                 algorithm, dataEncryptionAlgorithm, keyTransportCredential));
                     }
                     
@@ -382,8 +381,8 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
                 final String algorithm = encryptionMethod.getAlgorithm();
                 log.trace("Evaluating SAML metadata EncryptionMethod algorithm for data encryption: {}", algorithm);
                 if (isDataEncryptionAlgorithm(algorithm) 
-                        && whitelistBlacklistPredicate.apply(algorithm)
-                        && getAlgorithmRuntimeSupportedPredicate().apply(algorithm)
+                        && whitelistBlacklistPredicate.test(algorithm)
+                        && getAlgorithmRuntimeSupportedPredicate().test(algorithm)
                         && evaluateEncryptionMethodChildren(encryptionMethod, criteria, whitelistBlacklistPredicate)) {
                     log.debug("Resolved data encryption algorithm URI from SAML metadata EncryptionMethod: {}",
                             algorithm);
@@ -447,8 +446,8 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
             final DigestMethod digestMethod = (DigestMethod) digestMethods.get(0);
             final String digestAlgorithm = StringSupport.trimOrNull(digestMethod.getAlgorithm());
             if (digestAlgorithm != null) {
-                if (!whitelistBlacklistPredicate.apply(digestAlgorithm) 
-                        || !algoSupportPredicate.apply(digestAlgorithm)) {
+                if (!whitelistBlacklistPredicate.test(digestAlgorithm) 
+                        || !algoSupportPredicate.test(digestAlgorithm)) {
                     log.debug("Rejecting RSA OAEP EncryptionMethod due to unsupported or disallowed DigestMethod: {}",
                             digestAlgorithm);
                     return false;
@@ -462,7 +461,7 @@ public class SAMLMetadataEncryptionParametersResolver extends BasicEncryptionPar
                 final MGF mgf = (MGF) mgfs.get(0);
                 final String mgfAlgorithm = StringSupport.trimOrNull(mgf.getAlgorithm());
                 if (mgfAlgorithm != null) {
-                    if (!whitelistBlacklistPredicate.apply(mgfAlgorithm)) {
+                    if (!whitelistBlacklistPredicate.test(mgfAlgorithm)) {
                         log.debug("Rejecting RSA OAEP EncryptionMethod due to disallowed MGF: {}", mgfAlgorithm);
                         return false;
                     }
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 de80a4c..ceaf073 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.security.impl;
 
 import java.security.Key;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -42,8 +43,6 @@ import org.opensaml.xmlsec.impl.BasicSignatureSigningParametersResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-
 /**
  * A specialization of {@link BasicSignatureSigningParametersResolver} which also supports input of SAML metadata, 
  * specifically the {@link SigningMethod} and {@link DigestMethod} extension elements.
@@ -89,8 +88,8 @@ public class SAMLMetadataSignatureSigningParametersResolver extends BasicSignatu
                     signingMethod.getAlgorithm(), signingMethod.getMinKeySize(), signingMethod.getMaxKeySize());
             
             if (signingMethod.getAlgorithm() == null 
-                    || !getAlgorithmRuntimeSupportedPredicate().apply(signingMethod.getAlgorithm())
-                    || !whitelistBlacklistPredicate.apply(signingMethod.getAlgorithm())) {
+                    || !getAlgorithmRuntimeSupportedPredicate().test(signingMethod.getAlgorithm())
+                    || !whitelistBlacklistPredicate.test(signingMethod.getAlgorithm())) {
                 continue;
             }
             
@@ -184,8 +183,8 @@ public class SAMLMetadataSignatureSigningParametersResolver extends BasicSignatu
             log.trace("Evaluating SAML metadata DigestMethod with algorithm: {}", digestMethod.getAlgorithm());
             
             if (digestMethod.getAlgorithm() != null 
-                    && getAlgorithmRuntimeSupportedPredicate().apply(digestMethod.getAlgorithm())
-                    && whitelistBlacklistPredicate.apply(digestMethod.getAlgorithm())) {
+                    && getAlgorithmRuntimeSupportedPredicate().test(digestMethod.getAlgorithm())
+                    && whitelistBlacklistPredicate.test(digestMethod.getAlgorithm())) {
                 log.debug("Resolved reference digest method algorithm URI from SAML metadata DigestMethod: {}",
                         digestMethod.getAlgorithm());
                 return digestMethod.getAlgorithm();
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 8c3dd0e..297bf98 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
@@ -34,8 +34,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Functions;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
@@ -92,7 +90,7 @@ public class PopulateSignatureSigningParametersHandlerTest extends OpenSAMLInitB
         // Test copy from PRC to MessageContext
         handler.setSignatureSigningParametersResolver(new MockResolver(true));
         handler.setExistingParametersContextLookupStrategy(
-                Functions.compose(new ChildContextLookup(SecurityParametersContext.class),
+                new ChildContextLookup(SecurityParametersContext.class).compose(
                         new ParentProfileRequestContextLookup()));
         handler.setSecurityParametersContextLookupStrategy(
                 new ChildContextLookup<MessageContext,SecurityParametersContext>(SecurityParametersContext.class, true));
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 6ce947d..8e1409b 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
@@ -17,9 +17,8 @@
 
 package org.opensaml.saml.common.profile.impl;
 
-import java.util.Collection;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -40,7 +39,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 
 /** {@link AddAudienceRestrictionToAssertions} unit test. */
@@ -53,11 +51,7 @@ public class AddAudienceRestrictionToAssertionsTest extends OpenSAMLInitBaseTest
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         action = new AddAudienceRestrictionToAssertions();
-        action.setAudienceRestrictionsLookupStrategy(new Function<ProfileRequestContext,Collection<String>>() {
-            public Collection<String> apply(ProfileRequestContext input) {
-                return ImmutableList.of(AUDIENCE1, AUDIENCE2);
-            }
-        });
+        action.setAudienceRestrictionsLookupStrategy(FunctionSupport.constant(ImmutableList.of(AUDIENCE1, AUDIENCE2)));
         action.initialize();
     }
     
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 8f3dd36..980741f 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
@@ -18,6 +18,7 @@
 package org.opensaml.saml.common.profile.impl;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -36,8 +37,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** {@link AddNotOnOrAfterConditionToAssertions} unit test. */
 public class AddNotOnOrAfterConditionToAssertionsTest  extends OpenSAMLInitBaseTestCase {
 
@@ -135,13 +134,7 @@ public class AddNotOnOrAfterConditionToAssertionsTest  extends OpenSAMLInitBaseT
         response.getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
 
         final AddNotOnOrAfterConditionToAssertions action = new AddNotOnOrAfterConditionToAssertions();
-        action.setAssertionLifetimeStrategy(
-                new Function<ProfileRequestContext,Long>() {
-                    public Long apply(ProfileRequestContext input) {
-                        return 3L * 60 * 1000;
-                    }
-                }
-                );
+        action.setAssertionLifetimeStrategy(FunctionSupport.constant(3L * 60 * 1000));
         action.initialize();
 
         action.execute(prc);
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 6970c6c..b766708 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
@@ -25,7 +25,6 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
-import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.RequestContextBuilder;
 import org.opensaml.profile.action.ActionTestingSupport;
@@ -40,8 +39,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Functions;
-
 /** Unit test for {@link PopulateSignatureSigningParameters}. */
 public class PopulateSignatureSigningParametersTest extends OpenSAMLInitBaseTestCase {
 
@@ -92,8 +89,7 @@ public class PopulateSignatureSigningParametersTest extends OpenSAMLInitBaseTest
         action.setSignatureSigningParametersResolver(new MockResolver(true));
         action.setExistingParametersContextLookupStrategy(new ChildContextLookup(SecurityParametersContext.class));
         action.setSecurityParametersContextLookupStrategy(
-                Functions.compose(
-                        new ChildContextLookup<MessageContext,SecurityParametersContext>(SecurityParametersContext.class, true),
+                new ChildContextLookup<>(SecurityParametersContext.class, true).compose(
                         new OutboundMessageContextLookup()));
         action.initialize();
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilterTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilterTest.java
index 077d047..9f0ee87 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilterTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilterTest.java
@@ -21,6 +21,7 @@ import java.io.File;
 import java.net.URL;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.function.Predicate;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -44,8 +45,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
-
 public class EntityAttributesFilterTest extends XMLObjectBaseTestCase implements Predicate<EntityDescriptor> {
     
     private SAMLObjectBuilder<Attribute> tagBuilder;
@@ -123,11 +122,7 @@ public class EntityAttributesFilterTest extends XMLObjectBaseTestCase implements
         
         final EntityAttributesFilter filter = new EntityAttributesFilter();
         filter.setRules(Collections.<Predicate<EntityDescriptor>,Collection<Attribute>>singletonMap(this, tags));
-        filter.setAttributeFilter(new Predicate<Attribute>() {
-            public boolean apply(Attribute input) {
-                return "foo".equals(input.getName());
-            }
-        });
+        filter.setAttributeFilter(input -> "foo".equals(input.getName()));
         filter.initialize();
         
         metadataProvider.setMetadataFilter(filter);
@@ -148,7 +143,7 @@ public class EntityAttributesFilterTest extends XMLObjectBaseTestCase implements
     }
 
     /** {@inheritDoc} */
-    public boolean apply(final EntityDescriptor input) {
+    public boolean test(final EntityDescriptor input) {
         return input.getEntityID().equals("https://carmenwiki.osu.edu/shibboleth");
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
index 8b5c3ea..897664a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
@@ -22,6 +22,7 @@ import java.net.URL;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.function.Predicate;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -38,8 +39,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
-
 public class NameIDFormatFilterTest extends XMLObjectBaseTestCase implements Predicate<EntityDescriptor> {
     
     private FilesystemMetadataResolver metadataProvider;
@@ -104,7 +103,7 @@ public class NameIDFormatFilterTest extends XMLObjectBaseTestCase implements Pre
     }
 
     /** {@inheritDoc} */
-    public boolean apply(EntityDescriptor input) {
+    public boolean test(EntityDescriptor input) {
         return input.getEntityID().equals("https://carmenwiki.osu.edu/shibboleth");
     }
 
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 f310ad8..a1c9ebb 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
@@ -27,6 +27,8 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Timer;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.xml.XMLObject;
@@ -68,10 +70,8 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -435,7 +435,7 @@ public class AbstractDynamicMetadataResolverTest extends XMLObjectBaseTestCase {
         // Only load id1 from the cache
         resolver.setInitializationFromCachePredicate(
                 new Predicate<EntityDescriptor>() {
-                    public boolean apply(EntityDescriptor input) {
+                    public boolean test(EntityDescriptor input) {
                         if (input == null) {
                             return false;
                         }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
index 3d6c4de..9add59e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
@@ -434,7 +434,7 @@ public class PredicateRoleDescriptorResolverTest extends XMLObjectBaseTestCase {
         }
 
         /** {@inheritDoc} */
-        public boolean apply(RoleDescriptor input) {
+        public boolean test(RoleDescriptor input) {
             return result;
         }
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilderTest.java
index ec69730..4cb1c28 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/TemplateRequestURLBuilderTest.java
@@ -17,7 +17,7 @@
 
 package org.opensaml.saml.metadata.resolver.impl;
 
-import javax.annotation.Nullable;
+import java.util.function.Function;
 
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -29,9 +29,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
-
 public class TemplateRequestURLBuilderTest {
     
     private VelocityEngine engine;
@@ -97,11 +94,7 @@ public class TemplateRequestURLBuilderTest {
     
     @Test
     public void testTransformer() {
-        Function<String,String> transformer = new Function<String, String>() {
-            @Nullable public String apply(@Nullable String input) {
-                return input.toUpperCase();
-            }
-        };
+        Function<String,String> transformer = String::toUpperCase;
         
         function = new TemplateRequestURLBuilder(engine, "${entityID}", EncodingStyle.none, transformer);
         
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 88e9f67..a62a30b 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.index.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nullable;
 
@@ -27,8 +28,6 @@ import org.opensaml.saml.metadata.resolver.index.MetadataIndexKey;
 import org.opensaml.saml.metadata.resolver.index.SimpleStringMetadataIndexKey;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
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 5877c99..8097d2d 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
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.xml.namespace.QName;
 
@@ -44,7 +45,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Sets;
 
@@ -246,26 +246,26 @@ public class EndpointMetadataIndexTest extends XMLObjectBaseTestCase {
         role.getAssertionConsumerServices().add(endpoint);
         
         predicate = new EndpointMetadataIndex.DefaultEndpointSelectionPredicate();
-        Assert.assertFalse(predicate.apply(endpoint));
+        Assert.assertFalse(predicate.test(endpoint));
         
         indexableEndpoints = Collections.emptyMap();
         predicate = new EndpointMetadataIndex.DefaultEndpointSelectionPredicate(indexableEndpoints);
-        Assert.assertFalse(predicate.apply(endpoint));
+        Assert.assertFalse(predicate.test(endpoint));
         
         indexableEndpoints = new HashMap<>();
         indexableEndpoints.put(SPSSODescriptor.DEFAULT_ELEMENT_NAME, Sets.newHashSet(ArtifactResolutionService.DEFAULT_ELEMENT_NAME));
         predicate = new EndpointMetadataIndex.DefaultEndpointSelectionPredicate(indexableEndpoints);
-        Assert.assertFalse(predicate.apply(endpoint));
+        Assert.assertFalse(predicate.test(endpoint));
         
         indexableEndpoints = new HashMap<>();
         indexableEndpoints.put(IDPSSODescriptor.DEFAULT_ELEMENT_NAME, Sets.newHashSet(ArtifactResolutionService.DEFAULT_ELEMENT_NAME));
         predicate = new EndpointMetadataIndex.DefaultEndpointSelectionPredicate(indexableEndpoints);
-        Assert.assertFalse(predicate.apply(endpoint));
+        Assert.assertFalse(predicate.test(endpoint));
         
         indexableEndpoints = new HashMap<>();
         indexableEndpoints.put(SPSSODescriptor.DEFAULT_ELEMENT_NAME, Sets.newHashSet(AssertionConsumerService.DEFAULT_ELEMENT_NAME));
         predicate = new EndpointMetadataIndex.DefaultEndpointSelectionPredicate(indexableEndpoints);
-        Assert.assertTrue(predicate.apply(endpoint));
+        Assert.assertTrue(predicate.test(endpoint));
     }
     
     @Test
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 4a15ea3..5a164f6 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
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver.index.impl;
 
 import java.util.Collections;
 import java.util.Set;
+import java.util.function.Function;
 
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
@@ -33,7 +34,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.collect.Sets;
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/SimpleStringCriteriaFunction.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/SimpleStringCriteriaFunction.java
index 14692a7..547314b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/SimpleStringCriteriaFunction.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/SimpleStringCriteriaFunction.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.index.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nullable;
 
@@ -28,8 +29,6 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import org.opensaml.saml.metadata.resolver.index.MetadataIndexKey;
 import org.opensaml.saml.metadata.resolver.index.SimpleStringMetadataIndexKey;
 
-import com.google.common.base.Function;
-
 public class SimpleStringCriteriaFunction implements Function<CriteriaSet, Set<MetadataIndexKey>> {
     
     @Nullable public Set<MetadataIndexKey> apply(@Nullable CriteriaSet input) {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/UppercaseEntityIdDescriptorFunction.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/UppercaseEntityIdDescriptorFunction.java
index 607f078..4e84e0b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/UppercaseEntityIdDescriptorFunction.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/UppercaseEntityIdDescriptorFunction.java
@@ -20,6 +20,7 @@ package org.opensaml.saml.metadata.resolver.index.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nullable;
 
@@ -27,8 +28,6 @@ import org.opensaml.saml.metadata.resolver.index.MetadataIndexKey;
 import org.opensaml.saml.metadata.resolver.index.SimpleStringMetadataIndexKey;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 
-import com.google.common.base.Function;
-
 public class UppercaseEntityIdDescriptorFunction implements Function<EntityDescriptor, Set<MetadataIndexKey>> {
     
     @Nullable public Set<MetadataIndexKey> apply(@Nullable EntityDescriptor input) {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/AbstractSAML1NameIdentifierGeneratorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/AbstractSAML1NameIdentifierGeneratorTest.java
index 7a03c3a..a716328 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/AbstractSAML1NameIdentifierGeneratorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/AbstractSAML1NameIdentifierGeneratorTest.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml1.profile;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -26,8 +27,6 @@ import org.opensaml.saml.saml1.core.NameIdentifier;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** Test for {@link AbstractSAML1NameIdentifierGenerator}. */
 public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTestCase {
 
@@ -95,11 +94,7 @@ public class AbstractSAML1NameIdentifierGeneratorTest extends OpenSAMLInitBaseTe
 
         public MockSAML1NameIdentifierGenerator() {
             setId("test");
-            setDefaultIdPNameQualifierLookupStrategy(new Function<ProfileRequestContext,String>() {
-                public String apply(ProfileRequestContext input) {
-                    return NAME_QUALIFIER;
-                }
-            });
+            setDefaultIdPNameQualifierLookupStrategy(FunctionSupport.constant(NAME_QUALIFIER));
         }
         
         /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
index e883a07..15c5665 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.saml1.profile.impl;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -40,7 +41,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 
 /** Test for {@link AddNameIdentifierToSubjects}. */
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
index 9f8e3d6..bc02bb7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
@@ -25,6 +25,7 @@ import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.saml.common.binding.artifact.impl.BasicSAMLArtifactMap;
@@ -37,8 +38,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** {@link ResolveArtifacts} unit test. */
 public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
 
@@ -58,11 +57,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action = new ResolveArtifacts();
         action.setArtifactMap(artifactMap);
-        action.setIssuerLookupStrategy(new Function<ProfileRequestContext,String>() {
-            public String apply(ProfileRequestContext input) {
-                return "IdP";
-            }
-        });
+        action.setIssuerLookupStrategy(FunctionSupport.constant("IdP"));
         action.initialize();
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGeneratorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGeneratorTest.java
index f24541e..9ce2a85 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGeneratorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGeneratorTest.java
@@ -18,6 +18,7 @@
 package org.opensaml.saml.saml2.profile;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -26,8 +27,6 @@ import org.opensaml.saml.saml2.core.NameID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** Test for {@link AbstractSAML2NameIDGenerator}. */
 public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
 
@@ -105,17 +104,8 @@ public class AbstractSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTestCase {
 
         public MockSAML2NameIDGenerator() {
             setId("test");
-            setDefaultIdPNameQualifierLookupStrategy(new Function<ProfileRequestContext,String>() {
-                public String apply(ProfileRequestContext input) {
-                    return NAME_QUALIFIER;
-                }
-            });
-
-            setDefaultSPNameQualifierLookupStrategy(new Function<ProfileRequestContext,String>() {
-                public String apply(ProfileRequestContext input) {
-                    return SP_NAME_QUALIFIER;
-                }
-            });
+            setDefaultIdPNameQualifierLookupStrategy(FunctionSupport.constant(NAME_QUALIFIER));
+            setDefaultSPNameQualifierLookupStrategy(FunctionSupport.constant(SP_NAME_QUALIFIER));
         }
         
         /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
index d8f16087..d00a8c4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjectsTest.java
@@ -22,6 +22,7 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -54,7 +55,6 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 
 /** Test for {@link AddNameIDToSubjects}. */
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 95e6caa..6078d24 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
@@ -17,9 +17,8 @@
 
 package org.opensaml.saml.saml2.profile.impl;
 
-import java.util.Collection;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -37,7 +36,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 
 /** {@link AddProxyRestrictionToAssertions} unit test. */
@@ -50,16 +48,8 @@ public class AddProxyRestrictionToAssertionsTest extends OpenSAMLInitBaseTestCas
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         action = new AddProxyRestrictionToAssertions();
-        action.setProxyAudiencesLookupStrategy(new Function<ProfileRequestContext,Collection<String>>() {
-            public Collection<String> apply(ProfileRequestContext input) {
-                return ImmutableList.of(AUDIENCE1, AUDIENCE2);
-            }
-        });
-        action.setProxyCountLookupStrategy(new Function<ProfileRequestContext,Long>() {
-            public Long apply(ProfileRequestContext input) {
-                return 1L;
-            }
-        });
+        action.setProxyAudiencesLookupStrategy(FunctionSupport.constant(ImmutableList.of(AUDIENCE1, AUDIENCE2)));
+        action.setProxyCountLookupStrategy(FunctionSupport.constant(1L));
         action.initialize();
     }
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
index 23a0f72..b30db50 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
@@ -36,8 +36,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** {@link AddStatusResponseShell} unit test. */
 public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
 
@@ -50,11 +48,7 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
         issuer = null;
 
         action = new AddStatusResponseShell();
-        action.setIssuerLookupStrategy(new Function<ProfileRequestContext,String>() {
-            public String apply(ProfileRequestContext input) {
-                return issuer;
-            }
-        });
+        action.setIssuerLookupStrategy(prc -> issuer);
     }
 
     @Test public void testAddResponse() throws ComponentInitializationException {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
index 53256ba..1f2af11 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
@@ -25,6 +25,7 @@ import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.saml.common.binding.artifact.impl.BasicSAMLArtifactMap;
@@ -38,8 +39,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /** {@link ResolveArtifact} unit test. */
 public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
 
@@ -59,11 +58,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
         
         action = new ResolveArtifact();
         action.setArtifactMap(artifactMap);
-        action.setIssuerLookupStrategy(new Function<ProfileRequestContext,String>() {
-            public String apply(ProfileRequestContext input) {
-                return "IdP";
-            }
-        });
+        action.setIssuerLookupStrategy(FunctionSupport.constant("IdP"));
         action.initialize();
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
index 62e32be..d6cfdea 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
@@ -20,12 +20,9 @@ package org.opensaml.saml.saml2.profile.impl;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
 import java.util.Collections;
-import java.util.List;
 
-import javax.annotation.Nullable;
-
-import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.io.MarshallingException;
@@ -46,7 +43,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
@@ -104,16 +100,8 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
         response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
         
         action.setEncryptToSelf(Predicates.<ProfileRequestContext>alwaysTrue());
-        action.setEncryptToSelfParametersStrategy(new Function<Pair<ProfileRequestContext,EncryptionParameters>, List<EncryptionParameters>>() {
-            public List<EncryptionParameters> apply(@Nullable Pair<ProfileRequestContext, EncryptionParameters> input) {
-                return Lists.newArrayList(encParamsSelf1, encParamsSelf2);
-            }
-        });
-        action.setSelfRecipientLookupStrategy(new Function<ProfileRequestContext, String>() {
-            public String apply(@Nullable ProfileRequestContext input) {
-                return "https://idp.example.org";
-            }
-        });
+        action.setEncryptToSelfParametersStrategy(FunctionSupport.constant(Lists.newArrayList(encParamsSelf1, encParamsSelf2)));
+        action.setSelfRecipientLookupStrategy(FunctionSupport.constant("https://idp.example.org"));
         
         action.initialize();
         
@@ -144,16 +132,8 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
         response.getAssertions().get(0).setSubject(SAML2ActionTestingSupport.buildSubject("morpheus"));
         
         action.setEncryptToSelf(Predicates.<ProfileRequestContext>alwaysTrue());
-        action.setEncryptToSelfParametersStrategy(new Function<Pair<ProfileRequestContext,EncryptionParameters>, List<EncryptionParameters>>() {
-            public List<EncryptionParameters> apply(@Nullable Pair<ProfileRequestContext, EncryptionParameters> input) {
-                return Collections.emptyList();
-            }
-        });
-        action.setSelfRecipientLookupStrategy(new Function<ProfileRequestContext, String>() {
-            public String apply(@Nullable ProfileRequestContext input) {
-                return "https://idp.example.org";
-            }
-        });
+        action.setEncryptToSelfParametersStrategy(FunctionSupport.constant(Collections.emptyList()));
+        action.setSelfRecipientLookupStrategy(FunctionSupport.constant("https://idp.example.org"));
         
         action.initialize();
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
index 03734a5..3a8aad4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
@@ -22,6 +22,7 @@ import java.net.URISyntaxException;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.Set;
+import java.util.function.Function;
 
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
@@ -49,8 +50,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /**
  *
  */
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 baef7ce..3a6fb66 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.saml2.wssecurity.messaging.impl;
 import java.net.URISyntaxException;
 import java.security.KeyException;
 import java.security.cert.CertificateException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -60,8 +61,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
-
 /**
  *
  */
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 8f5145a..2d30d00 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
@@ -21,6 +21,7 @@ import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nullable;
 
@@ -46,7 +47,6 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 
 /**
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 57bbdcf..525365a 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
@@ -753,7 +753,7 @@ public class SAMLMetadataEncryptionParametersResolverTest extends XMLObjectBaseT
             this.algoMap = algoMap;
         }
         
-        public boolean apply(@Nullable SelectionInput input) {
+        public boolean test(@Nullable SelectionInput input) {
             return this.algoMap.get(input.getDataEncryptionAlgorithm()).equals(input.getKeyTransportAlgorithm());
         }
     }
diff --git a/opensaml-saml-impl/src/test/resources/logback-test.xml b/opensaml-saml-impl/src/test/resources/logback-test.xml
index 252055a..80a4dfe 100644
--- a/opensaml-saml-impl/src/test/resources/logback-test.xml
+++ b/opensaml-saml-impl/src/test/resources/logback-test.xml
@@ -9,30 +9,30 @@
     </appender>
     
     <logger name="org.opensaml.messaging">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml.core.xml.persist">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml.saml.metadata">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml.saml.saml2.assertion">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml.storage">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml.xmlsec.impl">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     <logger name="org.opensaml.saml.security.impl">
-        <level value="TRACE"/>
+        <level value="DEBUG"/>
     </logger>
     
     <logger name="org.opensaml">
diff --git a/opensaml-security-api/.project b/opensaml-security-api/.project
index a849213..00525c5 100644
--- a/opensaml-security-api/.project
+++ b/opensaml-security-api/.project
@@ -20,8 +20,19 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.core.springbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.boot.validation.springbootbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.springframework.ide.eclipse.core.springnature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java b/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
index 6b62489..a578e1d 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
@@ -17,14 +17,14 @@
 
 package org.opensaml.security.messaging;
 
+import java.util.function.Function;
+
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
 /**
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriterion.java
index 631bbee..521fb1a 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableCredentialCriterion.java
@@ -19,13 +19,13 @@ package org.opensaml.security.credential.criteria.impl;
 
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 
-import org.opensaml.security.credential.Credential;
+import java.util.function.Predicate;
 
-import com.google.common.base.Predicate;
+import org.opensaml.security.credential.Credential;
 
 /**
  * Marker interface for evaluable credential resolver criteria.
  */
 public interface EvaluableCredentialCriterion extends Predicate<Credential>, Criterion {
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterion.java
index 567608d..e107297 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterion.java
@@ -65,7 +65,7 @@ public class EvaluableEntityIDCredentialCriterion extends AbstractTriStatePredic
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterion.java
index 73aaf18..c705b30 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterion.java
@@ -65,7 +65,7 @@ public class EvaluableKeyAlgorithmCredentialCriterion extends AbstractTriStatePr
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterion.java
index 84bb5ff..7168495 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterion.java
@@ -62,7 +62,7 @@ public class EvaluableKeyLengthCredentialCriterion extends AbstractTriStatePredi
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterion.java
index d6e4db4..44410da 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterion.java
@@ -64,7 +64,7 @@ public class EvaluableKeyNameCredentialCriterion extends AbstractTriStatePredica
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterion.java
index 450f30b..28b3abe 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterion.java
@@ -62,7 +62,7 @@ public class EvaluablePublicKeyCredentialCriterion extends AbstractTriStatePredi
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterion.java
index 7e5763c..af5dc1e 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterion.java
@@ -60,7 +60,7 @@ public class EvaluableUsageCredentialCriterion extends AbstractTriStatePredicate
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterion.java
index eaa232d..838c502 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterion.java
@@ -55,7 +55,7 @@ public class EvaluableX509CertSelectorCredentialCriterion extends AbstractTriSta
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterion.java
index 9bcbcb8..f251e14 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterion.java
@@ -79,7 +79,7 @@ public final class EvaluableX509DigestCredentialCriterion extends AbstractTriSta
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterion.java
index 702fa8d..91d6011 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterion.java
@@ -72,7 +72,7 @@ public class EvaluableX509IssuerSerialCredentialCriterion extends AbstractTriSta
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterion.java
index 5b665bd..c767058 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterion.java
@@ -67,7 +67,7 @@ public class EvaluableX509SubjectKeyIdentifierCredentialCriterion extends Abstra
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
diff --git a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterion.java b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterion.java
index 99d9d70..2160b4d 100644
--- a/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterion.java
+++ b/opensaml-security-impl/src/main/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterion.java
@@ -64,7 +64,7 @@ public class EvaluableX509SubjectNameCredentialCriterion extends AbstractTriStat
     }
 
     /** {@inheritDoc} */
-    @Nullable public boolean apply(@Nullable final Credential target) {
+    public boolean test(@Nullable final Credential target) {
         if (target == null) {
             log.error("Credential target was null");
             return isNullInputSatisfies();
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 1297753..ed6c150 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
@@ -20,10 +20,12 @@ package org.opensaml.security.credential.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import net.shibboleth.utilities.java.support.logic.PredicateSupport;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.Criterion;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -33,8 +35,6 @@ import org.opensaml.security.credential.Credential;
 import org.opensaml.security.credential.criteria.impl.EvaluableCredentialCriteriaRegistry;
 import org.opensaml.security.credential.criteria.impl.EvaluableCredentialCriterion;
 
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 
 /**
@@ -66,11 +66,11 @@ public abstract class AbstractCriteriaFilteringCredentialResolver extends Abstra
         } else {
             Predicate<Credential> aggregatePredicate = null;
             if (isSatisfyAllPredicates()) {
-                aggregatePredicate = Predicates.and(predicates);
+                aggregatePredicate = PredicateSupport.and(predicates);
             } else {
-                aggregatePredicate = Predicates.or(predicates);
+                aggregatePredicate = PredicateSupport.or(predicates);
             }
-            return Iterables.filter(storeCandidates, aggregatePredicate);
+            return Iterables.filter(storeCandidates, aggregatePredicate::test);
         }
     }
     
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 900e40f..d9dc63e 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
@@ -19,6 +19,8 @@ package org.opensaml.security.messaging.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -37,9 +39,6 @@ import org.opensaml.security.messaging.HttpClientSecurityContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -240,7 +239,7 @@ public class PopulateHttpClientSecurityParametersHandler extends AbstractMessage
             @Nonnull final HttpClientSecurityParameters params) {
         
         if (clientTLSPredicate != null) { 
-            if (!clientTLSPredicate.apply(messageContext)) {
+            if (!clientTLSPredicate.test(messageContext)) {
                 log.debug("Configured client TLS predicate indicates to exclude client TLS credential");
                 params.setClientTLSCredential(null);
             } else {
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterionTest.java
index c2f56ac..79e29d9 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableEntityIDCredentialCriterionTest.java
@@ -48,27 +48,27 @@ public class EvaluableEntityIDCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableEntityIDCredentialCriterion evalCrit = new EvaluableEntityIDCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria = new EntityIdCriterion("OTHER");
         EvaluableEntityIDCredentialCriterion evalCrit = new EvaluableEntityIDCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testCanNotEvaluate() {
         credential.setEntityId(null);
         EvaluableEntityIDCredentialCriterion evalCrit = new EvaluableEntityIDCredentialCriterion(criteria);
-        Assert.assertEquals(evalCrit.apply(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
+        Assert.assertEquals(evalCrit.test(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterionTest.java
index 938623d..55b23c5 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyAlgorithmCredentialCriterionTest.java
@@ -49,20 +49,20 @@ public class EvaluableKeyAlgorithmCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableKeyAlgorithmCredentialCriterion evalCrit = new EvaluableKeyAlgorithmCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setKeyAlgorithm("SomeOtherKeyAlgo");
         EvaluableKeyAlgorithmCredentialCriterion evalCrit = new EvaluableKeyAlgorithmCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterionTest.java
index cd17ff1..dc7794c 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyLengthCredentialCriterionTest.java
@@ -51,20 +51,20 @@ public class EvaluableKeyLengthCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableKeyLengthCredentialCriterion evalCrit = new EvaluableKeyLengthCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setKeyLength(keyLength * 2);
         EvaluableKeyLengthCredentialCriterion evalCrit = new EvaluableKeyLengthCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterionTest.java
index 47a8468..13d90f8 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableKeyNameCredentialCriterionTest.java
@@ -53,27 +53,27 @@ public class EvaluableKeyNameCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableKeyNameCredentialCriterion evalCrit = new EvaluableKeyNameCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setKeyName(keyName + "OTHER");
         EvaluableKeyNameCredentialCriterion evalCrit = new EvaluableKeyNameCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testCanNotEvaluate() {
         credential.getKeyNames().clear();
         EvaluableKeyNameCredentialCriterion evalCrit = new EvaluableKeyNameCredentialCriterion(criteria);
-        Assert.assertEquals(evalCrit.apply(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
+        Assert.assertEquals(evalCrit.test(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterionTest.java
index 2ce1c01..1a76324 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluablePublicKeyCredentialCriterionTest.java
@@ -56,27 +56,27 @@ public class EvaluablePublicKeyCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluablePublicKeyCredentialCriterion evalCrit = new EvaluablePublicKeyCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfyDifferentKey() throws NoSuchAlgorithmException, NoSuchProviderException {
         criteria.setPublicKey(KeySupport.generateKeyPair(keyAlgo, 1024, null).getPublic());
         EvaluablePublicKeyCredentialCriterion evalCrit = new EvaluablePublicKeyCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testCanNotEvaluate() {
         //Only unevaluable case is null credential
         EvaluablePublicKeyCredentialCriterion evalCrit = new EvaluablePublicKeyCredentialCriterion(criteria);
-        Assert.assertEquals(evalCrit.apply(null), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
+        Assert.assertEquals(evalCrit.test(null), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterionTest.java
index 02fa478..072c1cc 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableUsageCredentialCriterionTest.java
@@ -52,34 +52,34 @@ public class EvaluableUsageCredentialCriterionTest {
     @Test
     public void testSatisfyExactMatch() {
         EvaluableUsageCredentialCriterion evalCrit = new EvaluableUsageCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
     
     @Test
     public void testSatisfyWithUnspecifiedCriteria() {
         criteria.setUsage(UsageType.UNSPECIFIED);
         EvaluableUsageCredentialCriterion evalCrit = new EvaluableUsageCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
     
     @Test
     public void testSatisfyWithUnspecifiedCredential() {
         credential.setUsageType(UsageType.UNSPECIFIED);
         EvaluableUsageCredentialCriterion evalCrit = new EvaluableUsageCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setUsage(UsageType.ENCRYPTION);
         EvaluableUsageCredentialCriterion evalCrit = new EvaluableUsageCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterionTest.java
index e70df6e..e5ae305 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509CertSelectorCredentialCriterionTest.java
@@ -88,32 +88,32 @@ public class EvaluableX509CertSelectorCredentialCriterionTest {
     @Test
     public void testSatisfyByCert() {
         certSelector.setCertificate(entityCert);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
     
     @Test
     public void testSatisfyByKey() {
         certSelector.setSubjectPublicKey(entityCert.getPublicKey());
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
     
     @Test
     public void testSatisfyBySubjectName() {
         certSelector.setSubject(subjectName);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() throws NoSuchAlgorithmException, NoSuchProviderException {
         certSelector.setSubjectPublicKey( KeySupport.generateKeyPair("RSA", 1024, null).getPublic() );
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testNotSatisfyWrongCredType() throws NoSuchAlgorithmException, NoSuchProviderException {
         certSelector.setCertificate(entityCert);
         BasicCredential basicCred = new BasicCredential(KeySupport.generateKey("AES", 128, null));
-        Assert.assertFalse(evalCrit.apply(basicCred), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(basicCred), "Credential should NOT have matched the evaluable criteria");
     }
     
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterionTest.java
index 388ed9a..5a1ebfe 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509DigestCredentialCriterionTest.java
@@ -90,34 +90,34 @@ public class EvaluableX509DigestCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableX509DigestCredentialCriterion evalCrit = new EvaluableX509DigestCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setAlgorithm("SHA-1");
         EvaluableX509DigestCredentialCriterion evalCrit = new EvaluableX509DigestCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testNotSatisfyWrongCredType() throws NoSuchAlgorithmException, NoSuchProviderException {
         BasicCredential basicCred = new BasicCredential(KeySupport.generateKey("AES", 128, null));
         EvaluableX509DigestCredentialCriterion evalCrit = new EvaluableX509DigestCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(basicCred), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(basicCred), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testCanNotEvaluate() {
         criteria.setAlgorithm("SHA0");
         EvaluableX509DigestCredentialCriterion evalCrit = new EvaluableX509DigestCredentialCriterion(criteria);
-        Assert.assertEquals(evalCrit.apply(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
+        Assert.assertEquals(evalCrit.test(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterionTest.java
index 91ebd2e..b846fac 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509IssuerSerialCredentialCriterionTest.java
@@ -89,27 +89,27 @@ public class EvaluableX509IssuerSerialCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableX509IssuerSerialCredentialCriterion evalCrit = new EvaluableX509IssuerSerialCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setSerialNumber(new BigInteger("100"));
         EvaluableX509IssuerSerialCredentialCriterion evalCrit = new EvaluableX509IssuerSerialCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testNotSatisfyWrongCredType() throws NoSuchAlgorithmException, NoSuchProviderException {
         BasicCredential basicCred = new BasicCredential(KeySupport.generateKey("AES", 128, null));
         EvaluableX509IssuerSerialCredentialCriterion evalCrit = new EvaluableX509IssuerSerialCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(basicCred), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(basicCred), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterionTest.java
index b2782d0..75a7bd1 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectKeyIdentifierCredentialCriterionTest.java
@@ -105,34 +105,34 @@ public class EvaluableX509SubjectKeyIdentifierCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableX509SubjectKeyIdentifierCredentialCriterion evalCrit = new EvaluableX509SubjectKeyIdentifierCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setSubjectKeyIdentifier("abcdef123456".getBytes());
         EvaluableX509SubjectKeyIdentifierCredentialCriterion evalCrit = new EvaluableX509SubjectKeyIdentifierCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testNotSatisfyWrongCredType() throws NoSuchAlgorithmException, NoSuchProviderException {
         BasicCredential basicCred = new BasicCredential(KeySupport.generateKey("AES", 128, null));
         EvaluableX509SubjectKeyIdentifierCredentialCriterion evalCrit = new EvaluableX509SubjectKeyIdentifierCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(basicCred), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(basicCred), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testCanNotEvaluate() {
         credential.setEntityCertificate(entityCertNoSKI);
         EvaluableX509SubjectKeyIdentifierCredentialCriterion evalCrit = new EvaluableX509SubjectKeyIdentifierCredentialCriterion(criteria);
-        Assert.assertEquals(evalCrit.apply(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
+        Assert.assertEquals(evalCrit.test(credential), evalCrit.isUnevaluableSatisfies(), "Credential should have been unevaluable against the criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterionTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterionTest.java
index 17ced9a..8946ef7 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterionTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/credential/criteria/impl/EvaluableX509SubjectNameCredentialCriterionTest.java
@@ -87,27 +87,27 @@ public class EvaluableX509SubjectNameCredentialCriterionTest {
     @Test
     public void testSatisfy() {
         EvaluableX509SubjectNameCredentialCriterion evalCrit = new EvaluableX509SubjectNameCredentialCriterion(criteria);
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 
     @Test
     public void testNotSatisfy() {
         criteria.setSubjectName( new X500Principal("cn=SomeOtherName, o=SomeOtherOrg"));
         EvaluableX509SubjectNameCredentialCriterion evalCrit = new EvaluableX509SubjectNameCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(credential), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(credential), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testNotSatisfyWrongCredType() throws NoSuchAlgorithmException, NoSuchProviderException {
         BasicCredential basicCred = new BasicCredential(KeySupport.generateKey("AES", 128, null));
         EvaluableX509SubjectNameCredentialCriterion evalCrit = new EvaluableX509SubjectNameCredentialCriterion(criteria);
-        Assert.assertFalse(evalCrit.apply(basicCred), "Credential should NOT have matched the evaluable criteria");
+        Assert.assertFalse(evalCrit.test(basicCred), "Credential should NOT have matched the evaluable criteria");
     }
     
     @Test
     public void testRegistry() throws Exception {
         EvaluableCredentialCriterion evalCrit = EvaluableCredentialCriteriaRegistry.getEvaluator(criteria);
         Assert.assertNotNull(evalCrit, "Evaluable criteria was unavailable from the registry");
-        Assert.assertTrue(evalCrit.apply(credential), "Credential should have matched the evaluable criteria");
+        Assert.assertTrue(evalCrit.test(credential), "Credential should have matched the evaluable criteria");
     }
 }
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 2f32c92..2cd4cc2 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
@@ -22,6 +22,7 @@ import static org.opensaml.security.httpclient.HttpClientSecurityConstants.CONTE
 import static org.opensaml.security.httpclient.HttpClientSecurityConstants.CONTEXT_KEY_SERVER_TLS_FAILURE_IS_FATAL;
 
 import java.io.IOException;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -67,8 +68,6 @@ import org.opensaml.soap.common.SOAPException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 /**
  * SOAP client that is based on {@link HttpClientMessagePipeline}.
  * 
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 aad6056..8554226 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
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -66,8 +67,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
-import com.google.common.base.Function;
-
 /**
  * SOAP client that uses HTTP as the underlying transport and POST as the binding.
  */
@@ -97,10 +96,8 @@ public class HttpSOAPClient extends AbstractInitializableComponent implements SO
     
     /** Constructor. */
     public HttpSOAPClient() {
-        soapClientContextLookupStrategy =
-                new ChildContextLookup<>(SOAPClientContext.class, false);
-        soap11ContextLookupStrategy =
-                new ChildContextLookup<>(SOAP11Context.class, false);
+        soapClientContextLookupStrategy = new ChildContextLookup<>(SOAPClientContext.class);
+        soap11ContextLookupStrategy = new ChildContextLookup<>(SOAP11Context.class);
     }
 
     /** {@inheritDoc} */
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 a511d87..b4863a3 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.soap.client.http;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
@@ -29,8 +31,6 @@ import org.opensaml.soap.common.SOAPException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
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 8f70093..c40bb81 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
@@ -17,14 +17,14 @@
 
 package org.opensaml.soap.client.messaging;
 
+import java.util.function.Function;
+
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.InOutOperationContext;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.soap.client.SOAPClientContext;
 
-import com.google.common.base.Function;
-
 /**
  * Function which resolves and returns the intended SOAP client message destination URI
  * via the {@link SOAPClientContext#getDestinationURI()} of the message context's
@@ -33,7 +33,7 @@ import com.google.common.base.Function;
 public class SOAPClientDestinationURILookup implements Function<MessageContext, String> {
 
     /** {@inheritDoc} */
-    public String apply(@Nullable final MessageContext messageContext) {
+    @Nullable public String apply(@Nullable final MessageContext messageContext) {
         if (messageContext == null) {
             return null;
         }
@@ -51,4 +51,4 @@ public class SOAPClientDestinationURILookup implements Function<MessageContext,
         }
     }
 
-}
+}
\ 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 27c105e..131e807 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
@@ -19,6 +19,7 @@ package org.opensaml.soap.client.messaging;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,8 +33,6 @@ import org.opensaml.soap.client.SOAPClientContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Maps;
 
@@ -44,6 +43,8 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * Function implementation which resolves a delegate function based on the 
  * SOAP client pipeline name, obtained via a lookup of {@link SOAPClientContext},
  * by default a direct child of the parent {@link InOutOperationContext}.
+ * 
+ * @param <T> delegate function type
  */
 public class SOAPClientPipelineNameMappingFunction<T> implements Function<MessageContext, T> {
     
@@ -85,9 +86,9 @@ public class SOAPClientPipelineNameMappingFunction<T> implements Function<Messag
         if (lookupStrategy != null) {
             soapClientContextLookup = lookupStrategy;
         } else {
-            soapClientContextLookup = Functions.compose(
-                    new ChildContextLookup(SOAPClientContext.class), 
-                    new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
+            soapClientContextLookup =
+                    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 55728f4..768cfde 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
@@ -19,6 +19,8 @@ package org.opensaml.soap.client.messaging;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,9 +34,6 @@ import org.opensaml.soap.client.SOAPClientContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Maps;
 
@@ -86,14 +85,14 @@ public class SOAPClientPipelineNameMappingPredicate implements Predicate<Message
         if (lookupStrategy != null) {
             soapClientContextLookup = lookupStrategy;
         } else {
-            soapClientContextLookup = Functions.compose(
-                    new ChildContextLookup(SOAPClientContext.class), 
-                    new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
+            soapClientContextLookup =
+                    new ChildContextLookup(SOAPClientContext.class).compose( 
+                            new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
         }
     }
     
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final MessageContext input) {
+    public boolean test(@Nullable final MessageContext input) {
         if (input == null) {
             return false;
         }
@@ -104,7 +103,7 @@ public class SOAPClientPipelineNameMappingPredicate implements Predicate<Message
             final Predicate<MessageContext> delegate = delegateMap.get(clientContext.getPipelineName());
             log.debug("Resolved delegate predicate: {}", delegate != null ? delegate.getClass().getName() : "null");
             if (delegate != null) {
-                return delegate.apply(input);
+                return delegate.test(input);
             }
         }
         
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 4c68121..80ec804 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
@@ -17,6 +17,8 @@
 
 package org.opensaml.soap.client.security;
 
+import java.util.function.Function;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -26,9 +28,6 @@ import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
 import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -43,10 +42,9 @@ public class SOAPClientSecurityProfileIdLookupFunction implements ContextDataLoo
      * Constructor.
      */
     public SOAPClientSecurityProfileIdLookupFunction() {
-        soapContextLookup = Functions.compose(
-                new ChildContextLookup<>(SOAPClientSecurityContext.class),
-                new RecursiveTypedParentContextLookup(InOutOperationContext.class)
-                );
+        soapContextLookup =
+                new ChildContextLookup<>(SOAPClientSecurityContext.class).compose(
+                        new RecursiveTypedParentContextLookup(InOutOperationContext.class));
     }
     
     /**
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
index 86482c5..0a4b061 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
@@ -17,6 +17,9 @@
 
 package org.opensaml.soap.messaging;
 
+import java.util.function.Function;
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -28,9 +31,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-
 /**
  * Abstract base class for message handlers that generate SOAP headers.
  *
@@ -125,7 +125,7 @@ public abstract class AbstractHeaderGeneratingMessageHandler<MessageType> extend
         }
         
         if (mustUnderstandStrategy != null) {
-            effectiveMustUnderstand = mustUnderstandStrategy.apply(messageContext);
+            effectiveMustUnderstand = mustUnderstandStrategy.test(messageContext);
         } else {
             effectiveMustUnderstand = mustUnderstand;
         }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
index 37aee81..2ed381c 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
@@ -19,6 +19,8 @@ package org.opensaml.soap.soap11.profile.impl;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -44,8 +46,6 @@ import org.opensaml.soap.soap11.FaultString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
@@ -187,7 +187,7 @@ public class AddSOAPFault extends AbstractProfileAction {
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
 
-        detailedErrors = detailedErrorsCondition.apply(profileRequestContext);
+        detailedErrors = detailedErrorsCondition.test(profileRequestContext);
         
         log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled");
 
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
index 4a89c6e..9a89378 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
@@ -19,10 +19,8 @@ package org.opensaml.soap.soap11.profile.impl;
 
 import java.util.Collections;
 
-import javax.annotation.Nullable;
-import javax.xml.namespace.QName;
-
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
 
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.core.xml.mock.SimpleXMLObject;
@@ -38,7 +36,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 
 /** {@link AddSOAPFault} unit test. */
@@ -89,14 +86,8 @@ public class AddSOAPFaultTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void testCodeAndStringViaLookupWithDetailedErrors() throws ComponentInitializationException {
-        action.setFaultCodeLookupStrategy(new Function<ProfileRequestContext, QName>() {
-            @Nullable public QName apply(@Nullable ProfileRequestContext input) {
-                return FaultCode.CLIENT;
-            }});
-        action.setFaultStringLookupStrategy(new Function<ProfileRequestContext, String>() {
-            @Nullable public String apply(@Nullable ProfileRequestContext input) {
-                return "TheClientError";
-            }});
+        action.setFaultCodeLookupStrategy(FunctionSupport.constant(FaultCode.CLIENT));
+        action.setFaultStringLookupStrategy(FunctionSupport.constant("TheClientError"));
         
         action.setDetailedErrorsCondition(Predicates.<ProfileRequestContext>alwaysTrue());
         
@@ -122,14 +113,8 @@ public class AddSOAPFaultTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void testCodeAndStringViaLookupWithoutDetailedErrors() throws ComponentInitializationException {
-        action.setFaultCodeLookupStrategy(new Function<ProfileRequestContext, QName>() {
-            @Nullable public QName apply(@Nullable ProfileRequestContext input) {
-                return FaultCode.CLIENT;
-            }});
-        action.setFaultStringLookupStrategy(new Function<ProfileRequestContext, String>() {
-            @Nullable public String apply(@Nullable ProfileRequestContext input) {
-                return "TheClientError";
-            }});
+        action.setFaultCodeLookupStrategy(FunctionSupport.constant(FaultCode.CLIENT));
+        action.setFaultStringLookupStrategy(FunctionSupport.constant("TheClientError"));
         
         action.setDetailedErrorsCondition(Predicates.<ProfileRequestContext>alwaysFalse());
         
@@ -157,10 +142,7 @@ public class AddSOAPFaultTest extends OpenSAMLInitBaseTestCase {
         final Fault contextFault = SOAPSupport.buildSOAP11Fault(FaultCode.CLIENT, "TheClientError", "TheFaultActor", 
                 Collections.singletonList(XMLObjectSupport.buildXMLObject(SimpleXMLObject.ELEMENT_NAME)), null);
         
-        action.setContextFaultStrategy(new Function<ProfileRequestContext, Fault>() {
-            @Nullable public Fault apply(@Nullable ProfileRequestContext input) {
-                return contextFault;
-            }});
+        action.setContextFaultStrategy(FunctionSupport.constant(contextFault));
         
         action.setDetailedErrorsCondition(Predicates.<ProfileRequestContext>alwaysTrue());
         
@@ -189,10 +171,7 @@ public class AddSOAPFaultTest extends OpenSAMLInitBaseTestCase {
         final Fault contextFault = SOAPSupport.buildSOAP11Fault(FaultCode.CLIENT, "TheClientError", "TheFaultActor", 
                 Collections.singletonList(XMLObjectSupport.buildXMLObject(SimpleXMLObject.ELEMENT_NAME)), null);
         
-        action.setContextFaultStrategy(new Function<ProfileRequestContext, Fault>() {
-            @Nullable public Fault apply(@Nullable ProfileRequestContext input) {
-                return contextFault;
-            }});
+        action.setContextFaultStrategy(FunctionSupport.constant(contextFault));
         action.setDetailedErrorsCondition(Predicates.<ProfileRequestContext>alwaysFalse());
         
         action.initialize();
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 f23acee..10e9a92 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
@@ -23,6 +23,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -36,10 +37,8 @@ import net.shibboleth.utilities.java.support.collection.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 
-
 /**
  * Partial implementation of {@link StorageService} that stores data in-memory with no persistence
  * using a simple map.
@@ -474,11 +473,11 @@ public abstract class AbstractMapBackedStorageService extends AbstractStorageSer
             final long expiration) {
         
         return Iterables.removeIf(dataMap.entrySet(), new Predicate<Entry<String, MutableStorageRecord>>() {
-                public boolean apply(@Nullable final Entry<String, MutableStorageRecord> entry) {
+                public boolean test(@Nullable final Entry<String, MutableStorageRecord> entry) {
                     final Long exp = entry.getValue().getExpiration();
                     return exp != null && exp <= expiration;
                 }
-            }
+            }::test
         );
     }
     
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/ServletRequestScopedStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/ServletRequestScopedStorageService.java
index 442c72d..7f99405 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/ServletRequestScopedStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/ServletRequestScopedStorageService.java
@@ -76,7 +76,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 import com.google.common.escape.Escaper;
@@ -311,11 +310,8 @@ public class ServletRequestScopedStorageService extends AbstractMapBackedStorage
             return;
         }
 
-        final Optional<Cookie> cookie = Iterables.tryFind(Arrays.asList(cookies), new Predicate<Cookie>() {
-            public boolean apply(@Nullable final Cookie c) {
-                return c != null && c.getName().equals(cookieName);
-            }
-        });
+        final Optional<Cookie> cookie =
+                Iterables.tryFind(Arrays.asList(cookies), c -> c != null && c.getName().equals(cookieName));
         
         if (!cookie.isPresent() || Strings.isNullOrEmpty(cookie.get().getValue())) {
             return;
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageSaveContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageSaveContext.java
index e405b23..92091b0 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageSaveContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageSaveContext.java
@@ -25,7 +25,6 @@ import javax.annotation.Nonnull;
 import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.storage.impl.client.ClientStorageService.ClientStorageSource;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.Live;
@@ -61,11 +60,7 @@ public class ClientStorageSaveContext extends BaseContext {
      * @return true iff the operations include at least one against the specified source
      */
     public boolean isSourceRequired(@Nonnull final ClientStorageSource source) {
-        return Iterables.any(storageOperations, new Predicate<ClientStorageServiceOperation>() {
-            public boolean apply(final ClientStorageServiceOperation input) {
-                return input.getStorageSource() == source;
-            }
-        });
+        return Iterables.any(storageOperations, op -> op.getStorageSource() == source);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
index 01a3fcc..c89edb7 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
@@ -37,7 +37,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.base.Strings;
 import com.google.common.collect.Collections2;
@@ -193,11 +192,9 @@ public class LoadClientStorageServices<InboundMessageType, OutboundMessageType>
         // Search for our cookie.
         final Cookie[] cookies = getHttpServletRequest().getCookies();
         if (cookies != null) {
-            cookie = Iterables.tryFind(Arrays.asList(cookies), new Predicate<Cookie>() {
-                public boolean apply(@Nullable final Cookie c) {
-                    return c != null && c.getName().equals(storageService.getStorageName());
-                }
-            });
+            cookie = Iterables.tryFind(
+                    Arrays.asList(cookies),
+                        c -> c != null && c.getName().equals(storageService.getStorageName()));
         }
 
         if (!cookie.isPresent() || Strings.isNullOrEmpty(cookie.get().getValue())) {
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
index 1f11e79..1dc46e4 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
@@ -29,7 +29,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -118,12 +117,9 @@ public class PopulateClientStorageSaveContext<InboundMessageType, OutboundMessag
             profileRequestContext.addSubcontext(saveCtx, true);
             
             if (log.isDebugEnabled()) {
-                final Collection<String> ids = Collections2.transform(saveCtx.getStorageOperations(),
-                        new Function<ClientStorageServiceOperation,String>() {
-                    public String apply(final ClientStorageServiceOperation input) {
-                        return input.getStorageServiceID();
-                    }
-                });
+                final Collection<String> ids =
+                        Collections2.transform(saveCtx.getStorageOperations(),
+                                ClientStorageServiceOperation::getStorageServiceID);
                 log.debug("{} ClientStorageServices requiring save: {}", getLogPrefix(), ids);
             }
         }
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/KeyTransportAlgorithmPredicate.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/KeyTransportAlgorithmPredicate.java
index 8c20c21..b3c7b8b 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/KeyTransportAlgorithmPredicate.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/KeyTransportAlgorithmPredicate.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.xmlsec;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -24,8 +26,6 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.security.credential.Credential;
 
-import com.google.common.base.Predicate;
-
 /**
  * An interface for predicates which allow evaluation of a candidate key transport algorithm relative to
  * a candidate data encryption algorithm and/or a candidate key transport credential.
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolver.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolver.java
index 86cf444..385b5e6 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolver.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AbstractSecurityParametersResolver.java
@@ -20,6 +20,7 @@ package org.opensaml.xmlsec.impl;
 import java.security.Key;
 import java.util.Collection;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -42,7 +43,6 @@ import org.opensaml.xmlsec.keyinfo.NamedKeyInfoGeneratorManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
 /**
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicate.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicate.java
index 55cb88a..94cd7f1 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicate.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicate.java
@@ -17,14 +17,14 @@
 
 package org.opensaml.xmlsec.impl;
 
+import java.util.function.Predicate;
+
 import javax.annotation.Nullable;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 import org.opensaml.xmlsec.algorithm.AlgorithmRegistry;
 
-import com.google.common.base.Predicate;
-
 /**
  * A predicate which evaluates whether a cryptographic algorithm URI is effectively supported by
  * the runtime environment, as determined by {@link AlgorithmRegistry#isRuntimeSupported(String)}.
@@ -44,7 +44,7 @@ public class AlgorithmRuntimeSupportedPredicate implements Predicate<String> {
     }
 
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final String input) {
+    public boolean test(@Nullable final String input) {
         return registry.isRuntimeSupported(input);
     }
 
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 c119b94..c0468be 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
@@ -23,6 +23,7 @@ import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -43,12 +44,11 @@ import org.opensaml.xmlsec.keyinfo.KeyInfoGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
 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;
@@ -70,10 +70,10 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
         implements EncryptionParametersResolver {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(BasicEncryptionParametersResolver.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(BasicEncryptionParametersResolver.class);
     
     /** The AlgorithmRegistry used when processing algorithm URIs. */
-    private AlgorithmRegistry algorithmRegistry;
+    @Nonnull private AlgorithmRegistry algorithmRegistry;
     
     /** Flag indicating whether the resolver should auto-generate data encryption credentials. */
     private boolean autoGenerateDataEncryptionCredential;
@@ -89,7 +89,7 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
      * 
      * @return the algorithm registry instance
      */
-    public AlgorithmRegistry getAlgorithmRegistry() {
+    @Nonnull public AlgorithmRegistry getAlgorithmRegistry() {
         // Handle case where this resolver was ctored before the library was properly initialized.
         if (algorithmRegistry == null) {
             return AlgorithmSupport.getGlobalAlgorithmRegistry();
@@ -424,14 +424,14 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
             if (rsaConfig != null) {
                 if (rsaParams.getDigestMethod() == null) {
                     if (rsaConfig.getDigestMethod() != null 
-                            && whitelistBlacklistPredicate.apply(rsaConfig.getDigestMethod())
-                            && algoSupportPredicate.apply(rsaConfig.getDigestMethod())) {
+                            && whitelistBlacklistPredicate.test(rsaConfig.getDigestMethod())
+                            && algoSupportPredicate.test(rsaConfig.getDigestMethod())) {
                         rsaParams.setDigestMethod(rsaConfig.getDigestMethod());
                     }
                 }
                 if (rsaParams.getMaskGenerationFunction() == null) {
                     if (rsaConfig.getMaskGenerationFunction() != null 
-                            && whitelistBlacklistPredicate.apply(rsaConfig.getMaskGenerationFunction())) {
+                            && whitelistBlacklistPredicate.test(rsaConfig.getMaskGenerationFunction())) {
                         rsaParams.setMaskGenerationFunction(rsaConfig.getMaskGenerationFunction());
                     }
                 }
@@ -492,7 +492,7 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
             log.trace("Evaluating key transport credential against algorithm: {}", algorithm);
             if (credentialSupportsAlgorithm(keyTransportCredential, algorithm) && isKeyTransportAlgorithm(algorithm))  {
                 if (keyTransportPredicate != null) {
-                    if (keyTransportPredicate.apply(new KeyTransportAlgorithmPredicate.SelectionInput(
+                    if (keyTransportPredicate.test(new KeyTransportAlgorithmPredicate.SelectionInput(
                             algorithm, dataEncryptionAlgorithm, keyTransportCredential))) {
                         return algorithm;
                     }
@@ -613,7 +613,7 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
                 .getConfigurations()) {
             
             accumulator.addAll(Collections2.filter(config.getDataEncryptionAlgorithms(), 
-                    Predicates.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)));
+                    PredicateSupport.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)::test));
             
         }
         return accumulator;
@@ -654,7 +654,7 @@ public class BasicEncryptionParametersResolver extends AbstractSecurityParameter
                 .getConfigurations()) {
             
             accumulator.addAll(Collections2.filter(config.getKeyTransportEncryptionAlgorithms(), 
-                    Predicates.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)));
+                    PredicateSupport.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)::test));
             
         }
         return accumulator;
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 6b31253..ff7fbb9 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
@@ -21,12 +21,14 @@ import java.security.Key;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
@@ -43,8 +45,6 @@ import org.opensaml.xmlsec.keyinfo.KeyInfoGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
 /**
@@ -300,7 +300,7 @@ public class BasicSignatureSigningParametersResolver
                 .getConfigurations()) {
             
             accumulator.addAll(Collections2.filter(config.getSignatureAlgorithms(), 
-                    Predicates.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)));
+                    PredicateSupport.and(getAlgorithmRuntimeSupportedPredicate(), whitelistBlacklistPredicate)::test));
             
         }
         return accumulator;
@@ -319,8 +319,8 @@ public class BasicSignatureSigningParametersResolver
                 .getConfigurations()) {
             
             for (final String digestMethod : config.getSignatureReferenceDigestMethods()) {
-                if (getAlgorithmRuntimeSupportedPredicate().apply(digestMethod) 
-                        && whitelistBlacklistPredicate.apply(digestMethod)) {
+                if (getAlgorithmRuntimeSupportedPredicate().test(digestMethod) 
+                        && whitelistBlacklistPredicate.test(digestMethod)) {
                     return digestMethod;
                 }
             }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
index eb0fc39..dcf1c3e 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BlacklistPredicate.java
@@ -19,6 +19,7 @@ package org.opensaml.xmlsec.impl;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -26,7 +27,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -50,7 +50,7 @@ public class BlacklistPredicate implements Predicate<String> {
     }
 
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final String input) {
+    public boolean test(@Nullable final String input) {
         if (input == null) {
             throw new IllegalArgumentException("Algorithm URI to evaluate may not be null");
         }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
index 11ecf19..5289e7f 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/WhitelistPredicate.java
@@ -19,6 +19,7 @@ package org.opensaml.xmlsec.impl;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -26,7 +27,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 
@@ -51,7 +51,7 @@ public class WhitelistPredicate implements Predicate<String> {
     }
 
     /** {@inheritDoc} */
-    public boolean apply(@Nullable final String input) {
+    public boolean test(@Nullable final String input) {
         if (input == null) {
             throw new IllegalArgumentException("Algorithm URI to evaluate may not be 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 9ef6b81..a933702 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
@@ -19,6 +19,7 @@ package org.opensaml.xmlsec.messaging.impl;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
@@ -35,8 +36,6 @@ import org.opensaml.xmlsec.criterion.SignatureValidationConfigurationCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
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 8b51297..72e82a4 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
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -47,8 +48,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
-
 /**
  * Test various aspects of the {@link AbstractSecurityParametersResolver} so don't have to test
  * them in all the individual subclasses.
@@ -217,17 +216,17 @@ public class AbstractSecurityParametersResolverTest extends XMLObjectBaseTestCas
         
         // Note: Have effective whitelist based on set1
         
-        Assert.assertTrue(predicate.apply("A"));
-        Assert.assertTrue(predicate.apply("B"));
-        Assert.assertTrue(predicate.apply("C"));
-        Assert.assertTrue(predicate.apply("D"));
+        Assert.assertTrue(predicate.test("A"));
+        Assert.assertTrue(predicate.test("B"));
+        Assert.assertTrue(predicate.test("C"));
+        Assert.assertTrue(predicate.test("D"));
         
-        Assert.assertFalse(predicate.apply("X"));
-        Assert.assertFalse(predicate.apply("Y"));
-        Assert.assertFalse(predicate.apply("Z"));
-        Assert.assertFalse(predicate.apply("foo"));
-        Assert.assertFalse(predicate.apply("bar"));
-        Assert.assertFalse(predicate.apply("bax"));
+        Assert.assertFalse(predicate.test("X"));
+        Assert.assertFalse(predicate.test("Y"));
+        Assert.assertFalse(predicate.test("Z"));
+        Assert.assertFalse(predicate.test("foo"));
+        Assert.assertFalse(predicate.test("bar"));
+        Assert.assertFalse(predicate.test("bax"));
         
         config1.setWhitelistBlacklistPrecedence(Precedence.BLACKLIST);
         
@@ -235,17 +234,17 @@ public class AbstractSecurityParametersResolverTest extends XMLObjectBaseTestCas
         
         // Note: Have effective blacklist based on set2
         
-        Assert.assertTrue(predicate.apply("A"));
-        Assert.assertTrue(predicate.apply("B"));
-        Assert.assertTrue(predicate.apply("C"));
-        Assert.assertTrue(predicate.apply("D"));
-        Assert.assertTrue(predicate.apply("foo"));
-        Assert.assertTrue(predicate.apply("bar"));
-        Assert.assertTrue(predicate.apply("bax"));
-        
-        Assert.assertFalse(predicate.apply("X"));
-        Assert.assertFalse(predicate.apply("Y"));
-        Assert.assertFalse(predicate.apply("Z"));
+        Assert.assertTrue(predicate.test("A"));
+        Assert.assertTrue(predicate.test("B"));
+        Assert.assertTrue(predicate.test("C"));
+        Assert.assertTrue(predicate.test("D"));
+        Assert.assertTrue(predicate.test("foo"));
+        Assert.assertTrue(predicate.test("bar"));
+        Assert.assertTrue(predicate.test("bax"));
+        
+        Assert.assertFalse(predicate.test("X"));
+        Assert.assertFalse(predicate.test("Y"));
+        Assert.assertFalse(predicate.test("Z"));
     }
     
     @Test
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicateTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicateTest.java
index 5c7a8a3..ba6ed6f 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicateTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/AlgorithmRuntimeSupportedPredicateTest.java
@@ -71,23 +71,23 @@ public class AlgorithmRuntimeSupportedPredicateTest extends OpenSAMLInitBaseTest
         
         try {
             // These should be unconditionally supported on Java 7+ with no additional security providers
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA1));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA256));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA384));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA512));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA1));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA256));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA384));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA512));
             
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA384));
-            Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA512));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA384));
+            Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA512));
             
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSA15));
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSA15));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP));
             
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128));
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192));
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256));
-            Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256));
+            Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES));
         } finally {
             providerSupport.unloadBC();
             ConfigurationService.register(AlgorithmRegistry.class, originalRegistry);
@@ -108,63 +108,63 @@ public class AlgorithmRuntimeSupportedPredicateTest extends OpenSAMLInitBaseTest
         try {
             
             if (providerSupport.haveSunEC() || providerSupport.haveBC()) {
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA1));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA256));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA384));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA512));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA1));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA256));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA384));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA512));
                 
                 if (providerSupport.haveBC() || TestSupport.isJavaV8OrLater()) {
-                    Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA224));
+                    Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA224));
                 }
             } else {
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA1));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA224));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA256));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA384));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA512));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA1));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA224));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA256));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA384));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_ECDSA_SHA512));
             }
             
             if (providerSupport.haveBC() || TestSupport.isJavaV8OrLater()) {
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA224));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA224));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
                 
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
                 
-                Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128_GCM));
-                Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192_GCM));
-                Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256_GCM));
-                Assert.assertTrue(predicate.apply(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP11));
+                Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128_GCM));
+                Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192_GCM));
+                Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256_GCM));
+                Assert.assertTrue(predicate.test(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP11));
             } else {
                 if (providerSupport.isOpenJDK()) {
-                    Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA224));
-                    Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
-                    Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
+                    Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA224));
+                    Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
+                    Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
                     
-                    Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
+                    Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
                 } else {
-                    Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_SHA224));
-                    Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
-                    Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
+                    Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_DIGEST_SHA224));
+                    Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA224));
+                    Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_MAC_HMAC_SHA224));
                     
-                    Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
+                    Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_DSA_SHA256));
                 }
                 
-                Assert.assertFalse(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128_GCM));
-                Assert.assertFalse(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192_GCM));
-                Assert.assertFalse(predicate.apply(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256_GCM));
+                Assert.assertFalse(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128_GCM));
+                Assert.assertFalse(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192_GCM));
+                Assert.assertFalse(predicate.test(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256_GCM));
                 
-                Assert.assertFalse(predicate.apply(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP11));
+                Assert.assertFalse(predicate.test(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP11));
             }
             
             if (providerSupport.haveBC()) {
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_RIPEMD160));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_MAC_HMAC_RIPEMD160));
-                Assert.assertTrue(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_RIPEMD160));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_DIGEST_RIPEMD160));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_MAC_HMAC_RIPEMD160));
+                Assert.assertTrue(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_RIPEMD160));
             } else {
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_DIGEST_RIPEMD160));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_MAC_HMAC_RIPEMD160));
-                Assert.assertFalse(predicate.apply(SignatureConstants.ALGO_ID_SIGNATURE_RSA_RIPEMD160));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_DIGEST_RIPEMD160));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_MAC_HMAC_RIPEMD160));
+                Assert.assertFalse(predicate.test(SignatureConstants.ALGO_ID_SIGNATURE_RSA_RIPEMD160));
             }
         
         } finally {
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
index 9e8abd5..cf5ef9b 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BasicEncryptionConfigurationTest.java
@@ -233,7 +233,7 @@ public class BasicEncryptionConfigurationTest {
         Assert.assertNull(config.getKeyTransportAlgorithmPredicate());
         
         KeyTransportAlgorithmPredicate predicate = new KeyTransportAlgorithmPredicate() {
-            public boolean apply(@Nullable SelectionInput input) {
+            public boolean test(@Nullable SelectionInput input) {
                 return true;
             }
         };
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 2b4d0ef..0beedfb 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
@@ -499,7 +499,7 @@ public class BasicEncryptionParametersResolverTest extends XMLObjectBaseTestCase
         Assert.assertNull(resolver.resolveKeyTransportAlgorithmPredicate(criteriaSet));
         
         final KeyTransportAlgorithmPredicate predicate = new KeyTransportAlgorithmPredicate() {
-            public boolean apply(@Nullable SelectionInput input) {
+            public boolean test(@Nullable SelectionInput input) {
                 return true;
             }
         };
@@ -528,7 +528,7 @@ public class BasicEncryptionParametersResolverTest extends XMLObjectBaseTestCase
             this.algoMap = algoMap;
         }
         
-        public boolean apply(@Nullable SelectionInput input) {
+        public boolean test(@Nullable SelectionInput input) {
             return this.algoMap.get(input.getDataEncryptionAlgorithm()).equals(input.getKeyTransportAlgorithm());
         }
     }
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
index 678857a..eb3301f 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/BlacklistPredicateTest.java
@@ -30,34 +30,34 @@ public class BlacklistPredicateTest {
     public void testBasic() {
         BlacklistPredicate predicate = new BlacklistPredicate(Arrays.asList("A", "B", "C", "D"));
         
-        Assert.assertFalse(predicate.apply("A"));
-        Assert.assertFalse(predicate.apply("B"));
-        Assert.assertFalse(predicate.apply("C"));
-        Assert.assertFalse(predicate.apply("D"));
+        Assert.assertFalse(predicate.test("A"));
+        Assert.assertFalse(predicate.test("B"));
+        Assert.assertFalse(predicate.test("C"));
+        Assert.assertFalse(predicate.test("D"));
         
-        Assert.assertTrue(predicate.apply("X"));
-        Assert.assertTrue(predicate.apply("Y"));
-        Assert.assertTrue(predicate.apply("Z"));
-        Assert.assertTrue(predicate.apply("foo"));
-        Assert.assertTrue(predicate.apply("bar"));
-        Assert.assertTrue(predicate.apply("bax"));
+        Assert.assertTrue(predicate.test("X"));
+        Assert.assertTrue(predicate.test("Y"));
+        Assert.assertTrue(predicate.test("Z"));
+        Assert.assertTrue(predicate.test("foo"));
+        Assert.assertTrue(predicate.test("bar"));
+        Assert.assertTrue(predicate.test("bax"));
     }
     
     @Test
     public void testWithNullsInSet() {
         BlacklistPredicate predicate = new BlacklistPredicate(Arrays.asList("A", null, "B", null, "C", null, "D"));
         
-        Assert.assertFalse(predicate.apply("A"));
-        Assert.assertFalse(predicate.apply("B"));
-        Assert.assertFalse(predicate.apply("C"));
-        Assert.assertFalse(predicate.apply("D"));
+        Assert.assertFalse(predicate.test("A"));
+        Assert.assertFalse(predicate.test("B"));
+        Assert.assertFalse(predicate.test("C"));
+        Assert.assertFalse(predicate.test("D"));
         
-        Assert.assertTrue(predicate.apply("X"));
-        Assert.assertTrue(predicate.apply("Y"));
-        Assert.assertTrue(predicate.apply("Z"));
-        Assert.assertTrue(predicate.apply("foo"));
-        Assert.assertTrue(predicate.apply("bar"));
-        Assert.assertTrue(predicate.apply("bax"));
+        Assert.assertTrue(predicate.test("X"));
+        Assert.assertTrue(predicate.test("Y"));
+        Assert.assertTrue(predicate.test("Z"));
+        Assert.assertTrue(predicate.test("foo"));
+        Assert.assertTrue(predicate.test("bar"));
+        Assert.assertTrue(predicate.test("bax"));
     }
     
     @Test(expectedExceptions=ConstraintViolationException.class)
@@ -68,7 +68,7 @@ public class BlacklistPredicateTest {
     @Test(expectedExceptions=IllegalArgumentException.class)
     public void testNullArg() {
         BlacklistPredicate predicate = new BlacklistPredicate(Arrays.asList("A", "B", "C", "D"));
-        predicate.apply(null);
+        predicate.test(null);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
index 8762b96..77bed9b 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/impl/WhitelistPredicateTest.java
@@ -33,34 +33,34 @@ public class WhitelistPredicateTest {
     public void testBasic() {
         WhitelistPredicate predicate = new WhitelistPredicate(Arrays.asList("A", "B", "C", "D"));
         
-        Assert.assertTrue(predicate.apply("A"));
-        Assert.assertTrue(predicate.apply("B"));
-        Assert.assertTrue(predicate.apply("C"));
-        Assert.assertTrue(predicate.apply("D"));
+        Assert.assertTrue(predicate.test("A"));
+        Assert.assertTrue(predicate.test("B"));
+        Assert.assertTrue(predicate.test("C"));
+        Assert.assertTrue(predicate.test("D"));
         
-        Assert.assertFalse(predicate.apply("X"));
-        Assert.assertFalse(predicate.apply("Y"));
-        Assert.assertFalse(predicate.apply("Z"));
-        Assert.assertFalse(predicate.apply("foo"));
-        Assert.assertFalse(predicate.apply("bar"));
-        Assert.assertFalse(predicate.apply("bax"));
+        Assert.assertFalse(predicate.test("X"));
+        Assert.assertFalse(predicate.test("Y"));
+        Assert.assertFalse(predicate.test("Z"));
+        Assert.assertFalse(predicate.test("foo"));
+        Assert.assertFalse(predicate.test("bar"));
+        Assert.assertFalse(predicate.test("bax"));
     }
 
     @Test
     public void testWithNullsInSet() {
         WhitelistPredicate predicate = new WhitelistPredicate(Arrays.asList("A", null, "B", null, "C", null, "D"));
         
-        Assert.assertTrue(predicate.apply("A"));
-        Assert.assertTrue(predicate.apply("B"));
-        Assert.assertTrue(predicate.apply("C"));
-        Assert.assertTrue(predicate.apply("D"));
+        Assert.assertTrue(predicate.test("A"));
+        Assert.assertTrue(predicate.test("B"));
+        Assert.assertTrue(predicate.test("C"));
+        Assert.assertTrue(predicate.test("D"));
         
-        Assert.assertFalse(predicate.apply("X"));
-        Assert.assertFalse(predicate.apply("Y"));
-        Assert.assertFalse(predicate.apply("Z"));
-        Assert.assertFalse(predicate.apply("foo"));
-        Assert.assertFalse(predicate.apply("bar"));
-        Assert.assertFalse(predicate.apply("bax"));
+        Assert.assertFalse(predicate.test("X"));
+        Assert.assertFalse(predicate.test("Y"));
+        Assert.assertFalse(predicate.test("Z"));
+        Assert.assertFalse(predicate.test("foo"));
+        Assert.assertFalse(predicate.test("bar"));
+        Assert.assertFalse(predicate.test("bax"));
     }
     
     @Test(expectedExceptions=ConstraintViolationException.class)
@@ -71,7 +71,7 @@ public class WhitelistPredicateTest {
     @Test(expectedExceptions=IllegalArgumentException.class)
     public void testNullArg() {
         WhitelistPredicate predicate = new WhitelistPredicate(Arrays.asList("A", "B", "C", "D"));
-        predicate.apply(null);
+        predicate.test(null);
     }
     
 }
\ No newline at end of file

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


More information about the commits mailing list