[java-identity-provider] 02/06: IDP-1121 Attribute Values are no longer generic. Stage 1

Rod Widdowson rdw at steadingsoftware.com
Fri May 17 09:10:00 EDT 2019


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

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=1389cd7051815339860ab40c75e2d4c7615d83c4

commit 1389cd7051815339860ab40c75e2d4c7615d83c4
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri May 17 09:06:37 2019 +0100

    IDP-1121 Attribute Values are no longer generic.  Stage 1
    
    https://issues.shibboleth.net/jira/browse/IDP-1121
    
    Mass commit to replace all occurences of IdPAttributeValue<?> with
    IdPAttributeValue
---
 .../idp/attribute/ByteAttributeValue.java          |  4 ++--
 .../net/shibboleth/idp/attribute/IdPAttribute.java |  8 +++----
 .../idp/attribute/ScopedStringAttributeValue.java  |  4 ++--
 .../idp/attribute/StringAttributeValue.java        |  4 ++--
 .../shibboleth/idp/attribute/AttributeTest.java    |  4 ++--
 .../idp/attribute/filter/AttributeRule.java        |  4 ++--
 .../shibboleth/idp/attribute/filter/Matcher.java   | 10 ++++----
 .../idp/attribute/filter/MatcherFromPolicy.java    |  4 ++--
 .../idp/attribute/filter/PolicyFromMatcher.java    |  2 +-
 .../idp/attribute/filter/PolicyFromMatcherId.java  |  2 +-
 .../filter/context/AttributeFilterWorkContext.java | 26 ++++++++++----------
 .../filter/AttributeValueFilterPolicyTest.java     |  2 +-
 .../attribute/filter/BaseBridgingClassTester.java  |  8 +++----
 .../attribute/filter/MatcherFromPolicyTest.java    |  6 ++---
 .../idp/attribute/filter/MockMatcher.java          |  6 ++---
 .../context/AttributeFilterWorkContextTest.java    |  6 ++---
 .../filter/matcher/impl/AbstractMatcher.java       |  4 ++--
 .../filter/matcher/impl/ScriptedMatcher.java       |  8 +++----
 .../filter/matcher/logic/impl/AndMatcher.java      |  8 +++----
 .../filter/matcher/logic/impl/NotMatcher.java      |  8 +++----
 .../filter/matcher/logic/impl/OrMatcher.java       |  8 +++----
 .../saml/impl/AttributeInMetadataMatcher.java      | 22 ++++++++---------
 .../filter/impl/AttributeFilterImplTest.java       |  8 +++----
 .../filter/matcher/impl/ScriptedMatcherTest.java   | 10 ++++----
 .../logic/impl/AbstractComposedMatcherTest.java    |  4 ++--
 .../filter/matcher/logic/impl/AndMatcherTest.java  |  6 ++---
 .../filter/matcher/logic/impl/NotMatcherTest.java  |  4 ++--
 .../filter/matcher/logic/impl/OrMatcherTest.java   | 10 ++++----
 .../saml/impl/AttributeInMetadataMatcherTest.java  | 14 +++++------
 .../impl/MappedAttributeInMetadataMatcherTest.java | 14 +++++------
 .../impl/NumOfAttributeValuesPolicyRuleTest.java   |  2 +-
 .../filter/spring/basic/ScriptedTest.java          |  2 +-
 .../matcher/AttributeValueMatcherParserTest.java   |  4 ++--
 .../policy/AttributeRequesterRuleParserTest.java   |  2 +-
 .../policy/ProxiedRequesterRuleParserTest.java     |  2 +-
 .../resolver/PluginDependencySupport.java          | 18 +++++++-------
 .../resolver/PluginDependencySupportTest.java      | 24 +++++++++----------
 .../attribute/resolver/ResolverTestSupport.java    |  4 ++--
 .../ad/impl/ContextDerivedAttributeDefinition.java |  8 +++----
 .../impl/IdPAttributePrincipalValuesFunction.java  |  4 ++--
 .../ad/impl/PrescopedAttributeDefinition.java      | 10 ++++----
 .../ad/impl/RegexSplitAttributeDefinition.java     |  6 ++---
 .../ad/impl/ScopedAttributeDefinition.java         |  6 ++---
 .../ad/impl/ScriptedAttributeDefinition.java       |  6 ++---
 .../resolver/ad/impl/ScriptedIdPAttributeImpl.java |  4 ++--
 .../SubjectDerivedAttributeValuesFunction.java     | 14 +++++------
 .../ad/impl/TemplateAttributeDefinition.java       | 18 +++++++-------
 .../ad/mapped/impl/MappedAttributeDefinition.java  |  8 +++----
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    | 10 ++++----
 .../http/impl/ScriptedResponseMappingStrategy.java | 12 +++++-----
 .../dc/http/impl/TemplatedBodyBuilder.java         | 14 +++++------
 .../resolver/dc/http/impl/TemplatedURLBuilder.java |  8 +++----
 .../dc/impl/AbstractSearchDataConnector.java       |  4 ++--
 .../resolver/dc/impl/ExecutableSearchBuilder.java  |  4 ++--
 .../resolver/dc/impl/PairwiseIdDataConnector.java  |  4 ++--
 .../resolver/dc/impl/ScriptedDataConnector.java    | 16 ++++++-------
 ...ParameterizedExecutableSearchFilterBuilder.java |  8 +++----
 .../impl/StringAttributeValueMappingStrategy.java  |  4 ++--
 .../TemplatedExecutableSearchFilterBuilder.java    |  6 ++---
 .../impl/AbstractExecutableStatementBuilder.java   |  6 ++---
 .../impl/FormatExecutableStatementBuilder.java     |  8 +++----
 .../dc/rdbms/impl/StringResultMappingStrategy.java |  4 ++--
 .../impl/TemplatedExecutableStatementBuilder.java  |  8 +++----
 .../resolver/impl/AttributeResolverImpl.java       |  8 +++----
 .../ContextDerivedAttributeDefinitionTest.java     |  6 ++---
 .../resolver/ad/impl/PrescopedAtributeTest.java    |  2 +-
 .../resolver/ad/impl/RegexAtributeTest.java        |  2 +-
 ...SAML1NameIdentifierAttributeDefinitionTest.java |  8 +++----
 .../impl/SAML2NameIDAttributeDefinitionTest.java   | 10 ++++----
 .../resolver/ad/impl/ScopedAttributeTest.java      |  2 +-
 .../resolver/ad/impl/ScriptedAttributeTest.java    | 28 +++++++++++-----------
 .../resolver/ad/impl/SimpleAttributeTest.java      |  6 ++---
 .../resolver/ad/impl/TemplateAttributeTest.java    |  2 +-
 .../dc/impl/ComputedIDDataConnectorTest.java       | 10 ++++----
 .../dc/impl/SAMLAttributeDataConnector.java        |  8 +++----
 .../dc/impl/SAMLAttributeDataConnectorTest.java    |  2 +-
 .../dc/impl/ScriptedDataConnectorTest.java         |  4 ++--
 .../dc/impl/StoredIDDataConnectorTest.java         |  6 ++---
 .../dc/ldap/impl/LDAPDataConnectorTest.java        | 18 +++++++-------
 .../resolver/dc/ldap/impl/Regressions.java         |  2 +-
 .../dc/rdbms/impl/RDBMSDataConnectorTest.java      | 10 ++++----
 .../resolver/impl/AttributeResolverImplTest.java   |  2 +-
 .../resolver/spring/AttributeResolverTest.java     |  2 +-
 ...ntextDerivedAttributeDefinitionsParserTest.java | 10 ++++----
 .../spring/dc/ScriptDataConnectorParserTest.java   |  2 +-
 .../spring/dc/StaticDataConnectorParserTest.java   |  6 ++---
 .../impl/IdPAttributePrincipalSerializer.java      | 12 +++++-----
 .../attribute/AbstractCASAttributeTranscoder.java  | 10 ++++----
 .../impl/CASScopedStringAttributeTranscoder.java   |  4 ++--
 .../impl/CASStringAttributeTranscoder.java         |  4 ++--
 .../CASScopedStringAttributeTranscoderTest.java    |  8 +++----
 .../impl/CASStringAttributeTranscoderTest.java     |  8 +++----
 .../test/flows/c14n/actions/SetupForSAML1C14N.java |  4 ++--
 .../test/flows/c14n/actions/SetupForSAML2C14N.java |  4 ++--
 .../ar/impl/AttributeReleaseFlowDescriptor.java    |  6 ++---
 .../impl/AttributeReleaseConsentFunction.java      |  4 ++--
 .../logic/impl/AttributeValuesHashFunction.java    |  8 +++----
 .../impl/AttributeReleaseFlowDescriptorTest.java   |  2 +-
 .../idp/consent/impl/ConsentTestingSupport.java    |  6 ++---
 .../impl/AttributeValuesHashFunctionTest.java      |  2 +-
 .../storage/impl/ConsentSerializerTest.java        |  8 +++----
 .../idp/profile/logic/DateAttributePredicate.java  |  4 ++--
 .../profile/logic/DynamicAttributePredicate.java   |  4 ++--
 .../idp/profile/logic/RegexAttributePredicate.java |  4 ++--
 .../profile/logic/SimpleAttributePredicate.java    |  4 ++--
 .../profile/logic/DateAttributePredicateTest.java  |  4 ++--
 .../idp/profile/impl/FilterAttributesTest.java     |  6 ++---
 .../AbstractSAML1AttributeTranscoder.java          |  4 ++--
 .../AbstractSAML2AttributeTranscoder.java          |  4 ++--
 .../AbstractSAMLAttributeTranscoder.java           | 10 ++++----
 .../profile/logic/EntityAttributesPredicate.java   |  8 +++----
 .../impl/AbstractPersistentIdDataConnector.java    |  4 ++--
 .../SAML1NameIdentifierAttributeDefinition.java    | 14 +++++------
 .../impl/SAML2NameIDAttributeDefinition.java       | 12 +++++-----
 .../impl/SAML1ByteAttributeTranscoder.java         |  4 ++--
 .../impl/SAML1ScopedStringAttributeTranscoder.java |  4 ++--
 .../impl/SAML1StringAttributeTranscoder.java       |  4 ++--
 .../impl/SAML1XMLObjectAttributeTranscoder.java    |  4 ++--
 .../impl/SAML2ByteAttributeTranscoder.java         |  4 ++--
 .../impl/SAML2ScopedStringAttributeTranscoder.java |  4 ++--
 .../impl/SAML2StringAttributeTranscoder.java       |  4 ++--
 .../impl/SAML2XMLObjectAttributeTranscoder.java    |  4 ++--
 ...tributeSourcedSAML1NameIdentifierGenerator.java |  6 ++---
 .../impl/AttributeSourcedSAML2NameIDGenerator.java |  6 ++---
 .../impl/PersistentSAML2NameIDGenerator.java       |  4 ++--
 .../profile/impl/FilterByQueriedAttributes.java    |  6 ++---
 .../impl/SAML1ByteAttributeTranscoderTest.java     | 10 ++++----
 .../SAML1ScopedStringAttributeTranscoderTest.java  | 10 ++++----
 .../impl/SAML1StringAttributeTranscoderTest.java   | 10 ++++----
 .../impl/SAML2ByteAttributeTranscoderTest.java     | 10 ++++----
 .../SAML2ScopedStringAttributeTranscoderTest.java  | 10 ++++----
 .../impl/SAML2StringAttributeTranscoderTest.java   | 10 ++++----
 .../SAML2XMLObjectAttributeTranscoderTest.java     | 10 ++++----
 .../net/shibboleth/idp/saml/impl/TestSources.java  |  2 +-
 ...uteSourcedSAML1NameIdentifierGeneratorTest.java |  8 +++----
 .../AttributeSourcedSAML2NameIDGeneratorTest.java  |  6 ++---
 136 files changed, 477 insertions(+), 477 deletions(-)

diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
index 6d52a22..92443f7 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
@@ -109,7 +109,7 @@ public class ByteAttributeValue implements IdPAttributeValue<byte[]> {
      * @param value to inspect
      * @return {@link EmptyAttributeValue} or {@link ByteAttributeValue}
      */
-    @Nonnull public static IdPAttributeValue<?> valueOf(@Nullable final byte[] value) {
+    @Nonnull public static IdPAttributeValue valueOf(@Nullable final byte[] value) {
         if (value == null) {
             return EmptyAttributeValue.NULL;
         } else if (value.length == 0) {
@@ -118,4 +118,4 @@ public class ByteAttributeValue implements IdPAttributeValue<byte[]> {
             return new ByteAttributeValue(value);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
index 56194f5..87b5257 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
@@ -63,7 +63,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
     @Nonnull private Map<Locale, String> displayDescriptions;
 
     /** Values for this attribute. */
-    @Nonnull private List<IdPAttributeValue<?>> values;
+    @Nonnull private List<IdPAttributeValue> values;
 
     /**
      * Constructor.
@@ -156,7 +156,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
      * 
      * @return values of the attribute
      */
-    @Nonnull @NonnullElements @Unmodifiable @NotLive public List<IdPAttributeValue<?>> getValues() {
+    @Nonnull @NonnullElements @Unmodifiable @NotLive public List<IdPAttributeValue> getValues() {
         return values;
     }
 
@@ -165,7 +165,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
      * 
      * @param newValues the new values for this attribute
      */
-    public void setValues(@Nullable @NullableElements final Collection<IdPAttributeValue<?>> newValues) {
+    public void setValues(@Nullable @NullableElements final Collection<IdPAttributeValue> newValues) {
         if (newValues != null) {
             values = newValues.stream().
                      map(e -> e==null? new EmptyAttributeValue(EmptyType.NULL_VALUE) :e).
@@ -229,4 +229,4 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
                 .toString();
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
index cb6f498..cfb3be9 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
@@ -100,7 +100,7 @@ public class ScopedStringAttributeValue extends StringAttributeValue {
      * @param scope of the value
      * @return {@link EmptyAttributeValue} or {@link ScopedStringAttributeValue}
      */
-    public static IdPAttributeValue<?> valueOf(@Nullable final String value, @Nonnull @NotEmpty final String scope) {
+    public static IdPAttributeValue valueOf(@Nullable final String value, @Nonnull @NotEmpty final String scope) {
         if (value == null) {
             return EmptyAttributeValue.NULL;
         } else if (value.length() == 0) {
@@ -109,4 +109,4 @@ public class ScopedStringAttributeValue extends StringAttributeValue {
             return new ScopedStringAttributeValue(value, scope);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
index 47b7172..794bcae 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
@@ -88,7 +88,7 @@ public class StringAttributeValue implements IdPAttributeValue<String> {
      * @param value to inspect
      * @return {@link EmptyAttributeValue} or {@link StringAttributeValue}
      */
-    @Nonnull public static IdPAttributeValue<?> valueOf(@Nullable final String value) {
+    @Nonnull public static IdPAttributeValue valueOf(@Nullable final String value) {
         if (value == null) {
             return EmptyAttributeValue.NULL;
         } else if (value.length() == 0) {
@@ -97,4 +97,4 @@ public class StringAttributeValue implements IdPAttributeValue<String> {
             return new StringAttributeValue(value);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
index 13c186e..814e321 100644
--- a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
+++ b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
@@ -300,7 +300,7 @@ public class AttributeTest {
         Assert.assertFalse(attrib.getValues().contains(value2));
 
         // test replacing all entries
-        List<IdPAttributeValue<?>> values = new ArrayList<>();
+        List<IdPAttributeValue> values = new ArrayList<>();
         values.add(value2);
         attrib.setValues(values);
         Assert.assertFalse(attrib.getValues().isEmpty());
@@ -331,4 +331,4 @@ public class AttributeTest {
         attrib.setDisplayNames(Collections.singletonMap(new Locale("en"), "Name"));
         attrib.toString();
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
index 70b736c..d6e45ae 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
@@ -183,7 +183,7 @@ public class AttributeRule extends AbstractIdentifiableInitializableComponent im
         log.debug("{} Filtering values for attribute '{}' which currently contains {} values", getLogPrefix(),
                 getAttributeId(), attribute.getValues().size());
 
-        final Set<IdPAttributeValue<?>> matchingValues = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> matchingValues = matcher.getMatchingValues(attribute, filterContext);
 
         if (!isDenyRule) {
             if (null == matchingValues) {
@@ -236,4 +236,4 @@ public class AttributeRule extends AbstractIdentifiableInitializableComponent im
         return result;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
index 74f4302..34d61fe 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
@@ -41,7 +41,7 @@ public interface Matcher extends IdentifiedComponent {
     public static final Matcher MATCHES_ALL = new Matcher() {
 
         /** {@inheritDoc} */
-        @Override public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+        @Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
                 @Nonnull final AttributeFilterContext filterContext) {
             return ImmutableSet.copyOf(attribute.getValues());
         }
@@ -56,7 +56,7 @@ public interface Matcher extends IdentifiedComponent {
     public static final Matcher MATCHES_NONE = new Matcher() {
 
         /** {@inheritDoc} */
-        @Override public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+        @Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
                 @Nonnull final AttributeFilterContext filterContext) {
             return Collections.emptySet();
         }
@@ -71,7 +71,7 @@ public interface Matcher extends IdentifiedComponent {
     public static final Matcher MATCHER_FAILS = new Matcher() {
 
         /** {@inheritDoc} */
-        @Override public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+        @Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
                 @Nonnull final AttributeFilterContext filterContext) {
             return null;
         }
@@ -89,7 +89,7 @@ public interface Matcher extends IdentifiedComponent {
      * @param filterContext the filter context
      * @return The result of this rule. Null if we failed.
      */
-    @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue<?>> getMatchingValues(
+    @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue> getMatchingValues(
             @Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext);
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
index ea916e5..83c6aa8 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
@@ -71,7 +71,7 @@ public class MatcherFromPolicy extends BaseBridgingClass implements Matcher, Ide
 
     /** {@inheritDoc} */
     @Override
-    @Nullable public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+    @Nullable public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
             @Nonnull final AttributeFilterContext filterContext) {
 
         final Tristate result= rule.matches(filterContext);
@@ -88,4 +88,4 @@ public class MatcherFromPolicy extends BaseBridgingClass implements Matcher, Ide
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
index 41b88c9..2868c3a 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
@@ -69,7 +69,7 @@ public class PolicyFromMatcher extends BaseBridgingClass implements PolicyRequir
         log.debug("{} Applying matcher supplied as policy to all values of all attributes", getLogPrefix());
 
         for (final IdPAttribute attribute : context.getPrefilteredIdPAttributes().values()) {
-            final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, context);
+            final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, context);
             if (null == result) {
                 log.warn("{} Matcher returned null, returning FAIL", getLogPrefix());
                 return Tristate.FAIL;
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
index 7bcac9a..63c204b 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
@@ -90,7 +90,7 @@ public class PolicyFromMatcherId extends BaseBridgingClass implements PolicyRequ
             log.debug("{} No attribute found with Id of {}", getLogPrefix(), attributeId);
             return Tristate.FALSE;
         }
-        final Set<IdPAttributeValue<?>> result = theMatcher.getMatchingValues(attribute, context);
+        final Set<IdPAttributeValue> result = theMatcher.getMatchingValues(attribute, context);
 
         if (null == result) {
             log.warn("{} Matcher returned null, returning FAIL", getLogPrefix());
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
index 16ee7ec..17dcb87 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
@@ -51,15 +51,15 @@ import org.opensaml.messaging.context.BaseContext;
 public final class AttributeFilterWorkContext extends BaseContext {
 
     /** Values, for a given attribute, that are permitted to be released. */
-    private final Map<String, Set<IdPAttributeValue<?>>> permittedValues;
+    private final Map<String, Set<IdPAttributeValue>> permittedValues;
 
     /** Values, for a given attribute, that are not permitted to be released. */
-    private final Map<String, Set<IdPAttributeValue<?>>> deniedValues;
+    private final Map<String, Set<IdPAttributeValue>> deniedValues;
 
     /** Constructor. */
     public AttributeFilterWorkContext() {
-        permittedValues = new HashMap<String, Set<IdPAttributeValue<?>>>();
-        deniedValues = new HashMap<String, Set<IdPAttributeValue<?>>>();
+        permittedValues = new HashMap<String, Set<IdPAttributeValue>>();
+        deniedValues = new HashMap<String, Set<IdPAttributeValue>>();
     }
 
     /**
@@ -68,7 +68,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * @return collection of attribute values, indexed by ID, that are permitted to be released,
      */
     @Nonnull @NonnullElements @Unmodifiable public
-            Map<String, Set<IdPAttributeValue<?>>> getPermittedIdPAttributeValues() {
+            Map<String, Set<IdPAttributeValue>> getPermittedIdPAttributeValues() {
         return Collections.unmodifiableMap(permittedValues);
     }
 
@@ -82,7 +82,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * @param attributeValues values for the attribute that are permitted to be released
      */
     public void addPermittedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
-            @Nullable @NullableElements final Collection<IdPAttributeValue<?>> attributeValues) {
+            @Nullable @NullableElements final Collection<IdPAttributeValue> attributeValues) {
         final AttributeFilterContext parent = (AttributeFilterContext) getParent();
         final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
         final String trimmedAttributeId =
@@ -94,13 +94,13 @@ public final class AttributeFilterWorkContext extends BaseContext {
             return;
         }
 
-        Set<IdPAttributeValue<?>> permittedAttributeValues = permittedValues.get(trimmedAttributeId);
+        Set<IdPAttributeValue> permittedAttributeValues = permittedValues.get(trimmedAttributeId);
         if (permittedAttributeValues == null) {
             permittedAttributeValues = new HashSet<>();
             permittedValues.put(trimmedAttributeId, permittedAttributeValues);
         }
 
-        for (final IdPAttributeValue<?> value : attributeValues) {
+        for (final IdPAttributeValue value : attributeValues) {
             if (value != null) {
                 if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
                     throw new IllegalArgumentException("permitted value is not a current value of attribute "
@@ -119,7 +119,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * 
      * @return collection of attribute values, indexed by ID, that are not permitted to be released
      */
-    @Nonnull @NonnullElements @Unmodifiable public Map<String, Set<IdPAttributeValue<?>>> getDeniedAttributeValues() {
+    @Nonnull @NonnullElements @Unmodifiable public Map<String, Set<IdPAttributeValue>> getDeniedAttributeValues() {
         return Collections.unmodifiableMap(deniedValues);
     }
 
@@ -133,7 +133,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * @param attributeValues values for the attribute that are not permitted to be released
      */
     public void addDeniedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
-            @Nullable @NullableElements final Collection<IdPAttributeValue<?>> attributeValues) {
+            @Nullable @NullableElements final Collection<IdPAttributeValue> attributeValues) {
         final AttributeFilterContext parent = (AttributeFilterContext) getParent();
         final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
         final String trimmedAttributeId =
@@ -145,13 +145,13 @@ public final class AttributeFilterWorkContext extends BaseContext {
             return;
         }
 
-        Set<IdPAttributeValue<?>> deniedAttributeValues = deniedValues.get(trimmedAttributeId);
+        Set<IdPAttributeValue> deniedAttributeValues = deniedValues.get(trimmedAttributeId);
         if (deniedAttributeValues == null) {
             deniedAttributeValues = new HashSet<>();
             deniedValues.put(trimmedAttributeId, deniedAttributeValues);
         }
 
-        for (final IdPAttributeValue<?> value : attributeValues) {
+        for (final IdPAttributeValue value : attributeValues) {
             if (value != null) {
                 if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
                     throw new IllegalArgumentException("denied value is not a current value of attribute "
@@ -165,4 +165,4 @@ public final class AttributeFilterWorkContext extends BaseContext {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/AttributeValueFilterPolicyTest.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/AttributeValueFilterPolicyTest.java
index d99c74d..d7ed33f 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/AttributeValueFilterPolicyTest.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/AttributeValueFilterPolicyTest.java
@@ -235,7 +235,7 @@ public class AttributeValueFilterPolicyTest {
 
         policy.apply(attribute1, context);
 
-        Collection<IdPAttributeValue<?>> result = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
+        Collection<IdPAttributeValue> result = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
         Assert.assertEquals(result.size(), 2);
         Assert.assertTrue(result.contains(aStringAttributeValue));
         Assert.assertTrue(result.contains(cStringAttributeValue));
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
index 051aa7b..af58b4e 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
@@ -34,9 +34,9 @@ import org.testng.annotations.Test;
  */
 public class BaseBridgingClassTester {
     
-    protected final IdPAttributeValue<?> VALUE1 = new StringAttributeValue("value1");
-    protected final IdPAttributeValue<?> VALUE2 = new StringAttributeValue("value2");
-    protected final IdPAttributeValue<?> VALUE3 = new StringAttributeValue("value3");
+    protected final IdPAttributeValue VALUE1 = new StringAttributeValue("value1");
+    protected final IdPAttributeValue VALUE2 = new StringAttributeValue("value2");
+    protected final IdPAttributeValue VALUE3 = new StringAttributeValue("value3");
     
     protected final String NAME1 = "foo";
     protected final String NAME2 = "bar";
@@ -72,4 +72,4 @@ public class BaseBridgingClassTester {
         
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
index a18fa6b..f05504b 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
@@ -36,7 +36,7 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
         
         AttributeFilterContext context = setUpCtx();
         
-        Set<IdPAttributeValue<?>> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+        Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
         
         Assert.assertEquals(values.size(), 2);
         Assert.assertTrue(values.contains(VALUE1));
@@ -48,7 +48,7 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
         
         AttributeFilterContext context = setUpCtx();
         
-        Set<IdPAttributeValue<?>> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+        Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
         
         Assert.assertTrue(values.isEmpty());
     }
@@ -58,7 +58,7 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
         
         AttributeFilterContext context = setUpCtx();
         
-        Set<IdPAttributeValue<?>> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+        Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
         
         Assert.assertNull(values);
     }
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
index 0858b72..32033da 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
@@ -79,7 +79,7 @@ public class MockMatcher extends AbstractIdentifiedInitializableComponent implem
 
     /** {@inheritDoc} */
     @Override
-    public Set<IdPAttributeValue<?>> getMatchingValues(IdPAttribute attribute, AttributeFilterContext filterContext) {
+    public Set<IdPAttributeValue> getMatchingValues(IdPAttribute attribute, AttributeFilterContext filterContext) {
         if (fails) {
             return null;
         }
@@ -91,7 +91,7 @@ public class MockMatcher extends AbstractIdentifiedInitializableComponent implem
             return ImmutableSet.copyOf(attribute.getValues());
         }
 
-        HashSet<IdPAttributeValue<?>> values = new HashSet<>();
+        HashSet<IdPAttributeValue> values = new HashSet<>();
         for (IdPAttributeValue value : attribute.getValues()) {
             if (matchingValues.contains(value)) {
                 values.add(value);
@@ -124,4 +124,4 @@ public class MockMatcher extends AbstractIdentifiedInitializableComponent implem
     public void setFailValidate(boolean doFail) {
         fails = doFail;
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
index d0b4bcc..d00ffcd 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
@@ -55,7 +55,7 @@ public class AttributeFilterWorkContextTest {
         context.addPermittedIdPAttributeValues("one", null);
         Assert.assertEquals(context.getPermittedIdPAttributeValues().get("one").size(), 1);
 
-        context.addPermittedIdPAttributeValues("one", new ArrayList<IdPAttributeValue<?>>());
+        context.addPermittedIdPAttributeValues("one", new ArrayList<IdPAttributeValue>());
         Assert.assertEquals(context.getPermittedIdPAttributeValues().get("one").size(), 1);
 
         context.addPermittedIdPAttributeValues("one", Collections.singletonList(bStringAttributeValue));
@@ -105,7 +105,7 @@ public class AttributeFilterWorkContextTest {
         context.addDeniedIdPAttributeValues("one", null);
         Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
 
-        context.addDeniedIdPAttributeValues("one", new ArrayList<IdPAttributeValue<?>>());
+        context.addDeniedIdPAttributeValues("one", new ArrayList<IdPAttributeValue>());
         Assert.assertEquals(context.getDeniedAttributeValues().get("one").size(), 1);
 
         context.addDeniedIdPAttributeValues("one", Collections.singletonList(bStringAttributeValue));
@@ -140,4 +140,4 @@ public class AttributeFilterWorkContextTest {
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
index 769b3a7..bf087b6 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
@@ -58,7 +58,7 @@ public abstract class AbstractMatcher extends AbstractIdentifiableInitializableC
     /**
      * {@inheritDoc}
      */
-    @Override @Nonnull @NonnullElements @Unmodifiable public Set<IdPAttributeValue<?>> getMatchingValues(
+    @Override @Nonnull @NonnullElements @Unmodifiable public Set<IdPAttributeValue> getMatchingValues(
             @Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext) {
 
         final HashSet matchedValues = new HashSet();
@@ -100,4 +100,4 @@ public abstract class AbstractMatcher extends AbstractIdentifiableInitializableC
         return prefix;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
index ece28d3..aae136a 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
@@ -190,7 +190,7 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
      * </p>
      * {@inheritDoc}
      */
-    @Override @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue<?>> getMatchingValues(
+    @Override @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue> getMatchingValues(
             @Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext) {
         Constraint.isNotNull(attribute, "Attribute to be filtered cannot be null");
         Constraint.isNotNull(filterContext, "AttributeFilterContext cannot be null");
@@ -256,7 +256,7 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
          * 
          * @return script result
          */
-        @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue<?>> execute(
+        @Nullable @NonnullElements @Unmodifiable public Set<IdPAttributeValue> execute(
                 @Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext) {
             final Object result = evaluate(attribute, filterContext);
             if (null == result) {
@@ -264,7 +264,7 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
                 return null;
             }
 
-            final HashSet<IdPAttributeValue<?>> returnValues = new HashSet<>(attribute.getValues());
+            final HashSet<IdPAttributeValue> returnValues = new HashSet<>(attribute.getValues());
             returnValues.retainAll((Set) result);
             return Collections.unmodifiableSet(returnValues);
         }
@@ -301,4 +301,4 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcher.java
index 9c8738a..3f6f719 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcher.java
@@ -53,7 +53,7 @@ public class AndMatcher extends AbstractComposedMatcher {
      * {@link Matcher}. {@inheritDoc}
      */
     @Override @Nullable @NonnullElements 
-    public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+    public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
             @Nonnull final AttributeFilterContext filterContext) {
         Constraint.isNotNull(attribute, "Attribute to be filtered can not be null");
         Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
@@ -67,11 +67,11 @@ public class AndMatcher extends AbstractComposedMatcher {
         final Iterator<Matcher> matcherItr = currentMatchers.iterator();
 
         // pre-load the set with the first contents
-        Set<IdPAttributeValue<?>> match = matcherItr.next().getMatchingValues(attribute, filterContext);
+        Set<IdPAttributeValue> match = matcherItr.next().getMatchingValues(attribute, filterContext);
         if (null == match) {
             return null;
         }
-        final Set<IdPAttributeValue<?>> matchingValues = new HashSet(match);
+        final Set<IdPAttributeValue> matchingValues = new HashSet(match);
         while (matcherItr.hasNext()) {
             match = matcherItr.next().getMatchingValues(attribute, filterContext);
             if (null == match) {
@@ -99,4 +99,4 @@ public class AndMatcher extends AbstractComposedMatcher {
         return MoreObjects.toStringHelper(this).add("Composed Matchers : ", getComposedMatchers()).toString();
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcher.java
index 486f41d..9693fc8 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcher.java
@@ -72,7 +72,7 @@ public final class NotMatcher extends AbstractIdentifiableInitializableComponent
      * A given attribute value is considered to have matched if it is not returned by the composed {@link Matcher}.
      * {@inheritDoc}
      */
-    @Override @Nullable @NonnullElements public Set<IdPAttributeValue<?>> getMatchingValues(
+    @Override @Nullable @NonnullElements public Set<IdPAttributeValue> getMatchingValues(
             @Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext) {
         Constraint.isNotNull(attribute, "Attribute to be filtered can not be null");
         Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
@@ -83,9 +83,9 @@ public final class NotMatcher extends AbstractIdentifiableInitializableComponent
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final Set<IdPAttributeValue<?>> attributeValues = new HashSet<>(attribute.getValues());
+        final Set<IdPAttributeValue> attributeValues = new HashSet<>(attribute.getValues());
 
-        final Set<IdPAttributeValue<?>> matches = currentMatcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> matches = currentMatcher.getMatchingValues(attribute, filterContext);
         if (null == matches) {
             return matches;
         }
@@ -110,4 +110,4 @@ public final class NotMatcher extends AbstractIdentifiableInitializableComponent
     @Override public String toString() {
         return MoreObjects.toStringHelper(this).add("negatedMatcher", negatedMatcher).toString();
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcher.java
index 164e9c4..2bcde5e 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcher.java
@@ -45,7 +45,7 @@ public class OrMatcher extends AbstractComposedMatcher {
 
     /** {@inheritDoc} */
     @Override @Nullable @NonnullElements
-    public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+    public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
             @Nonnull final AttributeFilterContext filterContext) {
         Constraint.isNotNull(attribute, "Attribute to be filtered can not be null");
         Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
@@ -56,9 +56,9 @@ public class OrMatcher extends AbstractComposedMatcher {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final Set<IdPAttributeValue<?>> matchingValues = new LazySet<>();
+        final Set<IdPAttributeValue> matchingValues = new LazySet<>();
         for (final Matcher matchFunctor : currentMatchers) {
-            final Set<IdPAttributeValue<?>> matches = matchFunctor.getMatchingValues(attribute, filterContext);
+            final Set<IdPAttributeValue> matches = matchFunctor.getMatchingValues(attribute, filterContext);
             if (null == matches) {
                 return null;
             }
@@ -76,4 +76,4 @@ public class OrMatcher extends AbstractComposedMatcher {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
index 2b09b19..b51222a 100644
--- a/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
+++ b/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
@@ -172,7 +172,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
 
 // Checkstyle: CyclomaticComplexity|ReturnCount|MethodLength OFF
     /** {@inheritDoc} */
-    @Override @Nonnull public Set<IdPAttributeValue<?>> getMatchingValues(@Nonnull final IdPAttribute attribute,
+    @Override @Nonnull public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
             @Nonnull final AttributeFilterContext filterContext) {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         
@@ -208,7 +208,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
                 return Collections.emptySet();
             }
             
-            final Set<IdPAttributeValue<?>> values = new HashSet<>();
+            final Set<IdPAttributeValue> values = new HashSet<>();
             values.addAll(filterValues(attributeToLog, attribute, requestedAttribute.getAttributeValues()));
             return values;
         } else {
@@ -243,7 +243,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
                 return Collections.emptySet();
             }
 
-            final Set<IdPAttributeValue<?>> values = new HashSet<>();
+            final Set<IdPAttributeValue> values = new HashSet<>();
 
             for (final IdPAttribute requestedAttribute
                     : Collections2.filter(requestedAttributeList, Predicates.notNull())) {
@@ -317,15 +317,15 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
      * @param requestedValues the values
      * @return the result of the filter
      */
-    @Nonnull private Set<IdPAttributeValue<?>> filterValues(@Nullable final IdPAttribute attribute,
-            @Nonnull @NonnullElements final List<IdPAttributeValue<?>> requestedValues) {
+    @Nonnull private Set<IdPAttributeValue> filterValues(@Nullable final IdPAttribute attribute,
+            @Nonnull @NonnullElements final List<IdPAttributeValue> requestedValues) {
 
         if (null == requestedValues || requestedValues.isEmpty()) {
             log.debug("{} Attribute {} found in metadata and no values specified", getLogPrefix(), attribute.getId());
             return ImmutableSet.copyOf(attribute.getValues());
         }
 
-        final ImmutableSet.Builder<IdPAttributeValue<?>> builder = ImmutableSet.builder();
+        final ImmutableSet.Builder<IdPAttributeValue> builder = ImmutableSet.builder();
 
         for (final IdPAttributeValue attributeValue : attribute.getValues()) {
             if (requestedValues.contains(attributeValue)) {
@@ -333,7 +333,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
             }
         }
         
-        final ImmutableSet<IdPAttributeValue<?>> result = builder.build();
+        final ImmutableSet<IdPAttributeValue> result = builder.build();
         log.debug("{} Values matched with metadata for Attribute {} : {}", getLogPrefix(), attribute.getId(), result);
         return result;
     }
@@ -347,7 +347,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
      * 
      * @return the result of the filter
      */
-    @Nonnull private Set<IdPAttributeValue<?>> filterValues(@Nonnull final String attributeToLog,
+    @Nonnull private Set<IdPAttributeValue> filterValues(@Nonnull final String attributeToLog,
             @Nullable final IdPAttribute attribute, @Nonnull @NonnullElements final List<XMLObject> requestedValues) {
 
         if (requestedValues.isEmpty()) {
@@ -355,7 +355,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
             return ImmutableSet.copyOf(attribute.getValues());
         }
 
-        final ImmutableSet.Builder<IdPAttributeValue<?>> builder = ImmutableSet.builder();
+        final ImmutableSet.Builder<IdPAttributeValue> builder = ImmutableSet.builder();
 
         for (final IdPAttributeValue attributeValue : attribute.getValues()) {
             if (attributeValue instanceof StringAttributeValue) {
@@ -370,7 +370,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
             }
         }
         
-        final ImmutableSet<IdPAttributeValue<?>> result = builder.build();
+        final ImmutableSet<IdPAttributeValue> result = builder.build();
         log.debug("{} Values matched with metadata for Attribute {} : {}", getLogPrefix(), attributeToLog, result);
         return result;
     }
@@ -437,4 +437,4 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
         return prefix;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
index 04df9f6..97cb407 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
@@ -142,7 +142,7 @@ public class AttributeFilterImplTest {
         filter.filterAttributes(filterContext);
         final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
         Assert.assertEquals(resultAttrs.size(), 1);
-        final List<IdPAttributeValue<?>> result = resultAttrs.get("attribute1").getValues();
+        final List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
         Assert.assertEquals(result.size(), 2);
         Assert.assertTrue(result.contains(new StringAttributeValue("one")));
         Assert.assertTrue(result.contains(new StringAttributeValue("two")));
@@ -172,7 +172,7 @@ public class AttributeFilterImplTest {
         filter.initialize();
 
         filter.filterAttributes(filterContext);
-        List<IdPAttributeValue<?>> result = filterContext.getFilteredIdPAttributes().get("attribute1").getValues();
+        List<IdPAttributeValue> result = filterContext.getFilteredIdPAttributes().get("attribute1").getValues();
         Assert.assertEquals(result.size(), 2);
         Assert.assertTrue(result.contains(new StringAttributeValue("one")));
         Assert.assertTrue(result.contains(new StringAttributeValue("two")));
@@ -271,7 +271,7 @@ public class AttributeFilterImplTest {
         filter.filterAttributes(filterContext);
         Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
         Assert.assertEquals(resultAttrs.size(), 1);
-        List<IdPAttributeValue<?>> result = resultAttrs.get("attribute1").getValues();
+        List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
         Assert.assertEquals(result.size(), 1);
         Assert.assertTrue(result.contains(new StringAttributeValue("two")));
     }
@@ -372,4 +372,4 @@ public class AttributeFilterImplTest {
         Assert.assertTrue(matcher.isDestroyed());
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
index ce3d653..0533ea9 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
@@ -185,7 +185,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("Test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
@@ -199,7 +199,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setCustomObject(custom);
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
@@ -230,7 +230,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("Test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
@@ -314,12 +314,12 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
         subject.getPrincipals().add(new AuthenticationMethodPrincipal("FOO"));
         sc.getAuthenticationResults().put("one", new AuthenticationResult("1", subject));        
         
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertEquals(result.size(), 0);
 
         final IdPAttribute newAttr = attribute.clone();
 
-        final Set<IdPAttributeValue<?>> s = new HashSet(2);
+        final Set<IdPAttributeValue> s = new HashSet(2);
         s.add(new StringAttributeValue(ProfileRequestContext.class.getName()));
         s.add(new StringAttributeValue("BAR"));
         s.add(new StringAttributeValue("FOO"));
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcherTest.java
index 4a3f829..e0249ce 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AbstractComposedMatcherTest.java
@@ -131,7 +131,7 @@ public class AbstractComposedMatcherTest {
             setSubsidiaries(composedMatchers);
         }
 
-        @Override public Set<IdPAttributeValue<?>> getMatchingValues(final IdPAttribute attribute,
+        @Override public Set<IdPAttributeValue> getMatchingValues(final IdPAttribute attribute,
                 final AttributeFilterContext filterContext) {
             return null;
         }
@@ -141,7 +141,7 @@ public class AbstractComposedMatcherTest {
     public static class TestMatcher extends AbstractInitializableComponent implements Matcher, DestructableComponent,
             InitializableComponent {
 
-        @Override public Set<IdPAttributeValue<?>> getMatchingValues(final IdPAttribute attribute,
+        @Override public Set<IdPAttributeValue> getMatchingValues(final IdPAttribute attribute,
                 final AttributeFilterContext filterContext) {
             return null;
         }
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
index 1478c62..5ea94cb 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
@@ -85,7 +85,7 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(value2));
         assertTrue(result.contains(value1));
@@ -108,7 +108,7 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(value2));
@@ -127,7 +127,7 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNull(result);
 
         matcher = newAndMatcher(Arrays.<Matcher> asList(Matcher.MATCHER_FAILS, Matcher.MATCHES_ALL));
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
index 8dce2f9..d209fbd 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
@@ -115,7 +115,7 @@ public class NotMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(value3));
@@ -148,7 +148,7 @@ public class NotMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNull(result);
     }
     
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
index a7ad359..abf953f 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
@@ -87,7 +87,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(value2));
         assertTrue(result.contains(value1));
@@ -111,7 +111,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("Test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(value2) && result.contains(value1));
@@ -142,7 +142,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("Test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(value2) && result.contains(value1));
@@ -159,7 +159,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("Test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNotNull(result);
         assertTrue(result.isEmpty());
 
@@ -170,7 +170,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
         matcher.setId("test");
         matcher.initialize();
 
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attribute, filterContext);
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
         assertNull(result);
     }
     
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
index 260a2b7..5c0a6ab 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
@@ -65,7 +65,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
         valueBuilder = XMLObjectProviderRegistrySupport.getBuilderFactory().<XSString>getBuilderOrThrow(XSString.TYPE_NAME);
     }
 
-    private IdPAttribute makeAttribute(String id, List<IdPAttributeValue<?>> values) {
+    private IdPAttribute makeAttribute(String id, List<IdPAttributeValue> values) {
         final IdPAttribute attr = new IdPAttribute(id);
         attr.setValues(values);
         return attr;
@@ -128,7 +128,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
         final IdPAttribute attr =
                 makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
 
-        Set<IdPAttributeValue<?>> result =
+        Set<IdPAttributeValue> result =
                 makeMatcher("test", true, true, null, null).getMatchingValues(attr, new AttributeFilterContext());
 
         assertEquals(result.size(), 2);
@@ -145,7 +145,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
                 makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
 
         final AttributeInMetadataMatcher matcher = makeMatcher("test", true, false, "wrongAttr", Attribute.URI_REFERENCE);
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attr, makeContext(null));
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(attr, makeContext(null));
 
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
@@ -169,7 +169,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
         wrongAttr.setName("attr2");
         wrongAttr.setNameFormat(Attribute.BASIC);
         
-        final Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attr, makeContext(wrongAttr));
+        final Set<IdPAttributeValue> result = matcher.getMatchingValues(attr, makeContext(wrongAttr));
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
         assertTrue(result.contains(DataSources.NON_MATCH_STRING_VALUE));
@@ -186,7 +186,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
         req.setNameFormat(Attribute.BASIC);
         final AttributeFilterContext context = makeContext(req);
 
-        Set<IdPAttributeValue<?>> result =
+        Set<IdPAttributeValue> result =
                 makeMatcher("test", false, false, "attr", Attribute.BASIC).getMatchingValues(attr, context);
 
         assertEquals(result.size(), 2);
@@ -212,7 +212,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
 
         final AttributeFilterContext context = makeContext(req);
 
-        final Set<IdPAttributeValue<?>> result =
+        final Set<IdPAttributeValue> result =
                 makeMatcher("test", false, true, "attr", Attribute.BASIC).getMatchingValues(attr, context);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(DataSources.STRING_VALUE));
@@ -240,7 +240,7 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
 
         setRequestedAttributesInContext(context, Collections.singletonList(req));
 
-        final Set<IdPAttributeValue<?>> result =
+        final Set<IdPAttributeValue> result =
                 makeMatcher("test", false, true, "attr", Attribute.BASIC).getMatchingValues(attr, context);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
index 6f5b807..c1ff911 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
@@ -60,7 +60,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
                         AttributeConsumingService.DEFAULT_ELEMENT_NAME);
     }
     
-    private IdPAttribute makeAttribute(String id, List<IdPAttributeValue<?>> values) {
+    private IdPAttribute makeAttribute(String id, List<IdPAttributeValue> values) {
         IdPAttribute attr = new IdPAttribute(id);
         attr.setValues(values);
         return attr;
@@ -123,7 +123,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
         final IdPAttribute attr =
                 makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
 
-        Set<IdPAttributeValue<?>> result =
+        Set<IdPAttributeValue> result =
                 makeMatcher("test", true, true).getMatchingValues(attr, new AttributeFilterContext());
 
         assertEquals(result.size(), 2);
@@ -140,7 +140,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
                 makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
 
         final AttributeInMetadataMatcher matcher = makeMatcher("test", true, true);
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(attr, makeContext(null));
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(attr, makeContext(null));
 
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
@@ -160,7 +160,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
 
         AttributeFilterContext context = makeContext(required);
 
-        Set<IdPAttributeValue<?>> result = makeMatcher("test", false, false).getMatchingValues(attr, context);
+        Set<IdPAttributeValue> result = makeMatcher("test", false, false).getMatchingValues(attr, context);
 
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
@@ -181,7 +181,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
 
         AttributeFilterContext context = makeContext(required);
 
-        Set<IdPAttributeValue<?>> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
+        Set<IdPAttributeValue> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
         assertEquals(result.size(), 1);
         assertTrue(result.contains(DataSources.STRING_VALUE));
     }
@@ -193,7 +193,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
 
         AttributeFilterContext context = makeContext("attr", null);
 
-        Set<IdPAttributeValue<?>> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
+        Set<IdPAttributeValue> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
         assertTrue(result.isEmpty());
     }
 
@@ -217,7 +217,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
         multimap.put(req2.getId(), req2);
         setRequestedAttributesInContext(context, multimap);
 
-        Set<IdPAttributeValue<?>> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
+        Set<IdPAttributeValue> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
         assertEquals(result.size(), 2);
         assertTrue(result.contains(DataSources.STRING_VALUE));
         assertTrue(result.contains(DataSources.NON_MATCH_STRING_VALUE));
diff --git a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/NumOfAttributeValuesPolicyRuleTest.java b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/NumOfAttributeValuesPolicyRuleTest.java
index faf731e..af7b8e4 100644
--- a/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/NumOfAttributeValuesPolicyRuleTest.java
+++ b/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/NumOfAttributeValuesPolicyRuleTest.java
@@ -110,7 +110,7 @@ public class NumOfAttributeValuesPolicyRuleTest {
 
     private AttributeFilterContext manufactureWith(String name, int howMany) {
         final IdPAttribute attr = new IdPAttribute(name);
-        final HashSet<IdPAttributeValue<?>> hs = new HashSet<>(howMany);
+        final HashSet<IdPAttributeValue> hs = new HashSet<>(howMany);
         
         for (int i = 0; i < howMany; i++) {
             hs.add(new StringAttributeValue(Integer.toString(i)));
diff --git a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
index 1782999..2578986 100644
--- a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
+++ b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
@@ -76,7 +76,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
         
         AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue<?>> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
         assertEquals(x.size(), 1);
         String val = (String) x.iterator().next().getValue();
         assertTrue(val.equals("jsmith") || val.equals("daffyDuck"));
diff --git a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
index 98ed793..53d2d3b 100644
--- a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
+++ b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
@@ -110,7 +110,7 @@ public class AttributeValueMatcherParserTest extends BaseAttributeFilterParserTe
 
         AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
         assertTrue(result.isEmpty());
 
         filterContext = new AttributeFilterContext();
@@ -134,7 +134,7 @@ public class AttributeValueMatcherParserTest extends BaseAttributeFilterParserTe
 
         AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
         assertTrue(result.isEmpty());
 
         filterContext = new AttributeFilterContext();
diff --git a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
index 5a77fa5..b322b30 100644
--- a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
+++ b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
@@ -117,7 +117,7 @@ public class AttributeRequesterRuleParserTest extends BaseAttributeFilterParserT
 
         AttributeFilterContext filterContext = DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
         assertTrue(result.isEmpty());
 
         filterContext = DataSources.populatedFilterContext("principal", "issuer", "https://service.example.edu/shibboleth-sp");
diff --git a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
index 1b14d99..96eb0a6 100644
--- a/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
+++ b/idp-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
@@ -77,7 +77,7 @@ public class ProxiedRequesterRuleParserTest extends BaseAttributeFilterParserTes
         filterContext.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
 
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue<?>> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
         assertTrue(result.isEmpty());
 
         filterContext.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("https://service.example.edu/shibboleth-sp");
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
index 774ec1b..01c5a6c 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
@@ -65,7 +65,7 @@ public final class PluginDependencySupport {
      *         attribute name
      */
     // Checkstyle: MethodLength|CyclomaticComplexity OFF
-    @Nonnull @NonnullElements public static List<IdPAttributeValue<?>> getMergedAttributeValues(
+    @Nonnull @NonnullElements public static List<IdPAttributeValue> getMergedAttributeValues(
             @Nonnull final AttributeResolverWorkContext workContext,
             @Nonnull @NonnullElements final Collection<ResolverAttributeDefinitionDependency> attributeDependencies,
             @Nonnull @NonnullElements final Collection<ResolverDataConnectorDependency> dataConnectorDependencies,
@@ -73,7 +73,7 @@ public final class PluginDependencySupport {
         Constraint.isNotNull(workContext, "Attribute resolution context cannot be null");
         Constraint.isNotNull(attributeDependencies, "Resolver dependency collection cannot be null");
 
-        final List<IdPAttributeValue<?>> values = new ArrayList<>();
+        final List<IdPAttributeValue> values = new ArrayList<>();
         if (LOG.isTraceEnabled()) {
             LOG.trace("GetMergedAttribute Values for {}", attributeDefinitionId);
         }
@@ -135,12 +135,12 @@ public final class PluginDependencySupport {
      * @return the merged value set
      */
     // Checkstyle: MethodLength|CyclomaticComplexity OFF
-    public static Map<String, List<IdPAttributeValue<?>>> getAllAttributeValues(
+    public static Map<String, List<IdPAttributeValue>> getAllAttributeValues(
             @Nonnull final AttributeResolverWorkContext workContext,
             @Nonnull final Collection<ResolverAttributeDefinitionDependency> attributeDependencies,
             @Nonnull @NonnullElements final Collection<ResolverDataConnectorDependency> dataConnectorDependencies) {
 
-        final HashMap<String, List<IdPAttributeValue<?>>> result = new HashMap<>();
+        final HashMap<String, List<IdPAttributeValue>> result = new HashMap<>();
         if (LOG.isTraceEnabled()) {
             LOG.trace("Getting all Attribute Values");
         }
@@ -193,7 +193,7 @@ public final class PluginDependencySupport {
      * @param target current set attribute values
      */
     @Nonnull private static void mergeAttributes(@Nonnull final Map<String, IdPAttribute> sources,
-            @Nullable final Map<String, List<IdPAttributeValue<?>>> target) {
+            @Nullable final Map<String, List<IdPAttributeValue>> target) {
         for (final IdPAttribute source : sources.values()) {
             if (source == null) {
                 continue;
@@ -210,11 +210,11 @@ public final class PluginDependencySupport {
      * @param target current set attribute values
      */
     @Nonnull private static void addAttribute(@Nullable final IdPAttribute source,
-            @Nullable final Map<String, List<IdPAttributeValue<?>>> target) {
+            @Nullable final Map<String, List<IdPAttributeValue>> target) {
         if (source == null) {
             return;
         }
-        List<IdPAttributeValue<?>> attributeValues = target.get(source.getId());
+        List<IdPAttributeValue> attributeValues = target.get(source.getId());
         if (attributeValues == null) {
             attributeValues = new ArrayList<>();
             target.put(source.getId(), attributeValues);
@@ -230,9 +230,9 @@ public final class PluginDependencySupport {
      * @param target current set attribute values
      */
     @Nonnull private static void mergeAttributeValues(@Nullable final IdPAttribute source,
-            @Nonnull final List<IdPAttributeValue<?>> target) {
+            @Nonnull final List<IdPAttributeValue> target) {
         if (source != null) {
             target.addAll(source.getValues());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
index e8e8ec5..d91588c 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
@@ -61,7 +61,7 @@ public class PluginDependencySupportTest {
         final AttributeResolverWorkContext workContext =
                 resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
 
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.singletonList(new ResolverAttributeDefinitionDependency(ResolverTestSupport.EPA_ATTRIB_ID)),
                         Collections.<ResolverDataConnectorDependency>emptyList(),
@@ -80,7 +80,7 @@ public class PluginDependencySupportTest {
         final AttributeResolverWorkContext workContext =
                 resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
 
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.singletonList(new ResolverAttributeDefinitionDependency(ResolverTestSupport.EPA_ATTRIB_ID)),
                         Collections.<ResolverDataConnectorDependency>emptyList(),
@@ -103,7 +103,7 @@ public class PluginDependencySupportTest {
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(Collections.singletonList(ResolverTestSupport.EPE_ATTRIB_ID));
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.<ResolverAttributeDefinitionDependency>emptyList(),
                         Collections.singletonList(depend),
@@ -127,7 +127,7 @@ public class PluginDependencySupportTest {
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(Collections.singleton(ResolverTestSupport.EPE_ATTRIB_ID));
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.<ResolverAttributeDefinitionDependency>emptyList(),
                         Collections.singletonList(depend),
@@ -152,7 +152,7 @@ public class PluginDependencySupportTest {
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(Lists.newArrayList(ResolverTestSupport.EPE_ATTRIB_ID, ResolverTestSupport.EPA_ATTRIB_ID));
 
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.<ResolverAttributeDefinitionDependency>emptyList(),
                         Collections.singletonList(depend),
@@ -178,7 +178,7 @@ public class PluginDependencySupportTest {
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAllAttributes(true);
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.<ResolverAttributeDefinitionDependency>emptyList(),
                         Collections.singletonList(depend),
@@ -211,7 +211,7 @@ public class PluginDependencySupportTest {
         final ResolverDataConnectorDependency dependConnector = new ResolverDataConnectorDependency("connector1");
         
         dependConnector.setAttributeNames(Collections.singleton(ResolverTestSupport.EPA_ATTRIB_ID));
-        final List<IdPAttributeValue<?>> result =
+        final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         Collections.singletonList(new ResolverAttributeDefinitionDependency(ResolverTestSupport.EPA_ATTRIB_ID)),
                         Collections.singletonList(dependConnector),
@@ -243,7 +243,7 @@ public class PluginDependencySupportTest {
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAllAttributes(true);
 
-        final Map<String, List<IdPAttributeValue<?>>> result =
+        final Map<String, List<IdPAttributeValue>> result =
                 PluginDependencySupport.getAllAttributeValues(workContext,
                         Collections.singletonList(new ResolverAttributeDefinitionDependency(ResolverTestSupport.EPA_ATTRIB_ID)),
                         Collections.singletonList(depend));
@@ -251,7 +251,7 @@ public class PluginDependencySupportTest {
         Assert.assertNotNull(result);
         Assert.assertEquals(result.size(), 2);
 
-        List<IdPAttributeValue<?>> values = result.get(ResolverTestSupport.EPE_ATTRIB_ID);
+        List<IdPAttributeValue> values = result.get(ResolverTestSupport.EPE_ATTRIB_ID);
         Assert.assertNotNull(values);
         Assert.assertEquals(values.size(), 2);
         Assert.assertTrue(values.contains(new StringAttributeValue(ResolverTestSupport.EPE1_VALUES[0])));
@@ -283,7 +283,7 @@ public class PluginDependencySupportTest {
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
 
         depend.setAttributeNames(Collections.singleton(ResolverTestSupport.EPA_ATTRIB_ID));
-        final Map<String, List<IdPAttributeValue<?>>> result =
+        final Map<String, List<IdPAttributeValue>> result =
                 PluginDependencySupport.getAllAttributeValues(workContext,
                         Collections.singletonList(new ResolverAttributeDefinitionDependency(ResolverTestSupport.EPA_ATTRIB_ID)),
                         Collections.singletonList(depend));
@@ -291,7 +291,7 @@ public class PluginDependencySupportTest {
         Assert.assertNotNull(result);
         Assert.assertEquals(result.size(), 1);
 
-        final List<IdPAttributeValue<?>> values = result.get(ResolverTestSupport.EPA_ATTRIB_ID);
+        final List<IdPAttributeValue> values = result.get(ResolverTestSupport.EPA_ATTRIB_ID);
         Assert.assertNotNull(values);
         Assert.assertEquals(values.size(), 4);
         Assert.assertTrue(values.contains(new StringAttributeValue(ResolverTestSupport.EPA1_VALUES[0])));
@@ -349,4 +349,4 @@ public class PluginDependencySupportTest {
         Assert.assertNotEquals(dc2.hashCode(), dc3.hashCode());
         
 }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolverTestSupport.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolverTestSupport.java
index 9d25775..a88a9a8 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolverTestSupport.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolverTestSupport.java
@@ -81,7 +81,7 @@ public class ResolverTestSupport {
     public static IdPAttribute buildAttribute(String attributeId, String... values) {
         final IdPAttribute attribute = new IdPAttribute(attributeId);
         
-        List<IdPAttributeValue<?>> valueList = new ArrayList<>();
+        List<IdPAttributeValue> valueList = new ArrayList<>();
         for (String value : values) {
             valueList.add(StringAttributeValue.valueOf(value));
         }
@@ -121,4 +121,4 @@ public class ResolverTestSupport {
             return null;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
index eda8ea1..192e765 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
@@ -55,7 +55,7 @@ public class ContextDerivedAttributeDefinition extends AbstractAttributeDefiniti
      * 
      * The function returns null or an empty list if the context isn't relevant.
      */
-    @Nonnull private Function<ProfileRequestContext,List<IdPAttributeValue<?>>> attributeValuesFunction;
+    @Nonnull private Function<ProfileRequestContext,List<IdPAttributeValue>> attributeValuesFunction;
 
     /** Constructor. */
     public ContextDerivedAttributeDefinition() {
@@ -82,7 +82,7 @@ public class ContextDerivedAttributeDefinition extends AbstractAttributeDefiniti
      * @param function what to set.
      */
     public void setAttributeValuesFunction(
-            @Nonnull final Function<ProfileRequestContext,List<IdPAttributeValue<?>>> function) {
+            @Nonnull final Function<ProfileRequestContext,List<IdPAttributeValue>> function) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         attributeValuesFunction = Constraint.isNotNull(function, "Attribute Function cannot be null");
     }
@@ -92,7 +92,7 @@ public class ContextDerivedAttributeDefinition extends AbstractAttributeDefiniti
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
 
         final ProfileRequestContext prc = prcLookupStrategy.apply(resolutionContext);
-        final List<IdPAttributeValue<?>> results = attributeValuesFunction.apply(prc);
+        final List<IdPAttributeValue> results = attributeValuesFunction.apply(prc);
 
         if (null == results) {
             log.debug("{} Generated no values.", getLogPrefix());
@@ -113,4 +113,4 @@ public class ContextDerivedAttributeDefinition extends AbstractAttributeDefiniti
         super.doInitialize();
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
index c338c0b..66182cf 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
@@ -33,7 +33,7 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /** Engine to mine values from {@link IdPAttributePrincipal}s. */
 public class IdPAttributePrincipalValuesFunction extends AbstractInitializableComponent implements
-        Function<Principal, List<IdPAttributeValue<?>>> {
+        Function<Principal, List<IdPAttributeValue>> {
 
     /** The Attribute Name to look for. */
     @Nonnull private String attributeName;
@@ -58,7 +58,7 @@ public class IdPAttributePrincipalValuesFunction extends AbstractInitializableCo
     }
 
     /** {@inheritDoc} */
-    @Nullable public List<IdPAttributeValue<?>> apply(@Nullable final Principal principal) {
+    @Nullable public List<IdPAttributeValue> apply(@Nullable final Principal principal) {
 
         if (null != principal && principal instanceof IdPAttributePrincipal) {
             final IdPAttributePrincipal attributePrincipal = (IdPAttributePrincipal) principal;
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
index fc77a96..76387ab 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
@@ -90,15 +90,15 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
 
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
 
-        final List<IdPAttributeValue<?>> dependencyValues =
+        final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext, 
                         getAttributeDependencies(), 
                         getDataConnectorDependencies(), 
                         getId());
         log.debug("{} Dependencies provided unmapped values of {}", getLogPrefix(), dependencyValues);
 
-        final List<IdPAttributeValue<?>> valueList = new ArrayList<>(dependencyValues.size());
-        for (final IdPAttributeValue<?> dependencyValue : dependencyValues) {
+        final List<IdPAttributeValue> valueList = new ArrayList<>(dependencyValues.size());
+        for (final IdPAttributeValue dependencyValue : dependencyValues) {
             if (dependencyValue instanceof EmptyAttributeValue) {
                 final EmptyAttributeValue emptyVal = (EmptyAttributeValue) dependencyValue;
                 log.debug("{} ignored empty value of type {}", getLogPrefix(), emptyVal.getDisplayValue());
@@ -127,7 +127,7 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
      * 
      * @throws ResolutionException thrown if the given attribute value does not contain a delimited value
      */
-    @Nonnull private IdPAttributeValue<?> buildScopedStringAttributeValue(
+    @Nonnull private IdPAttributeValue buildScopedStringAttributeValue(
             @Nonnull final StringAttributeValue value) throws ResolutionException {
         Constraint.isNotNull(value, getLogPrefix() + " Attribute value can not be null");
 
@@ -151,4 +151,4 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
             throw new ComponentInitializationException(getLogPrefix() + " no dependencies were configured");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
index 1c1d366..264a61a 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
@@ -88,10 +88,10 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final List<IdPAttributeValue<?>> resultantValues = new ArrayList<>();
+        final List<IdPAttributeValue> resultantValues = new ArrayList<>();
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
 
-        final List<IdPAttributeValue<?>> dependencyValues =
+        final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext, 
                         getAttributeDependencies(), 
                         getDataConnectorDependencies(), 
@@ -147,4 +147,4 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
                     + "': no dependencies were configured");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
index ba297d5..b9648b8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
@@ -88,13 +88,13 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
 
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
 
-        final List<IdPAttributeValue<?>> dependencyValues =
+        final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         getAttributeDependencies(), 
                         getDataConnectorDependencies(), 
                         getId());
 
-        final List<IdPAttributeValue<?>> valueList = new ArrayList<>(dependencyValues.size());
+        final List<IdPAttributeValue> valueList = new ArrayList<>(dependencyValues.size());
 
         for (final IdPAttributeValue dependencyValue : dependencyValues) {
             if (dependencyValue instanceof EmptyAttributeValue) {
@@ -128,4 +128,4 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
index 2ec10cc..65f580e 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
@@ -232,7 +232,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         @Override
         protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
 
-            final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes =
+            final Map<String, List<IdPAttributeValue>> dependencyAttributes =
                     PluginDependencySupport.getAllAttributeValues(
                             (AttributeResolverWorkContext) input[1], 
                             getAttributeDependencies(), 
@@ -274,7 +274,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
                     new V2SAMLProfileRequestContext((AttributeResolutionContext) input[0], getId()),
                     ScriptContext.ENGINE_SCOPE);
 
-            for (final Entry<String,List<IdPAttributeValue<?>>> dependencyAttribute : dependencyAttributes.entrySet()) {
+            for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
                 log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
                         new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
                 final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
@@ -310,4 +310,4 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
index 2ff8a57..35dfe35 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
@@ -153,7 +153,7 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
      * @param values the list to add to.
      * @param value the value to add. Known to be a {@link String} or an {@link IdPAttributeValue}
      */
-    private void addAsIdPAttributeValue(final List<IdPAttributeValue<?>> values, final Object value) {
+    private void addAsIdPAttributeValue(final List<IdPAttributeValue> values, final Object value) {
         if (null == value) {
             values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         } else if (value instanceof String) {
@@ -209,7 +209,7 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
         }
 
         // Otherwise re-marshall the {@link #attributeValues}
-        final List<IdPAttributeValue<?>> valueList = new ArrayList<>(attributeValues.size());
+        final List<IdPAttributeValue> valueList = new ArrayList<>(attributeValues.size());
 
         log.debug("{} recreating attribute contents from {}", getLogPrefix(), attributeValues);
         for (final Object object : attributeValues) {
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.java
index 22d84e0..0db9f2b 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.java
@@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory;
  * associated with the request.  The precise values are determined by an injected {@link Function}.
  */
 public class SubjectDerivedAttributeValuesFunction extends AbstractIdentifiableInitializableComponent implements
-        Function<ProfileRequestContext,List<IdPAttributeValue<?>>> {
+        Function<ProfileRequestContext,List<IdPAttributeValue>> {
 
     /** Logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(ContextDerivedAttributeDefinition.class);
@@ -56,7 +56,7 @@ public class SubjectDerivedAttributeValuesFunction extends AbstractIdentifiableI
      * 
      * The {@link Function} returns null or an empty list if the {@link Principal} isn't relevant.
      */
-    @Nonnull private Function<Principal,List<IdPAttributeValue<?>>> attributesValueFunction;
+    @Nonnull private Function<Principal,List<IdPAttributeValue>> attributesValueFunction;
 
     /** Constructor. */
     public SubjectDerivedAttributeValuesFunction() {
@@ -82,19 +82,19 @@ public class SubjectDerivedAttributeValuesFunction extends AbstractIdentifiableI
      * 
      * @param engine what to set.
      */
-    public void setAttributeValuesFunction(@Nonnull final Function<Principal,List<IdPAttributeValue<?>>> engine) {
+    public void setAttributeValuesFunction(@Nonnull final Function<Principal,List<IdPAttributeValue>> engine) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         attributesValueFunction = Constraint.isNotNull(engine, "Attribute Engine cannot be null");
     }
 
     /** {@inheritDoc} */
-    @Nullable public List<IdPAttributeValue<?>> apply(@Nullable final ProfileRequestContext prc) {
+    @Nullable public List<IdPAttributeValue> apply(@Nullable final ProfileRequestContext prc) {
         final SubjectContext cs = scLookupStrategy.apply(prc);
-        final List<IdPAttributeValue<?>> results = new ArrayList<>(1);
+        final List<IdPAttributeValue> results = new ArrayList<>(1);
 
         for (final Subject subject : cs.getSubjects()) {
             for (final Principal principal : subject.getPrincipals()) {
-                final List<IdPAttributeValue<?>> values = attributesValueFunction.apply(principal);
+                final List<IdPAttributeValue> values = attributesValueFunction.apply(principal);
                 if ((null != values) && !values.isEmpty()) {
                     results.addAll(values);
                 }
@@ -123,4 +123,4 @@ public class SubjectDerivedAttributeValuesFunction extends AbstractIdentifiableI
     private String getLogPrefix() {
         return "SubjectDerivedAttributeDefinition" + getId();
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
index dcd0a05..57c78bc 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
@@ -191,10 +191,10 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
 
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
 
-        final Map<String,Iterator<IdPAttributeValue<?>>> sourceValues = new LazyMap<>();
+        final Map<String,Iterator<IdPAttributeValue>> sourceValues = new LazyMap<>();
         final int valueCount = setupSourceValues(workContext, sourceValues);
 
-        final List<IdPAttributeValue<?>> valueList = new ArrayList<>(valueCount);
+        final List<IdPAttributeValue> valueList = new ArrayList<>(valueCount);
 
         for (int i = 0; i < valueCount; i++) {
             log.debug("{} Determining value {}", getLogPrefix(), i + 1);
@@ -202,7 +202,7 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
 
             // Build velocity context.
             for (final String attributeId : sourceValues.keySet()) {
-                final IdPAttributeValue<?> value = sourceValues.get(attributeId).next();
+                final IdPAttributeValue value = sourceValues.get(attributeId).next();
                 final String velocityValue;
                 if (value instanceof EmptyAttributeValue) {
                     switch (((EmptyAttributeValue) value).getValue()) {
@@ -256,8 +256,8 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
      * @throws ResolutionException if there is a mismatched count of attributes
      */
     private int addAttributeValues(@Nonnull final String attributeName,
-            @Nullable final List<IdPAttributeValue<?>> attributeValues,  
-            @Nonnull @NonnullElements final Map<String,Iterator<IdPAttributeValue<?>>> sourceValues,
+            @Nullable final List<IdPAttributeValue> attributeValues,  
+            @Nonnull @NonnullElements final Map<String,Iterator<IdPAttributeValue>> sourceValues,
             final int curValueCount) throws ResolutionException {
         
         int valueCount = curValueCount;
@@ -290,10 +290,10 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
      * @throws ResolutionException if there is a mismatched count of attributes
      */
     private int setupSourceValues(@Nonnull final AttributeResolverWorkContext workContext,
-            @Nonnull @NonnullElements final Map<String,Iterator<IdPAttributeValue<?>>> sourceValues)
+            @Nonnull @NonnullElements final Map<String,Iterator<IdPAttributeValue>> sourceValues)
                     throws ResolutionException {
 
-        final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes = 
+        final Map<String, List<IdPAttributeValue>> dependencyAttributes = 
                 PluginDependencySupport.getAllAttributeValues(workContext,
                                                               getAttributeDependencies(), 
                                                               getDataConnectorDependencies());
@@ -301,7 +301,7 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
         int valueCount = 0;
 
         if (getSourceAttributes().isEmpty()) {
-            for (final Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet() ) {
+            for (final Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet() ) {
                 valueCount = addAttributeValues(entry.getKey(), entry.getValue(), sourceValues, valueCount);
             }
         } else {
@@ -316,4 +316,4 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
         return valueCount;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index 3904e6c..beea056 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -197,7 +197,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         Constraint.isNotNull(resolutionContext, "Attribute resolution context can not be null");
 
-        final List<IdPAttributeValue<?>> unmappedResults =
+        final List<IdPAttributeValue> unmappedResults =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         getAttributeDependencies(),
                         getDataConnectorDependencies(),
@@ -216,8 +216,8 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
             }
         } else {
 
-            final List<IdPAttributeValue<?>> valueList = new ArrayList<>();
-            for (final IdPAttributeValue<?> unmappedValue : unmappedResults) {
+            final List<IdPAttributeValue> valueList = new ArrayList<>();
+            for (final IdPAttributeValue unmappedValue : unmappedResults) {
                 if (unmappedValue instanceof EmptyAttributeValue) {
                     valueList.addAll(mapValue(null));                    
                 } else if (unmappedValue instanceof StringAttributeValue) {
@@ -255,4 +255,4 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index c91d517..8026b72 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -138,7 +138,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
     
     /** {@inheritDoc} */
     @Override public HTTPSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         
         final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
         
@@ -190,7 +190,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      * @throws ResolutionException if an error occurs
      */
     @Nonnull @NotEmpty protected String getURL(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String,List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String,List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         throw new UnsupportedOperationException("getURL method not overridden by subclass");
     }
     
@@ -204,7 +204,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      * @throws ResolutionException if an error occurs
      */
     @Nonnull protected HttpUriRequest getHttpRequest(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String,List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String,List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         
         // Default just wraps a computed URL into a GET.
         try {
@@ -225,7 +225,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      */
     @Nullable protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
             @Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) {
         if (request instanceof HttpGet) {
             return ((HttpGet) request).getURI().toString();
         } else {
@@ -233,4 +233,4 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
index 7dae176..3ce4e97 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
@@ -266,17 +266,17 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
 
         if (null == attribute.getValues()) {
             log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
-            attribute.setValues(Collections.<IdPAttributeValue<?>> emptyList());
+            attribute.setValues(Collections.<IdPAttributeValue> emptyList());
             return;
         }
         log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
                 attribute.getValues().size());
-        final List<IdPAttributeValue<?>> inputValues = attribute.getValues();
-        final List<IdPAttributeValue<?>> outputValues = new ArrayList<>(inputValues.size());
+        final List<IdPAttributeValue> inputValues = attribute.getValues();
+        final List<IdPAttributeValue> outputValues = new ArrayList<>(inputValues.size());
 
         for (final Object o : inputValues) {
-            if (o instanceof IdPAttributeValue<?>) {
-                outputValues.add((IdPAttributeValue<?>) o);
+            if (o instanceof IdPAttributeValue) {
+                outputValues.add((IdPAttributeValue) o);
             } else {
                 log.error("{} Attribute '{} has attribute value of type {}.  This will be ignored", getLogPrefix(),
                         attribute.getId(), o.getClass().getName());
@@ -341,4 +341,4 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
         return inlineScript(DEFAULT_ENGINE, scriptSource);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
index 8a200bb..5bb9b96 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
@@ -330,7 +330,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
     /** {@inheritDoc} */
     @Override
     @Nonnull protected HttpUriRequest getHttpRequest(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
         final VelocityContext context = new VelocityContext();
         log.trace("Creating request using attribute resolution context {}", resolutionContext);
@@ -346,9 +346,9 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
 
         // inject dependencies
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 final List<Object> values = new ArrayList<>(entry.getValue().size());
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     values.add(value.getValue());
                 }
                 log.trace("Adding dependency {} to context with {} value(s)", entry.getKey(), values.size());
@@ -389,7 +389,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
     @Override
     @Nonnull @NotEmpty protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
             @Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) {
         
         if (cacheKeyTemplate == null) {
             return null;
@@ -403,9 +403,9 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
         
         // inject dependencies
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 final List<Object> values = new ArrayList<>(entry.getValue().size());
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     values.add(value.getValue());
                 }
                 log.trace("Adding dependency {} to context with {} value(s)", entry.getKey(), values.size());
@@ -416,4 +416,4 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
         return merge(cacheKeyTemplate, context);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index cc0a646..65bed22 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -177,7 +177,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
     /** {@inheritDoc} */
     @Override
     @Nonnull protected String getURL(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
         final VelocityContext context = new VelocityContext();
         log.trace("Creating request URL using attribute resolution context {}", resolutionContext);
@@ -191,9 +191,9 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
 
         // inject dependencies
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 final List<Object> values = new ArrayList<>(entry.getValue().size());
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     values.add(value.getValue());
                 }
                 log.trace("Adding dependency {} to context with {} value(s)", entry.getKey(), values.size());
@@ -209,4 +209,4 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
index 2ecc43b..8205cb3 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
@@ -173,7 +173,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
 
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes =
+        final Map<String, List<IdPAttributeValue>> dependsAttributes =
                 PluginDependencySupport.getAllAttributeValues(workContext,
                         getAttributeDependencies(),
                         getDataConnectorDependencies());
@@ -219,4 +219,4 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ExecutableSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ExecutableSearchBuilder.java
index 2d0c9cb..da1b5b4 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ExecutableSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ExecutableSearchBuilder.java
@@ -44,5 +44,5 @@ public interface ExecutableSearchBuilder<T extends ExecutableSearch> {
      * @throws ResolutionException throw if their is a problem creating the executable search
      */
     @Nonnull public T build(@Nonnull AttributeResolutionContext resolutionContext,
-            @Nonnull Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException;
-}
\ No newline at end of file
+            @Nonnull Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException;
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
index d54745c..aa1492f 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
@@ -194,7 +194,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final List<IdPAttributeValue<?>> attributeValues =
+        final List<IdPAttributeValue> attributeValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         getAttributeDependencies(),
                         getDataConnectorDependencies(),
@@ -308,4 +308,4 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
         return Collections.singletonMap(getGeneratedAttributeId(), attribute);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
index ed79843..8a0f388 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
@@ -244,13 +244,13 @@ public class ScriptedDataConnector extends AbstractDataConnector {
                 }
             }
 
-            final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes =
+            final Map<String, List<IdPAttributeValue>> dependencyAttributes =
                     PluginDependencySupport.getAllAttributeValues(
                             (AttributeResolverWorkContext) input[1],
                             getAttributeDependencies(),
                             getDataConnectorDependencies());
 
-            for (final Entry<String,List<IdPAttributeValue<?>>> dependencyAttribute : dependencyAttributes.entrySet()) {
+            for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
                 log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
                         new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
                 final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
@@ -308,17 +308,17 @@ public class ScriptedDataConnector extends AbstractDataConnector {
 
             if (null == attribute.getValues()) {
                 log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
-                attribute.setValues(Collections.<IdPAttributeValue<?>> emptyList());
+                attribute.setValues(Collections.<IdPAttributeValue> emptyList());
                 return;
             }
             log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
                     attribute.getValues().size());
-            final List<IdPAttributeValue<?>> inputValues = attribute.getValues();
-            final List<IdPAttributeValue<?>> outputValues = new ArrayList<>(inputValues.size());
+            final List<IdPAttributeValue> inputValues = attribute.getValues();
+            final List<IdPAttributeValue> outputValues = new ArrayList<>(inputValues.size());
 
             for (final Object o : inputValues) {
-                if (o instanceof IdPAttributeValue<?>) {
-                    outputValues.add((IdPAttributeValue<?>) o);
+                if (o instanceof IdPAttributeValue) {
+                    outputValues.add((IdPAttributeValue) o);
                 } else {
                     log.error("{} Attribute '{} has attribute value of type {}.  This will be ignored", getLogPrefix(),
                             attribute.getId(), o.getClass().getName());
@@ -328,4 +328,4 @@ public class ScriptedDataConnector extends AbstractDataConnector {
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ParameterizedExecutableSearchFilterBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ParameterizedExecutableSearchFilterBuilder.java
index 6b1305c..550a28a 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ParameterizedExecutableSearchFilterBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ParameterizedExecutableSearchFilterBuilder.java
@@ -67,14 +67,14 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
 
     /** {@inheritDoc} */
     @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         final SearchFilter sf = new SearchFilter(searchFilter);
         sf.setParameter("principalName", resolutionContext.getPrincipal());
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 int i = 0;
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     if (i == 0) {
                         sf.setParameter(String.format("%s", entry.getKey(), i), value.getValue());
                     }
@@ -85,4 +85,4 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
         return super.build(sf);
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/StringAttributeValueMappingStrategy.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/StringAttributeValueMappingStrategy.java
index cb65145..5eb88dc 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/StringAttributeValueMappingStrategy.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/StringAttributeValueMappingStrategy.java
@@ -87,7 +87,7 @@ public class StringAttributeValueMappingStrategy extends AbstractMappingStrategy
                     attributes.put(effectiveId, attribute);
                 }
 
-                final List<IdPAttributeValue<?>> values = new ArrayList<>(
+                final List<IdPAttributeValue> values = new ArrayList<>(
                         attr.getStringValues().size() + attribute.getValues().size());
 
                 values.addAll(attribute.getValues());
@@ -108,4 +108,4 @@ public class StringAttributeValueMappingStrategy extends AbstractMappingStrategy
     }
  // Checkstyle: CyclomaticComplexity ON
     
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/TemplatedExecutableSearchFilterBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/TemplatedExecutableSearchFilterBuilder.java
index fefeef4..d04dcec 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/TemplatedExecutableSearchFilterBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/TemplatedExecutableSearchFilterBuilder.java
@@ -160,7 +160,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
 
     /** {@inheritDoc} */
     @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
         final VelocityContext context = new VelocityContext();
         log.trace("Creating search filter using attribute resolution context {}", resolutionContext);
@@ -173,9 +173,9 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
         }
 
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 final List<Object> values = new ArrayList<>(entry.getValue().size());
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     values.add(value.getValue());
                 }
                 log.trace("Adding dependency {} to context with {} value(s)", entry.getKey(), values.size());
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java
index 579aeb8..90394ac 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java
@@ -82,11 +82,11 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
      * @return the SQL string
      */
     protected abstract String getSQLQuery(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException;
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException;
 
     /** {@inheritDoc} */
     @Override public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         final String query = getSQLQuery(resolutionContext, dependencyAttributes);
 
         return new ExecutableStatement() {
@@ -110,4 +110,4 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java
index 1a38581..1482dd7 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java
@@ -59,11 +59,11 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
 
     /** {@inheritDoc} */
     @Override protected String getSQLQuery(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) {
         final List<Object> args = new ArrayList<>();
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     if (value.getValue() instanceof String){ 
                         args.add(((String) value.getValue()).replace("'", "''"));
                     } else {
@@ -81,4 +81,4 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
         return String.format(sqlQuery, args.toArray());
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/StringResultMappingStrategy.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/StringResultMappingStrategy.java
index 1c918aa..71e3d0f 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/StringResultMappingStrategy.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/StringResultMappingStrategy.java
@@ -97,7 +97,7 @@ public class StringResultMappingStrategy extends AbstractMappingStrategy<ResultS
                         attribute.setValues(
                             Collections.singletonList(StringAttributeValue.valueOf(results.getString(i))));
                     } else {
-                        final List<IdPAttributeValue<?>> values = new ArrayList<>(attribute.getValues());
+                        final List<IdPAttributeValue> values = new ArrayList<>(attribute.getValues());
                         values.add(StringAttributeValue.valueOf(results.getString(i)));
                         attribute.setValues(values);
                     }
@@ -115,4 +115,4 @@ public class StringResultMappingStrategy extends AbstractMappingStrategy<ResultS
     }
 // Checkstyle: CyclomaticComplexity ON
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java
index 8d56377..76cff38 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java
@@ -174,7 +174,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
      * Apply the context to the template. {@inheritDoc}
      */
     @Override protected String getSQLQuery(@Nonnull final AttributeResolutionContext resolutionContext,
-            @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+            @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         final VelocityContext context = new VelocityContext();
         log.trace("Creating search filter using attribute resolution context {}", resolutionContext);
         context.put("resolutionContext", resolutionContext);
@@ -187,9 +187,9 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
 
         // inject dependencies
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
-            for (final Map.Entry<String, List<IdPAttributeValue<?>>> entry : dependencyAttributes.entrySet()) {
+            for (final Map.Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet()) {
                 final List<Object> values = new ArrayList<>(entry.getValue().size());
-                for (final IdPAttributeValue<?> value : entry.getValue()) {
+                for (final IdPAttributeValue value : entry.getValue()) {
                     values.add(value.getValue());
                 }
                 log.trace("Adding dependency {} to context with {} value(s)", entry.getKey(), values.size());
@@ -266,4 +266,4 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
             return value;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index fd41cd1..6fdb2a8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -462,10 +462,10 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
             // Remove duplicate attribute values.
             log.debug("{} De-duping (and null filtering) attribute definition {} result",
                     logPrefix, definition.getId());
-            final Iterator<IdPAttributeValue<?>> valueIter = resolvedAttribute.getValues().iterator();
-            final Set<IdPAttributeValue<?>> monitor = new HashSet<>(resolvedAttribute.getValues().size());
+            final Iterator<IdPAttributeValue> valueIter = resolvedAttribute.getValues().iterator();
+            final Set<IdPAttributeValue> monitor = new HashSet<>(resolvedAttribute.getValues().size());
             while (valueIter.hasNext()) {
-                 final IdPAttributeValue<?> value = valueIter.next();
+                 final IdPAttributeValue value = valueIter.next();
                 
                 if (isStripNulls()) {
                     if (null == value) {
@@ -630,4 +630,4 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinitionTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinitionTest.java
index f605e76..d41af84 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinitionTest.java
@@ -50,7 +50,7 @@ public class ContextDerivedAttributeDefinitionTest {
     
 
     @Test public void simpleValue() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> list = new ArrayList<>(2);
+        final List<IdPAttributeValue> list = new ArrayList<>(2);
         list.add(new StringAttributeValue(SIMPLE_VALUE));
         list.add(new StringAttributeValue(SIMPLE_VALUE + "2"));
         
@@ -80,7 +80,7 @@ public class ContextDerivedAttributeDefinitionTest {
         authnResults.put("one", new AuthenticationResult("1", subject));
         
         
-      final List<IdPAttributeValue<?>> foo = defn.resolve(ctx).getValues();
+      final List<IdPAttributeValue> foo = defn.resolve(ctx).getValues();
         
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -88,7 +88,7 @@ public class ContextDerivedAttributeDefinitionTest {
     }
     
     @Test public void empty() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> list = Collections.EMPTY_LIST;
+        final List<IdPAttributeValue> list = Collections.EMPTY_LIST;
         
         final IdPAttribute attr = new IdPAttribute("wibble");
         attr.setValues(list);
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
index abe5bbe..b285ad5 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
@@ -160,7 +160,7 @@ public class PrescopedAtributeTest {
     }
     
     @Test public void nullValueType() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(4);
+        final List<IdPAttributeValue> values = new ArrayList<>(4);
         values.add(new StringAttributeValue("one at two"));
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue("three at four"));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
index e659da9..8ad134b 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
@@ -99,7 +99,7 @@ public class RegexAtributeTest {
     }
     
     @Test public void nullValueType() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(4);
+        final List<IdPAttributeValue> values = new ArrayList<>(4);
         values.add(new StringAttributeValue(TestSources.CONNECTOR_ATTRIBUTE_VALUE_STRING));
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue("three"));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML1NameIdentifierAttributeDefinitionTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML1NameIdentifierAttributeDefinitionTest.java
index 7092edc..d86c107 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML1NameIdentifierAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML1NameIdentifierAttributeDefinitionTest.java
@@ -103,7 +103,7 @@ public class SAML1NameIdentifierAttributeDefinitionTest extends OpenSAMLInitBase
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(values.size(), 2);
         final Collection<String> nameValues = new HashSet<>(2);
@@ -118,7 +118,7 @@ public class SAML1NameIdentifierAttributeDefinitionTest extends OpenSAMLInitBase
     }
     
     @Test public void nullValueType() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(3);
+        final List<IdPAttributeValue> values = new ArrayList<>(3);
         values.add(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING));
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue(TestSources.ATTRIBUTE_ATTRIBUTE_VALUE_STRING));
@@ -147,7 +147,7 @@ public class SAML1NameIdentifierAttributeDefinitionTest extends OpenSAMLInitBase
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> outValues = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> outValues = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(outValues.size(), 2);
         final Collection<String> nameValues = new HashSet<>(2);
@@ -244,7 +244,7 @@ public class SAML1NameIdentifierAttributeDefinitionTest extends OpenSAMLInitBase
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(values.size(), 1);
         final NameIdentifier id = (NameIdentifier) values.iterator().next().getValue();
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML2NameIDAttributeDefinitionTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML2NameIDAttributeDefinitionTest.java
index a14df66..de2145c 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML2NameIDAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SAML2NameIDAttributeDefinitionTest.java
@@ -77,7 +77,7 @@ public class SAML2NameIDAttributeDefinitionTest extends OpenSAMLInitBaseTestCase
         defn.initialize();
 
         final IdPAttribute attr = new IdPAttribute("bar");
-        final List<IdPAttributeValue<?>> values = Collections.emptyList();
+        final List<IdPAttributeValue> values = Collections.emptyList();
         attr.setValues(values);
 
         final StaticAttributeDefinition sa = new StaticAttributeDefinition();
@@ -120,7 +120,7 @@ public class SAML2NameIDAttributeDefinitionTest extends OpenSAMLInitBaseTestCase
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(null, TestSources.IDP_ENTITY_ID, TestSources.SP_ENTITY_ID);
         resolver.resolveAttributes(context);
-        final Collection<IdPAttributeValue<?>> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(values.size(), 2);
         final Collection<String> nameValues = new HashSet<>(2);
@@ -137,7 +137,7 @@ public class SAML2NameIDAttributeDefinitionTest extends OpenSAMLInitBaseTestCase
     }
     
     @Test public void nullValueType() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(3);
+        final List<IdPAttributeValue> values = new ArrayList<>(3);
         values.add(new StringAttributeValue(TestSources.COMMON_ATTRIBUTE_VALUE_STRING));
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue(TestSources.ATTRIBUTE_ATTRIBUTE_VALUE_STRING));
@@ -167,7 +167,7 @@ public class SAML2NameIDAttributeDefinitionTest extends OpenSAMLInitBaseTestCase
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> outValues = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> outValues = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(outValues.size(), 2);
         final Collection<String> nameValues = new HashSet<>(2);
@@ -266,7 +266,7 @@ public class SAML2NameIDAttributeDefinitionTest extends OpenSAMLInitBaseTestCase
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(values.size(), 1);
         final NameID id = (NameID) values.iterator().next().getValue();
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
index b790ead..517714f 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
@@ -133,7 +133,7 @@ public class ScopedAttributeTest {
     }
     
     @Test public void nullValueType() throws ComponentInitializationException, ResolutionException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(4);
+        final List<IdPAttributeValue> values = new ArrayList<>(4);
         values.add(new StringAttributeValue("one"));
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue("three"));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
index 040ee1c..84f682c 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
@@ -124,7 +124,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
         assertEquals(results.size(), 1, "Scripted result value count");
@@ -153,7 +153,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
         assertEquals(results.size(), 4, "Scripted result value count");
@@ -184,7 +184,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
         assertEquals(results.size(), 1, "Scripted result value count");
@@ -214,7 +214,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
         assertEquals(results.size(), 1, "Scripted result value count");
@@ -236,7 +236,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertEquals(results.size(), 1, "Scripted result value count");
         assertEquals(results.iterator().next(), new EmptyAttributeValue(EmptyType.NULL_VALUE),
@@ -256,7 +256,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         attr.initialize();
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertEquals(results.size(), 2, "Scripted result value count");
     }
@@ -265,7 +265,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
             IOException {
 
         final IdPAttribute test = new IdPAttribute(TEST_ATTRIBUTE_NAME);
-        final IdPAttributeValue<?> attributeValue = new StringAttributeValue(SIMPLE_VALUE);
+        final IdPAttributeValue attributeValue = new StringAttributeValue(SIMPLE_VALUE);
 
         test.setValues(Collections.singletonList(attributeValue));
 
@@ -277,7 +277,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
-        final List<IdPAttributeValue<?>> results = val.getValues();
+        final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
         assertEquals(results.size(), 1, "Scripted result value count");
@@ -339,7 +339,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
             ComponentInitializationException {
 
         final IdPAttribute result = buildTest("addAfterGetValues.script", true).resolve(generateContext());
-        final List<IdPAttributeValue<?>> values = result.getValues();
+        final List<IdPAttributeValue> values = result.getValues();
         assertEquals(values.size(), 1);
         assertTrue(values.contains(new StringAttributeValue("newValue")));
     }
@@ -378,7 +378,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         final AttributeResolutionContext context = generateContext();
         resolver.resolveAttributes(context);
         final IdPAttribute attribute = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME);
-        final List<IdPAttributeValue<?>> values = attribute.getValues();
+        final List<IdPAttributeValue> values = attribute.getValues();
 
         assertEquals(values.size(), 2);
         assertTrue(values.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
@@ -396,7 +396,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
     @Test public void attributesWithNull() throws ResolutionException, ComponentInitializationException,
             ScriptException, IOException {
 
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(3);
+        final List<IdPAttributeValue> values = new ArrayList<>(3);
         values.add(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT);
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         final IdPAttribute attr = new IdPAttribute(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR);
@@ -415,7 +415,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
 
         final IdPAttribute result = scripted.resolve(resolutionContext);
 
-        final List<IdPAttributeValue<?>> outValues = result.getValues();
+        final List<IdPAttributeValue> outValues = result.getValues();
 
         assertEquals(outValues.size(), 2);
         assertTrue(values.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
@@ -449,7 +449,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         final AttributeResolutionContext context = generateContext();
         resolver.resolveAttributes(context);
         final IdPAttribute attribute = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME);
-        final List<IdPAttributeValue<?>> values = attribute.getValues();
+        final List<IdPAttributeValue> values = attribute.getValues();
 
         assertEquals(values.size(), 2);
         for (final IdPAttributeValue value : values) {
@@ -501,7 +501,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         }
 
         final IdPAttribute attribute = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME);
-        final Collection<IdPAttributeValue<?>> values = attribute.getValues();
+        final Collection<IdPAttributeValue> values = attribute.getValues();
 
         assertEquals(values.size(), 5, "looking for context");
         assertTrue(values.contains(new StringAttributeValue("AttributeResolutionContext")));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
index 4cbe382..9fcdb55 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
@@ -149,7 +149,7 @@ public class SimpleAttributeTest {
         } catch (final ResolutionException e) {
             fail("resolution failed", e);
         }
-        final Collection<IdPAttributeValue<?>> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
+        final Collection<IdPAttributeValue> values = context.getResolvedIdPAttributes().get(TEST_ATTRIBUTE_NAME).getValues();
 
         assertEquals(values.size(), 2);
         assertTrue(values.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT),
@@ -165,7 +165,7 @@ public class SimpleAttributeTest {
      * @throws ComponentInitializationException if initialization fails (which it shouldn't).
      */
     @Test public void nullValue() throws ResolutionException, ComponentInitializationException {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(3);
+        final List<IdPAttributeValue> values = new ArrayList<>(3);
         values.add(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT);
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         final IdPAttribute attr = new IdPAttribute(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR);
@@ -183,7 +183,7 @@ public class SimpleAttributeTest {
 
         final IdPAttribute result = simple.resolve(resolutionContext);
 
-       final List<IdPAttributeValue<?>> outValues = result.getValues();
+       final List<IdPAttributeValue> outValues = result.getValues();
         assertEquals(outValues.size(), 2);
         assertTrue(outValues.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
         assertTrue(outValues.contains(new EmptyAttributeValue(EmptyType.NULL_VALUE)));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
index 0b94479..2616fae 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
@@ -321,7 +321,7 @@ public class TemplateAttributeTest {
         templateDef.setAttributeDependencies(ds);
         templateDef.initialize();
 
-        final List<IdPAttributeValue<?>> values = new ArrayList<>();
+        final List<IdPAttributeValue> values = new ArrayList<>();
         values.add(EmptyAttributeValue.ZERO_LENGTH);
         values.add(EmptyAttributeValue.NULL);
         final IdPAttribute attr = new IdPAttribute(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR);
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
index 636d067..fae8c26 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
@@ -120,7 +120,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver.resolveAttributes(context);
 
         // Now test that we got exactly what we expected - two scoped attributes
-        final List<IdPAttributeValue<?>> resultValues =
+        final List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
         assertEquals(((StringAttributeValue) resultValues.iterator().next()).getValue(), RESULT);
@@ -224,7 +224,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver.resolveAttributes(context);
 
         // Now test that we got exactly what we expected
-        List<IdPAttributeValue<?>> resultValues =
+        List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
         assertEquals(((StringAttributeValue) resultValues.iterator().next()).getValue(), RESULT);
@@ -332,7 +332,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
                         TestSources.SP_ENTITY_ID);
         resolver.resolveAttributes(context);
 
-        final List<IdPAttributeValue<?>> resultValues =
+        final List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
 
@@ -340,7 +340,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
 
     @Test public void nullValue() throws ComponentInitializationException, ResolutionException {
         
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(2);
+        final List<IdPAttributeValue> values = new ArrayList<>(2);
         values.add(new EmptyAttributeValue(EmptyType.NULL_VALUE));
         values.add(new StringAttributeValue("calue"));
         final IdPAttribute attr = new IdPAttribute(ResolverTestSupport.EPA_ATTRIB_ID);
@@ -373,7 +373,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
 
     @Test public void emptyValue() throws ComponentInitializationException, ResolutionException {
         
-        final List<IdPAttributeValue<?>> values = new ArrayList<>(1);
+        final List<IdPAttributeValue> values = new ArrayList<>(1);
         values.add(new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE));
         final IdPAttribute attr = new IdPAttribute(ResolverTestSupport.EPA_ATTRIB_ID);
 
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnector.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnector.java
index fe9b7ef..5413d3e 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnector.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnector.java
@@ -132,8 +132,8 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
      * @param attributeValues the input values
      * @return a list of values, Possibly empty.
      */
-    @Nullable protected @Nonnull List<IdPAttributeValue<?>> encodeValues(final List<XMLObject> attributeValues) {
-        final ArrayList<IdPAttributeValue<?>> result = new ArrayList<>(attributeValues.size());
+    @Nullable protected @Nonnull List<IdPAttributeValue> encodeValues(final List<XMLObject> attributeValues) {
+        final ArrayList<IdPAttributeValue> result = new ArrayList<>(attributeValues.size());
 
         for (XMLObject object : attributeValues) {
             IdPAttributeValue val = encodeValue(object);
@@ -161,7 +161,7 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
             final String attributeName = samlAttribute.getName();
             log.debug("Connector '{}': found attribute named '{}'", getId(), attributeName);
 
-            final List<IdPAttributeValue<?>> values = encodeValues(samlAttribute.getAttributeValues());
+            final List<IdPAttributeValue> values = encodeValues(samlAttribute.getAttributeValues());
             log.debug("Connector '{}': attribute '{}', values '{}'", new Object[] {getId(), attributeName, values,});
 
             final IdPAttribute IdPAttribute = new IdPAttribute(attributeName);
@@ -172,4 +172,4 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
         return retVal;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
index bdaeead..d1ae41c 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
@@ -61,7 +61,7 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
         final Map<String, IdPAttribute> attributes = connector.resolve(context);
         assertEquals(attributes.size(), 2);
         
-        List<IdPAttributeValue<?>> attributeValues = attributes.get("SamlName").getValues();
+        List<IdPAttributeValue> attributeValues = attributes.get("SamlName").getValues();
         assertEquals(attributeValues.size(), 1);
         assertTrue(attributeValues.iterator().next() instanceof XMLObjectAttributeValue);
         
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
index 74015a1..6d15ca3 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
@@ -104,7 +104,7 @@ public class ScriptedDataConnectorTest {
 
         assertEquals(result.size(), 4);
         
-        List<IdPAttributeValue<?>> values = result.get("ScriptedOne").getValues();
+        List<IdPAttributeValue> values = result.get("ScriptedOne").getValues();
         assertEquals(values.size(), 2);
         assertTrue(values.contains(new StringAttributeValue("Value 1")));
         assertTrue(values.contains(new StringAttributeValue("Value 2")));
@@ -133,7 +133,7 @@ public class ScriptedDataConnectorTest {
         connector.setId("Scripted");
         
         final IdPAttribute attribute = new IdPAttribute("attr");
-        attribute.setValues(Collections.singletonList((IdPAttributeValue<?>)new StringAttributeValue("bar")));
+        attribute.setValues(Collections.singletonList((IdPAttributeValue)new StringAttributeValue("bar")));
         connector.setCustomObject(attribute);
         
         final EvaluableScript definitionScript = new EvaluableScript("javascript", getScript("custom.js"));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
index 5d911fe..ee2ff13 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
@@ -101,7 +101,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver.resolveAttributes(context);
 
         // Now test that we got exactly what we expected
-        final List<IdPAttributeValue<?>> resultValues =
+        final List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(ComputedIDDataConnectorTest.OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
         assertEquals(((StringAttributeValue) resultValues.iterator().next()).getValue(),
@@ -129,7 +129,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver.resolveAttributes(context);
 
         // Now test that we got exactly what we expected
-        final List<IdPAttributeValue<?>> resultValues =
+        final List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(ComputedIDDataConnectorTest.OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
         assertIsUUID(((StringAttributeValue) resultValues.iterator().next()).getValue());
@@ -172,7 +172,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver.resolveAttributes(context);
 
         // Now test that we got exactly what we expected
-        List<IdPAttributeValue<?>> resultValues =
+        List<IdPAttributeValue> resultValues =
                 context.getResolvedIdPAttributes().get(ComputedIDDataConnectorTest.OUTPUT_ATTRIBUTE_NAME).getValues();
         assertEquals(resultValues.size(), 1);
         assertEquals(((StringAttributeValue) resultValues.iterator().next()).getValue(),
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
index 0fb126f..bd5e677 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
@@ -232,8 +232,8 @@ public class LDAPDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("student"));
         dependsAttributes.put("affiliation", attributeValues);
         final ExecutableSearchFilter filter = builder.build(context, dependsAttributes);
@@ -249,8 +249,8 @@ public class LDAPDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("entitlement1"));
         attributeValues.add(new StringAttributeValue("entitlement*"));
         dependsAttributes.put("entitlement", attributeValues);
@@ -305,8 +305,8 @@ public class LDAPDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("student"));
         dependsAttributes.put("affiliation", attributeValues);
         final ExecutableSearchFilter filter = builder.build(context, dependsAttributes);
@@ -323,8 +323,8 @@ public class LDAPDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("entitlement1"));
         attributeValues.add(new StringAttributeValue("entitlement*"));
         dependsAttributes.put("entitlement", attributeValues);
@@ -425,7 +425,7 @@ public class LDAPDataConnectorTest {
 
             @Override
             @Nonnull public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
-                    @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+                    @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
                 return null;
             }
         }, null);
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
index 9bc3224..3669b3d 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
@@ -126,7 +126,7 @@ public class Regressions {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
-        final List<IdPAttributeValue<?>> values = attrs.get("mail").getValues();
+        final List<IdPAttributeValue> values = attrs.get("mail").getValues();
         assertEquals(values.size(), 4);
         assertTrue(values.contains(new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE)));
     }
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
index afba0f6..ab5c9ba 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
@@ -201,8 +201,8 @@ public class RDBMSDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("student"));
         dependsAttributes.put("affiliation", attributeValues);
         final String query = builder.getSQLQuery(context, dependsAttributes);
@@ -217,8 +217,8 @@ public class RDBMSDataConnectorTest {
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final Map<String, List<IdPAttributeValue<?>>> dependsAttributes = new HashMap<>();
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final Map<String, List<IdPAttributeValue>> dependsAttributes = new HashMap<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         attributeValues.add(new StringAttributeValue("entitlement1"));
         attributeValues.add(new StringAttributeValue("entitlement2"));
         dependsAttributes.put("entitlement", attributeValues);
@@ -273,7 +273,7 @@ public class RDBMSDataConnectorTest {
 
             @Override
             @Nonnull public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
-                    @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
+                    @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
                 return null;
             }
         }, null);
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
index aed89af..095df0b 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
@@ -339,7 +339,7 @@ public class AttributeResolverImplTest {
         ad.initialize();
         
         final IdPAttribute i2Val = new IdPAttribute("Atr");
-        final List<IdPAttributeValue<?>>vals = new ArrayList<>();
+        final List<IdPAttributeValue>vals = new ArrayList<>();
         vals.add(new StringAttributeValue("value1"));
         vals.add(new StringAttributeValue("value2"));
         i2Val.setValues(vals);
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
index 62aebb4..19c8e25 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
@@ -205,7 +205,7 @@ public class AttributeResolverTest extends OpenSAMLInitBaseTestCase {
         // Static
         IdPAttribute attribute = resolvedAttributes.get("eduPersonAffiliation");
         assertNotNull(attribute);
-        List<IdPAttributeValue<?>> values = attribute.getValues();
+        List<IdPAttributeValue> values = attribute.getValues();
         
         assertEquals(values.size(), expectedEPAValues);
         assertTrue(values.contains(new StringAttributeValue("member")));
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ContextDerivedAttributeDefinitionsParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ContextDerivedAttributeDefinitionsParserTest.java
index 55ae69b..d581c1a 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ContextDerivedAttributeDefinitionsParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ContextDerivedAttributeDefinitionsParserTest.java
@@ -53,7 +53,7 @@ public class ContextDerivedAttributeDefinitionsParserTest extends BaseAttributeD
     private static final String SIMPLE_VALUE = "simple";
 
     private AttributeResolutionContext getCtx(final String attributeName) {
-        final List<IdPAttributeValue<?>> list = new ArrayList<>(2);
+        final List<IdPAttributeValue> list = new ArrayList<>(2);
         list.add(new StringAttributeValue(SIMPLE_VALUE));
         list.add(new StringAttributeValue(SIMPLE_VALUE + "2"));
 
@@ -76,7 +76,7 @@ public class ContextDerivedAttributeDefinitionsParserTest extends BaseAttributeD
         final AttributeDefinition attrDef =
                 getAttributeDefn("resolver/subjectDerived.xml", ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue<?>> foo = attrDef.resolve(getCtx("Whatever")).getValues();
+        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("Whatever")).getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -88,7 +88,7 @@ public class ContextDerivedAttributeDefinitionsParserTest extends BaseAttributeD
         final AttributeDefinition attrDef = getAttributeDefn("resolver/subjectDerivedComplex.xml", "contextDerivedBeans.xml",
                 ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue<?>> foo = attrDef.resolve(getCtx("BeanWhatever")).getValues();
+        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("BeanWhatever")).getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -99,7 +99,7 @@ public class ContextDerivedAttributeDefinitionsParserTest extends BaseAttributeD
         final AttributeDefinition attrDef = getAttributeDefn("resolver/contextDerived.xml", "contextDerivedBeans.xml",
                 ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue<?>> foo = attrDef.resolve(getCtx("BeanWhatever")).getValues();
+        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("BeanWhatever")).getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -109,7 +109,7 @@ public class ContextDerivedAttributeDefinitionsParserTest extends BaseAttributeD
     @Test public void warn() throws ResolutionException {
         final AttributeDefinition attrDef =
                 getAttributeDefn("resolver/subjectDerivedWarn.xml", ContextDerivedAttributeDefinition.class);
-        final List<IdPAttributeValue<?>> foo = attrDef.resolve(getCtx("Whatever")).getValues();
+        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("Whatever")).getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java
index fee5f37..e0e92cf 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java
@@ -69,7 +69,7 @@ public class ScriptDataConnectorParserTest extends BaseAttributeDefinitionParser
         
         assertEquals(result.size(), 2);
         
-        List<IdPAttributeValue<?>> values = result.get("ScriptedOne").getValues();
+        List<IdPAttributeValue> values = result.get("ScriptedOne").getValues();
         assertEquals(values.size(), 2);
         assertTrue(values.contains(new StringAttributeValue("Value 1")));
         assertTrue(values.contains(new StringAttributeValue("Value 2")));
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java
index e0ccb3f..fec1ba7 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java
@@ -41,7 +41,7 @@ public class StaticDataConnectorParserTest extends BaseAttributeDefinitionParser
         
         assertEquals(connector.getAttributes().keySet().size(), 2);
         final IdPAttribute epe = connector.getAttributes().get("eduPersonEntitlement");
-        List<IdPAttributeValue<?>> values = epe.getValues();
+        List<IdPAttributeValue> values = epe.getValues();
         assertEquals(values.size(), 2);
         assertTrue(values.contains(new StringAttributeValue("urn:example.org:entitlement:entitlement1")));
         assertTrue(values.contains(new StringAttributeValue("urn:mace:dir:entitlement:common-lib-terms")));
@@ -56,7 +56,7 @@ public class StaticDataConnectorParserTest extends BaseAttributeDefinitionParser
         
         assertEquals(connector.getAttributes().keySet().size(), 2);
         final IdPAttribute epe = connector.getAttributes().get("eduPersonEntitlement");
-        List<IdPAttributeValue<?>> values = epe.getValues();
+        List<IdPAttributeValue> values = epe.getValues();
         assertEquals(values.size(), 2);
         assertTrue(values.contains(new StringAttributeValue("urn:example.org:entitlement:entitlement1")));
         assertTrue(values.contains(new StringAttributeValue("urn:mace:dir:entitlement:common-lib-terms")));
@@ -72,7 +72,7 @@ public class StaticDataConnectorParserTest extends BaseAttributeDefinitionParser
         
         assertEquals(connector.getAttributes().keySet().size(), 2);
         final IdPAttribute epe = connector.getAttributes().get("eduPersonEntitlement");
-        List<IdPAttributeValue<?>> values = epe.getValues();
+        List<IdPAttributeValue> values = epe.getValues();
         assertEquals(values.size(), 2);
         assertTrue(values.contains(new StringAttributeValue("urn:example.org:entitlement:entitlement1")));
         assertTrue(values.contains(new StringAttributeValue("urn:mace:dir:entitlement:common-lib-terms")));
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/IdPAttributePrincipalSerializer.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/IdPAttributePrincipalSerializer.java
index 06515de..20426d9 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/IdPAttributePrincipalSerializer.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/principal/impl/IdPAttributePrincipalSerializer.java
@@ -107,7 +107,7 @@ public class IdPAttributePrincipalSerializer extends AbstractPrincipalSerializer
         
         final IdPAttribute attribute = ((IdPAttributePrincipal) principal).getAttribute();
         final JsonArrayBuilder arrayBuilder = getJsonArrayBuilder();
-        for (final IdPAttributeValue<?> value : attribute.getValues()) {
+        for (final IdPAttributeValue value : attribute.getValues()) {
             final JsonObject obj = serializeValue(value);
             if (obj != null) {
                 arrayBuilder.add(obj);
@@ -145,11 +145,11 @@ public class IdPAttributePrincipalSerializer extends AbstractPrincipalSerializer
         final JsonArray vals = obj.getJsonArray(PRINCIPAL_ENTRY_FIELD);
         if (str != null && !Strings.isNullOrEmpty(str.getString()) && vals != null) {
             final IdPAttribute attribute = new IdPAttribute(str.getString());
-            final List<IdPAttributeValue<?>> values = new ArrayList<>();
+            final List<IdPAttributeValue> values = new ArrayList<>();
             
             for (final JsonValue entry : vals) {
                 if (entry instanceof JsonObject) {
-                    final IdPAttributeValue<?> attrValue = deserializeValue((JsonObject) entry);
+                    final IdPAttributeValue attrValue = deserializeValue((JsonObject) entry);
                     if (attrValue != null) {
                         values.add(attrValue);
                     } else {
@@ -178,7 +178,7 @@ public class IdPAttributePrincipalSerializer extends AbstractPrincipalSerializer
      * 
      * @return the object
      */
-    @Nonnull protected JsonObject serializeValue(@Nonnull final IdPAttributeValue<?> value) {
+    @Nonnull protected JsonObject serializeValue(@Nonnull final IdPAttributeValue value) {
         final JsonObjectBuilder builder = getJsonObjectBuilder();
         
         if (value instanceof EmptyAttributeValue) {
@@ -213,7 +213,7 @@ public class IdPAttributePrincipalSerializer extends AbstractPrincipalSerializer
      * 
      * @return the attribute value, or null
      */
-    @Nullable protected IdPAttributeValue<?> deserializeValue(@Nonnull final JsonObject object) {
+    @Nullable protected IdPAttributeValue deserializeValue(@Nonnull final JsonObject object) {
         
         if (object.containsKey(EMPTY_VALUE_FIELD)) {
             final JsonValue value = object.get(EMPTY_VALUE_FIELD);
@@ -258,4 +258,4 @@ public class IdPAttributePrincipalSerializer extends AbstractPrincipalSerializer
         return objectBuilderFactory.createArrayBuilder();
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-cas-api/src/main/java/net/shibboleth/idp/cas/attribute/AbstractCASAttributeTranscoder.java b/idp-cas-api/src/main/java/net/shibboleth/idp/cas/attribute/AbstractCASAttributeTranscoder.java
index fa2dc67..3a70871 100644
--- a/idp-cas-api/src/main/java/net/shibboleth/idp/cas/attribute/AbstractCASAttributeTranscoder.java
+++ b/idp-cas-api/src/main/java/net/shibboleth/idp/cas/attribute/AbstractCASAttributeTranscoder.java
@@ -121,7 +121,7 @@ public abstract class AbstractCASAttributeTranscoder<EncodedType extends IdPAttr
         
         log.debug("Beginning to decode attribute {}", attributeName);
 
-        final List<IdPAttributeValue<?>> idpAttributeValues = new ArrayList<>();
+        final List<IdPAttributeValue> idpAttributeValues = new ArrayList<>();
 
         for (final String o : input.getValues()) {
             if (o == null) {
@@ -130,7 +130,7 @@ public abstract class AbstractCASAttributeTranscoder<EncodedType extends IdPAttr
                 continue;
             }
 
-            final IdPAttributeValue<?> idpAttributeValue = decodeValue(profileRequestContext, input, rule, o);
+            final IdPAttributeValue idpAttributeValue = decodeValue(profileRequestContext, input, rule, o);
             if (idpAttributeValue == null) {
                 log.debug("Unable to decode value of attribute {}", attributeName);
             } else {
@@ -188,7 +188,7 @@ public abstract class AbstractCASAttributeTranscoder<EncodedType extends IdPAttr
     @Nonnull protected IdPAttribute buildIdPAttribute(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule,
-            @Nonnull @NonnullElements final List<IdPAttributeValue<?>> attributeValues)
+            @Nonnull @NonnullElements final List<IdPAttributeValue> attributeValues)
                     throws AttributeDecodingException {
         
         final String id = rule.get(AttributeTranscoderRegistry.PROP_ID, String.class);
@@ -215,7 +215,7 @@ public abstract class AbstractCASAttributeTranscoder<EncodedType extends IdPAttr
      * 
      * @return the returned final {@link IdPAttributeValue} or null if decoding failed
      */
-    @Nullable protected abstract IdPAttributeValue<?> decodeValue(
+    @Nullable protected abstract IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final String value);
 
@@ -234,4 +234,4 @@ public abstract class AbstractCASAttributeTranscoder<EncodedType extends IdPAttr
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoder.java b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoder.java
index 8886d48..5eac1b6 100644
--- a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoder.java
+++ b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoder.java
@@ -61,7 +61,7 @@ public class CASScopedStringAttributeTranscoder extends AbstractCASAttributeTran
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final String value) {
         
@@ -80,4 +80,4 @@ public class CASScopedStringAttributeTranscoder extends AbstractCASAttributeTran
                 value.substring(offset + scopeDelimiter.length()));
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoder.java b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoder.java
index fbab63f..da190b5 100644
--- a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoder.java
+++ b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoder.java
@@ -62,11 +62,11 @@ public class CASStringAttributeTranscoder extends AbstractCASAttributeTranscoder
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final String value) {
         
         return value != null ? StringAttributeValue.valueOf(value) : null;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoderTest.java b/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoderTest.java
index 4986af5..88eb406 100644
--- a/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoderTest.java
+++ b/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASScopedStringAttributeTranscoderTest.java
@@ -115,7 +115,7 @@ public class CASScopedStringAttributeTranscoderTest {
 
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -138,7 +138,7 @@ public class CASScopedStringAttributeTranscoderTest {
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new StringAttributeValue(STRING_1),
@@ -187,7 +187,7 @@ public class CASScopedStringAttributeTranscoderTest {
     }
         
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new ScopedStringAttributeValue(STRING_2, SCOPE_2));
@@ -245,4 +245,4 @@ public class CASScopedStringAttributeTranscoderTest {
         Assert.assertTrue(SCOPE_2.equals(value1.getScope()) || SCOPE_2.equals(value2.getScope()));
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoderTest.java b/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoderTest.java
index aadebaf..ecf9631 100644
--- a/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoderTest.java
+++ b/idp-cas-impl/src/test/java/net/shibboleth/idp/cas/attribute/transcoding/impl/CASStringAttributeTranscoderTest.java
@@ -110,7 +110,7 @@ public class CASStringAttributeTranscoderTest {
 
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -133,7 +133,7 @@ public class CASStringAttributeTranscoderTest {
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new StringAttributeValue(STRING_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_ID);
@@ -176,7 +176,7 @@ public class CASStringAttributeTranscoderTest {
     }
         
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new StringAttributeValue(STRING_1),
                         new StringAttributeValue(STRING_2),
@@ -222,4 +222,4 @@ public class CASStringAttributeTranscoderTest {
         Assert.assertEquals(attr.getValues().get(1).getValue().toString(), STRING_2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML1C14N.java b/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML1C14N.java
index 5b5cba4..8ce44d1 100644
--- a/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML1C14N.java
+++ b/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML1C14N.java
@@ -60,7 +60,7 @@ public class SetupForSAML1C14N extends AbstractProfileAction {
     }
     
     private NameIdentifier encode(IdPAttribute attribute) {
-        final Collection<IdPAttributeValue<?>> attributeValues = attribute.getValues();
+        final Collection<IdPAttributeValue> attributeValues = attribute.getValues();
         if (attributeValues == null || attributeValues.isEmpty()) {
             return null;
         }
@@ -122,4 +122,4 @@ public class SetupForSAML1C14N extends AbstractProfileAction {
         scc.setResponderId(rpc.getConfiguration().getResponderId(profileRequestContext));
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML2C14N.java b/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML2C14N.java
index 6a2b0d8..20a7c47 100644
--- a/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML2C14N.java
+++ b/idp-conf/src/test/java/net/shibboleth/idp/test/flows/c14n/actions/SetupForSAML2C14N.java
@@ -61,7 +61,7 @@ public class SetupForSAML2C14N extends AbstractProfileAction {
 
     private NameID encode(@Nonnull final IdPAttribute attribute) {
 
-        final Collection<IdPAttributeValue<?>> attributeValues = attribute.getValues();
+        final Collection<IdPAttributeValue> attributeValues = attribute.getValues();
         if (attributeValues == null || attributeValues.isEmpty()) {
             return null;
         }
@@ -122,4 +122,4 @@ public class SetupForSAML2C14N extends AbstractProfileAction {
         scc.setResponderId(rpc.getConfiguration().getResponderId(profileRequestContext));
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptor.java b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptor.java
index 38efcbb..98e215e 100644
--- a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptor.java
+++ b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptor.java
@@ -43,7 +43,7 @@ public class AttributeReleaseFlowDescriptor extends ConsentFlowDescriptor {
     private boolean perAttributeConsentEnabled;
 
     /** Function to create hash of all attribute values. */
-    @Nonnull private Function<Collection<IdPAttributeValue<?>>, String> attributeValuesHashFunction;
+    @Nonnull private Function<Collection<IdPAttributeValue>, String> attributeValuesHashFunction;
 
     /** Constructor. */
     public AttributeReleaseFlowDescriptor() {
@@ -82,7 +82,7 @@ public class AttributeReleaseFlowDescriptor extends ConsentFlowDescriptor {
      * 
      * @return function to create hash of all attribute values
      */
-    @Nonnull public Function<Collection<IdPAttributeValue<?>>, String> getAttributeValuesHashFunction() {
+    @Nonnull public Function<Collection<IdPAttributeValue>, String> getAttributeValuesHashFunction() {
         return attributeValuesHashFunction;
     }
 
@@ -125,7 +125,7 @@ public class AttributeReleaseFlowDescriptor extends ConsentFlowDescriptor {
      * @param function function to create hash of all attribute values
      */
     public void setAttributeValuesHashFunction(
-            @Nonnull final Function<Collection<IdPAttributeValue<?>>, String> function) {
+            @Nonnull final Function<Collection<IdPAttributeValue>, String> function) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         attributeValuesHashFunction = Constraint.isNotNull(function, "Attribute values hash function cannot be null");
diff --git a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeReleaseConsentFunction.java b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeReleaseConsentFunction.java
index 60418f2..98eca7c 100644
--- a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeReleaseConsentFunction.java
+++ b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeReleaseConsentFunction.java
@@ -55,7 +55,7 @@ public class AttributeReleaseConsentFunction implements Function<ProfileRequestC
     @Nonnull private Function<ProfileRequestContext,AttributeReleaseContext> attributeReleaseContextLookupStrategy;
 
     /** Function used to compute the hash of an attribute's values. */
-    @Nonnull private Function<Collection<IdPAttributeValue<?>>, String> attributeValuesHashFunction;
+    @Nonnull private Function<Collection<IdPAttributeValue>, String> attributeValuesHashFunction;
 
     /** Constructor. */
     public AttributeReleaseConsentFunction() {
@@ -103,7 +103,7 @@ public class AttributeReleaseConsentFunction implements Function<ProfileRequestC
      * @param function the function used to compute the hash of an attribute's values
      */
     public void setAttributeValuesHashFunction(
-            @Nonnull final Function<Collection<IdPAttributeValue<?>>, String> function) {
+            @Nonnull final Function<Collection<IdPAttributeValue>, String> function) {
         attributeValuesHashFunction = Constraint.isNotNull(function, "Hash function cannot be null");
     }
 
diff --git a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunction.java b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunction.java
index 5e058c9..2501abb 100644
--- a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunction.java
+++ b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunction.java
@@ -51,19 +51,19 @@ import com.google.common.collect.Collections2;
  * 
  * The hash returned is the Base64 encoded representation of the SHA-256 digest.
  */
-public class AttributeValuesHashFunction implements Function<Collection<IdPAttributeValue<?>>, String> {
+public class AttributeValuesHashFunction implements Function<Collection<IdPAttributeValue>, String> {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeValuesHashFunction.class);
 
     /** {@inheritDoc} */
-    @Nullable public String apply(@Nullable @NullableElements final Collection<IdPAttributeValue<?>> input) {
+    @Nullable public String apply(@Nullable @NullableElements final Collection<IdPAttributeValue> input) {
 
         if (input == null) {
             return null;
         }
 
-        final Collection<IdPAttributeValue<?>> filteredInput = Collections2.filter(input, Predicates.notNull());
+        final Collection<IdPAttributeValue> filteredInput = Collections2.filter(input, Predicates.notNull());
 
         if (filteredInput.isEmpty()) {
             return null;
@@ -106,4 +106,4 @@ public class AttributeValuesHashFunction implements Function<Collection<IdPAttri
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptorTest.java b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptorTest.java
index 457ce2d..19ec339 100644
--- a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptorTest.java
+++ b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/flow/ar/impl/AttributeReleaseFlowDescriptorTest.java
@@ -58,7 +58,7 @@ public class AttributeReleaseFlowDescriptorTest {
     }
 
     @Test public void testSettingAttributeValuesHashFunction() throws Exception {
-        final Function<Collection<IdPAttributeValue<?>>, String> function = new AttributeValuesHashFunction();
+        final Function<Collection<IdPAttributeValue>, String> function = new AttributeValuesHashFunction();
         descriptor.setAttributeValuesHashFunction(function);
         Assert.assertEquals(descriptor.getAttributeValuesHashFunction(), function);
     }
diff --git a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/impl/ConsentTestingSupport.java b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/impl/ConsentTestingSupport.java
index ac5a65d..6aa70f2 100644
--- a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/impl/ConsentTestingSupport.java
+++ b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/impl/ConsentTestingSupport.java
@@ -51,9 +51,9 @@ public class ConsentTestingSupport {
     }
 
     public static final Map<String, IdPAttribute> newAttributeMap() {
-        final IdPAttributeValue<?> value1 = new StringAttributeValue("value1");
-        final IdPAttributeValue<?> value2 = new StringAttributeValue("value2");
-        final IdPAttributeValue<?> value3 = new StringAttributeValue("value3");
+        final IdPAttributeValue value1 = new StringAttributeValue("value1");
+        final IdPAttributeValue value2 = new StringAttributeValue("value2");
+        final IdPAttributeValue value3 = new StringAttributeValue("value3");
 
         final IdPAttribute attribute1 = new IdPAttribute("attribute1");
         attribute1.setValues(Collections.singletonList(value1));
diff --git a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunctionTest.java b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunctionTest.java
index a170d83..42ca2ee 100644
--- a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunctionTest.java
+++ b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/logic/impl/AttributeValuesHashFunctionTest.java
@@ -46,7 +46,7 @@ public class AttributeValuesHashFunctionTest {
     }
     
     @Test public void testNullValue() {
-        final List<IdPAttributeValue<?>> values = new ArrayList<>();
+        final List<IdPAttributeValue> values = new ArrayList<>();
         values.add(null);
         Assert.assertNull(function.apply(values));
     }
diff --git a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/storage/impl/ConsentSerializerTest.java b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/storage/impl/ConsentSerializerTest.java
index 21a530f..ea554a4 100644
--- a/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/storage/impl/ConsentSerializerTest.java
+++ b/idp-consent-impl/src/test/java/net/shibboleth/idp/consent/storage/impl/ConsentSerializerTest.java
@@ -55,11 +55,11 @@ public class ConsentSerializerTest {
 
     protected IdPAttribute attribute2;
 
-    protected IdPAttributeValue<?> value1;
+    protected IdPAttributeValue value1;
 
-    protected IdPAttributeValue<?> value2;
+    protected IdPAttributeValue value2;
 
-    protected IdPAttributeValue<?> value3;
+    protected IdPAttributeValue value3;
 
     protected Consent consent1;
 
@@ -67,7 +67,7 @@ public class ConsentSerializerTest {
 
     protected Map<String, Consent> consents;
 
-    protected Function<Collection<IdPAttributeValue<?>>, String> attributeValuesHashFunction;
+    protected Function<Collection<IdPAttributeValue>, String> attributeValuesHashFunction;
 
     @BeforeMethod public void setUp() {
         serializer = new ConsentSerializer();
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
index 2d7c38f..5689899 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
@@ -191,7 +191,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
         final Instant now = Instant.now();
         
         String dateString;
-        for (final IdPAttributeValue<?> value : attribute.getValues()) {
+        for (final IdPAttributeValue value : attribute.getValues()) {
             if (value instanceof StringAttributeValue) {
                 dateString = ((StringAttributeValue) value).getValue();
                 try {
@@ -212,4 +212,4 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
         return false;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
index aceaec5..a999f90 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
@@ -156,7 +156,7 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
             log.debug("Wildcard (*) value rule for attribute {}", attribute.getId());
             return true;
         } else {
-            for (final IdPAttributeValue<?> value : attribute.getValues()) {
+            for (final IdPAttributeValue value : attribute.getValues()) {
                 if (value instanceof StringAttributeValue) {
                     if (toMatch.equals(value.getValue())) {
                         log.debug("Found matching value ({}) in attribute {}", toMatch, attribute.getId());
@@ -169,4 +169,4 @@ public class DynamicAttributePredicate extends AbstractAttributePredicate {
         return false;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
index 4a6c236..d47d8d3 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
@@ -111,7 +111,7 @@ public class RegexAttributePredicate extends AbstractAttributePredicate {
             return false;
         }
         
-        for (final IdPAttributeValue<?> value : attribute.getValues()) {
+        for (final IdPAttributeValue value : attribute.getValues()) {
             if (value instanceof StringAttributeValue) {
                 final Matcher m = pattern.matcher((String) value.getValue());
                 if (m.matches()) {
@@ -124,4 +124,4 @@ public class RegexAttributePredicate extends AbstractAttributePredicate {
         return false;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
index 283521f..f725ea4 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
@@ -126,7 +126,7 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
             log.debug("Wildcard (*) value rule for attribute {}", attribute.getId());
             return true;
         } else {
-            for (final IdPAttributeValue<?> value : attribute.getValues()) {
+            for (final IdPAttributeValue value : attribute.getValues()) {
                 if (value instanceof StringAttributeValue) {
                     if (toMatch.equals(value.getValue())) {
                         log.debug("Found matching value ({}) in attribute {}", toMatch, attribute.getId());
@@ -139,4 +139,4 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
         return false;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java
index a67f364..9a7d771 100644
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java
+++ b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java
@@ -155,7 +155,7 @@ public class DateAttributePredicateTest {
         final ProfileRequestContext prc = new ProfileRequestContext();
         final RelyingPartyContext rpc = new RelyingPartyContext();
         final IdPAttribute attribute = new IdPAttribute(name);
-        final List<IdPAttributeValue<?>> attributeValues = new ArrayList<>();
+        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
         for (String value : values) {
             attributeValues.add(new StringAttributeValue(value));
         }
@@ -211,4 +211,4 @@ public class DateAttributePredicateTest {
         return p;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-profile-impl/src/test/java/net/shibboleth/idp/profile/impl/FilterAttributesTest.java b/idp-profile-impl/src/test/java/net/shibboleth/idp/profile/impl/FilterAttributesTest.java
index f44a4ef..89c4ebc 100644
--- a/idp-profile-impl/src/test/java/net/shibboleth/idp/profile/impl/FilterAttributesTest.java
+++ b/idp-profile-impl/src/test/java/net/shibboleth/idp/profile/impl/FilterAttributesTest.java
@@ -143,7 +143,7 @@ public class FilterAttributesTest {
         final Map<String, IdPAttribute> resultAttributes = resultAttributeCtx.getIdPAttributes();
         Assert.assertEquals(resultAttributes.size(), 1);
 
-        final List<IdPAttributeValue<?>> resultAttributeValue = resultAttributes.get("attribute1").getValues();
+        final List<IdPAttributeValue> resultAttributeValue = resultAttributes.get("attribute1").getValues();
         Assert.assertEquals(resultAttributeValue.size(), 2);
         Assert.assertTrue(resultAttributeValue.contains(new StringAttributeValue("one")));
         Assert.assertTrue(resultAttributeValue.contains(new StringAttributeValue("two")));
@@ -205,7 +205,7 @@ public class FilterAttributesTest {
         final Map<String, IdPAttribute> resultAttributes = resultAttributeCtx.getIdPAttributes();
         Assert.assertEquals(resultAttributes.size(), 1);
 
-        final List<IdPAttributeValue<?>> resultAttributeValue = resultAttributes.get("attribute1").getValues();
+        final List<IdPAttributeValue> resultAttributeValue = resultAttributes.get("attribute1").getValues();
         Assert.assertEquals(resultAttributeValue.size(), 2);
         Assert.assertTrue(resultAttributeValue.contains(new StringAttributeValue("one")));
         Assert.assertTrue(resultAttributeValue.contains(new StringAttributeValue("two")));
@@ -298,4 +298,4 @@ public class FilterAttributesTest {
         }
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML1AttributeTranscoder.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML1AttributeTranscoder.java
index 0171c0f..ed73b1b 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML1AttributeTranscoder.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML1AttributeTranscoder.java
@@ -136,7 +136,7 @@ public abstract class AbstractSAML1AttributeTranscoder<EncodedType extends IdPAt
     @Nonnull protected IdPAttribute buildIdPAttribute(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeDesignator attribute,
             @Nonnull final TranscodingRule rule,
-            @Nonnull @NonnullElements final List<IdPAttributeValue<?>> attributeValues)
+            @Nonnull @NonnullElements final List<IdPAttributeValue> attributeValues)
                     throws AttributeDecodingException {
         
         final String id = rule.get(AttributeTranscoderRegistry.PROP_ID, String.class);
@@ -184,4 +184,4 @@ public abstract class AbstractSAML1AttributeTranscoder<EncodedType extends IdPAt
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML2AttributeTranscoder.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML2AttributeTranscoder.java
index 52e2b8d..0c4486f 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML2AttributeTranscoder.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAML2AttributeTranscoder.java
@@ -130,7 +130,7 @@ public abstract class AbstractSAML2AttributeTranscoder<EncodedType extends IdPAt
     @Nonnull protected IdPAttribute buildIdPAttribute(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule,
-            @Nonnull @NonnullElements final List<IdPAttributeValue<?>> attributeValues)
+            @Nonnull @NonnullElements final List<IdPAttributeValue> attributeValues)
                     throws AttributeDecodingException {
         
         if (!attribute.getAttributeValues().isEmpty() && attributeValues.isEmpty()) {
@@ -185,4 +185,4 @@ public abstract class AbstractSAML2AttributeTranscoder<EncodedType extends IdPAt
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAMLAttributeTranscoder.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAMLAttributeTranscoder.java
index df99f1b..ff8ce5c 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAMLAttributeTranscoder.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/AbstractSAMLAttributeTranscoder.java
@@ -109,7 +109,7 @@ public abstract class AbstractSAMLAttributeTranscoder<AttributeType extends SAML
         
         log.debug("Beginning to decode attribute {}", attributeName);
 
-        final List<IdPAttributeValue<?>> idpAttributeValues = new ArrayList<>();
+        final List<IdPAttributeValue> idpAttributeValues = new ArrayList<>();
         final Iterable<XMLObject> samlAttributeValues = getValues(input);
 
         for (final XMLObject o : samlAttributeValues) {
@@ -119,7 +119,7 @@ public abstract class AbstractSAMLAttributeTranscoder<AttributeType extends SAML
                 continue;
             }
 
-            final IdPAttributeValue<?> idpAttributeValue = decodeValue(profileRequestContext, input, rule, o);
+            final IdPAttributeValue idpAttributeValue = decodeValue(profileRequestContext, input, rule, o);
             if (idpAttributeValue == null) {
                 log.debug("Unable to decode value of attribute {}", attributeName);
             } else {
@@ -256,7 +256,7 @@ public abstract class AbstractSAMLAttributeTranscoder<AttributeType extends SAML
     @Nonnull protected abstract IdPAttribute buildIdPAttribute(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeType attribute,
             @Nonnull final TranscodingRule rule,
-            @Nonnull @NonnullElements final List<IdPAttributeValue<?>> attributeValues)
+            @Nonnull @NonnullElements final List<IdPAttributeValue> attributeValues)
                     throws AttributeDecodingException;
     
     /**
@@ -278,8 +278,8 @@ public abstract class AbstractSAMLAttributeTranscoder<AttributeType extends SAML
      * 
      * @return the returned final {@link IdPAttributeValue} or null if decoding failed
      */
-    @Nullable protected abstract IdPAttributeValue<?> decodeValue(
+    @Nullable protected abstract IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeType attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value);
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/logic/EntityAttributesPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/logic/EntityAttributesPredicate.java
index 1897e8d..38271ff 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/logic/EntityAttributesPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/logic/EntityAttributesPredicate.java
@@ -190,7 +190,7 @@ public class EntityAttributesPredicate extends org.opensaml.saml.common.profile.
                 for (int tagindex = 0; tagindex < tagvals.size(); ++tagindex) {
                     final String tagvalstr = tagvals.get(tagindex);
 
-                    for (final IdPAttributeValue<?> cval : a.getValues()) {
+                    for (final IdPAttributeValue cval : a.getValues()) {
                         final String cvalstr = attributeValueToString(cval);
                         if (tagvalstr != null && cvalstr != null) {
                             if (tagvalstr.equals(cvalstr)) {
@@ -209,7 +209,7 @@ public class EntityAttributesPredicate extends org.opensaml.saml.common.profile.
                 // Check each tag regular expression for a match.
                 for (int tagindex = 0; tagindex < tagexps.size(); ++tagindex) {
 
-                    for (final IdPAttributeValue<?> cval : a.getValues()) {
+                    for (final IdPAttributeValue cval : a.getValues()) {
                         final String cvalstr = attributeValueToString(cval);
                         if (tagexps.get(tagindex) != null && cvalstr != null) {
                             if (tagexps.get(tagindex).matcher(cvalstr).matches()) {
@@ -243,7 +243,7 @@ public class EntityAttributesPredicate extends org.opensaml.saml.common.profile.
          * @param value object to convert
          * @return the converted value, or null
          */
-        @Nullable private String attributeValueToString(@Nonnull final IdPAttributeValue<?> value) {
+        @Nullable private String attributeValueToString(@Nonnull final IdPAttributeValue value) {
             
             if (value instanceof ScopedStringAttributeValue) {
                 return ((ScopedStringAttributeValue) value).getValue() + scopeDelimiter +
@@ -258,4 +258,4 @@ public class EntityAttributesPredicate extends org.opensaml.saml.common.profile.
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/AbstractPersistentIdDataConnector.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/AbstractPersistentIdDataConnector.java
index aeda4d8..b5702db 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/AbstractPersistentIdDataConnector.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/AbstractPersistentIdDataConnector.java
@@ -160,7 +160,7 @@ public abstract class AbstractPersistentIdDataConnector extends AbstractDataConn
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        final List<IdPAttributeValue<?>> attributeValues =
+        final List<IdPAttributeValue> attributeValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
                         getAttributeDependencies(),
                         getDataConnectorDependencies(),
@@ -222,4 +222,4 @@ public abstract class AbstractPersistentIdDataConnector extends AbstractDataConn
         return Collections.singletonMap(getGeneratedAttributeId(), attribute);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML1NameIdentifierAttributeDefinition.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML1NameIdentifierAttributeDefinition.java
index 70979bd..8628049 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML1NameIdentifierAttributeDefinition.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML1NameIdentifierAttributeDefinition.java
@@ -160,7 +160,7 @@ public class SAML1NameIdentifierAttributeDefinition extends AbstractAttributeDef
      * @return null or an attributeValue;
      * @throws ResolutionException if the IdP Name is empty.
      */
-    @Nullable private XMLObjectAttributeValue encodeOneValue(@Nonnull final IdPAttributeValue<?> theValue,
+    @Nullable private XMLObjectAttributeValue encodeOneValue(@Nonnull final IdPAttributeValue theValue,
             @Nonnull final AttributeResolutionContext resolutionContext) throws ResolutionException {
 
         if (theValue instanceof StringAttributeValue) {
@@ -184,8 +184,8 @@ public class SAML1NameIdentifierAttributeDefinition extends AbstractAttributeDef
 
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        final List<? extends IdPAttributeValue<?>> inputValues;
-        List<IdPAttributeValue<?>> outputValues = null;
+        final List<? extends IdPAttributeValue> inputValues;
+        List<IdPAttributeValue> outputValues = null;
         final IdPAttribute result = new IdPAttribute(getId());
 
         inputValues = PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -195,15 +195,15 @@ public class SAML1NameIdentifierAttributeDefinition extends AbstractAttributeDef
 
         if (null != inputValues && !inputValues.isEmpty()) {
             if (1 == inputValues.size()) {
-                final IdPAttributeValue<?> val = encodeOneValue(inputValues.iterator().next(), resolutionContext);
+                final IdPAttributeValue val = encodeOneValue(inputValues.iterator().next(), resolutionContext);
                 if (null != val) {
                     outputValues = Collections.singletonList(val);
                 }
             } else {
                 // TODO(rdw) Fix typing
                 // Intermediate to solve typing issues.
-                final List<IdPAttributeValue<?>> xmlVals = new ArrayList<>(inputValues.size());
-                for (final IdPAttributeValue<?> theValue : inputValues) {
+                final List<IdPAttributeValue> xmlVals = new ArrayList<>(inputValues.size());
+                for (final IdPAttributeValue theValue : inputValues) {
                     final XMLObjectAttributeValue val = encodeOneValue(theValue, resolutionContext);
                     if (null != val) {
                         xmlVals.add(val);
@@ -221,4 +221,4 @@ public class SAML1NameIdentifierAttributeDefinition extends AbstractAttributeDef
         return result;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML2NameIDAttributeDefinition.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML2NameIDAttributeDefinition.java
index 5183530..1c41dd3 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML2NameIDAttributeDefinition.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/resolver/impl/SAML2NameIDAttributeDefinition.java
@@ -220,8 +220,8 @@ public class SAML2NameIDAttributeDefinition extends AbstractAttributeDefinition
 
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        final List<IdPAttributeValue<?>> inputValues;
-        List<IdPAttributeValue<?>> outputValues = null;
+        final List<IdPAttributeValue> inputValues;
+        List<IdPAttributeValue> outputValues = null;
         final IdPAttribute result = new IdPAttribute(getId());
 
         inputValues = PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -232,14 +232,14 @@ public class SAML2NameIDAttributeDefinition extends AbstractAttributeDefinition
         if (null != inputValues && !inputValues.isEmpty()) {
 
             if (1 == inputValues.size()) {
-                final IdPAttributeValue<?> val = encodeOneValue(inputValues.iterator().next(), resolutionContext);
+                final IdPAttributeValue val = encodeOneValue(inputValues.iterator().next(), resolutionContext);
                 if (null != val) {
                     outputValues = Collections.singletonList(val);
                 }
             } else {
                 // TODO Intermediate to solve typing issues.
-                final List<IdPAttributeValue<?>> xmlVals = new ArrayList<>(inputValues.size());
-                for (final IdPAttributeValue<?> theValue : inputValues) {
+                final List<IdPAttributeValue> xmlVals = new ArrayList<>(inputValues.size());
+                for (final IdPAttributeValue theValue : inputValues) {
                     final XMLObjectAttributeValue val = encodeOneValue(theValue, resolutionContext);
                     if (null != val) {
                         xmlVals.add(val);
@@ -258,4 +258,4 @@ public class SAML2NameIDAttributeDefinition extends AbstractAttributeDefinition
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoder.java
index 02f500c..e764662 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoder.java
@@ -63,7 +63,7 @@ public class SAML1ByteAttributeTranscoder extends AbstractSAML1AttributeTranscod
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeDesignator attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
@@ -81,4 +81,4 @@ public class SAML1ByteAttributeTranscoder extends AbstractSAML1AttributeTranscod
         return ByteAttributeValue.valueOf(decoded);
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoder.java
index 4ddefdc..883f9ba 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoder.java
@@ -85,7 +85,7 @@ public class SAML1ScopedStringAttributeTranscoder extends AbstractSAML1Attribute
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeDesignator attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
@@ -131,4 +131,4 @@ public class SAML1ScopedStringAttributeTranscoder extends AbstractSAML1Attribute
         }
     }
         
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoder.java
index 2375cbe..2a3695b 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoder.java
@@ -68,11 +68,11 @@ public class SAML1StringAttributeTranscoder extends AbstractSAML1AttributeTransc
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeDesignator attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
         return value != null ? StringAttributeValue.valueOf(getStringValue(value)) : null;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1XMLObjectAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1XMLObjectAttributeTranscoder.java
index 761ce51..26f8664 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1XMLObjectAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1XMLObjectAttributeTranscoder.java
@@ -66,7 +66,7 @@ public class SAML1XMLObjectAttributeTranscoder extends AbstractSAML1AttributeTra
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final AttributeDesignator attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
 
@@ -94,4 +94,4 @@ public class SAML1XMLObjectAttributeTranscoder extends AbstractSAML1AttributeTra
         return new XMLObjectAttributeValue(child);
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoder.java
index b58a3d4..29b7011 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoder.java
@@ -63,7 +63,7 @@ public class SAML2ByteAttributeTranscoder extends AbstractSAML2AttributeTranscod
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
@@ -81,4 +81,4 @@ public class SAML2ByteAttributeTranscoder extends AbstractSAML2AttributeTranscod
         return ByteAttributeValue.valueOf(decoded);
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoder.java
index 5dbdf9b..6169c33 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoder.java
@@ -85,7 +85,7 @@ public class SAML2ScopedStringAttributeTranscoder extends AbstractSAML2Attribute
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
@@ -132,4 +132,4 @@ public class SAML2ScopedStringAttributeTranscoder extends AbstractSAML2Attribute
         }
     }
         
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoder.java
index 158b55c..54e05c8 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoder.java
@@ -68,11 +68,11 @@ public class SAML2StringAttributeTranscoder extends AbstractSAML2AttributeTransc
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
         
         return value != null ? StringAttributeValue.valueOf(getStringValue(value)) : null;
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoder.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoder.java
index 6d9ee65..5416587 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoder.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoder.java
@@ -66,7 +66,7 @@ public class SAML2XMLObjectAttributeTranscoder extends AbstractSAML2AttributeTra
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable protected IdPAttributeValue<?> decodeValue(
+    @Override @Nullable protected IdPAttributeValue decodeValue(
             @Nullable final ProfileRequestContext profileRequestContext, @Nonnull final Attribute attribute,
             @Nonnull final TranscodingRule rule, @Nullable final XMLObject value) {
 
@@ -94,4 +94,4 @@ public class SAML2XMLObjectAttributeTranscoder extends AbstractSAML2AttributeTra
         return new XMLObjectAttributeValue(child);
     }
     
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
index 891d187..3ccfb7c 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGenerator.java
@@ -164,7 +164,7 @@ public class AttributeSourcedSAML1NameIdentifierGenerator extends AbstractSAML1N
                 continue;
             }
 
-            final List<IdPAttributeValue<?>> values = attribute.getValues();
+            final List<IdPAttributeValue> values = attribute.getValues();
             for (final IdPAttributeValue value : values) {
                 if (value instanceof XMLObjectAttributeValue && value.getValue() instanceof NameIdentifier) {
                     if (SAML1ObjectSupport.areNameIdentifierFormatsEquivalent(getFormat(),
@@ -200,7 +200,7 @@ public class AttributeSourcedSAML1NameIdentifierGenerator extends AbstractSAML1N
                 continue;
             }
 
-            final List<IdPAttributeValue<?>> values = attribute.getValues();
+            final List<IdPAttributeValue> values = attribute.getValues();
             for (final IdPAttributeValue value : values) {
                 if (value instanceof ScopedStringAttributeValue) {
                     log.debug("Generating NameIdentifier from Scoped String-valued attribute {}", sourceId);
@@ -227,4 +227,4 @@ public class AttributeSourcedSAML1NameIdentifierGenerator extends AbstractSAML1N
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
index fa2158a..94cbdba 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGenerator.java
@@ -164,7 +164,7 @@ public class AttributeSourcedSAML2NameIDGenerator extends AbstractSAML2NameIDGen
                 continue;
             }
 
-            final List<IdPAttributeValue<?>> values = attribute.getValues();
+            final List<IdPAttributeValue> values = attribute.getValues();
             for (final IdPAttributeValue value : values) {
                 if (value instanceof XMLObjectAttributeValue && value.getValue() instanceof NameID) {
                     if (SAML2ObjectSupport.areNameIDFormatsEquivalent(getFormat(),
@@ -200,7 +200,7 @@ public class AttributeSourcedSAML2NameIDGenerator extends AbstractSAML2NameIDGen
                 continue;
             }
 
-            final List<IdPAttributeValue<?>> values = attribute.getValues();
+            final List<IdPAttributeValue> values = attribute.getValues();
             for (final IdPAttributeValue value : values) {
                 if (value instanceof ScopedStringAttributeValue) {
                     log.debug("Generating NameID from Scoped String-valued attribute {}", sourceId);
@@ -227,4 +227,4 @@ public class AttributeSourcedSAML2NameIDGenerator extends AbstractSAML2NameIDGen
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
index 9db0aaf..f278446 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/nameid/impl/PersistentSAML2NameIDGenerator.java
@@ -245,7 +245,7 @@ public class PersistentSAML2NameIDGenerator extends AbstractSAML2NameIDGenerator
             pid.setRecipientEntityID(relyingPartyId);
             pid.setPrincipalName(subjectCtx.getPrincipalName());
             
-            final List<IdPAttributeValue<?>> values = attribute.getValues();
+            final List<IdPAttributeValue> values = attribute.getValues();
             for (final IdPAttributeValue value : values) {
                 try {
                     if (value instanceof ScopedStringAttributeValue) {
@@ -278,4 +278,4 @@ public class PersistentSAML2NameIDGenerator extends AbstractSAML2NameIDGenerator
     }
     // Checkstyle: CyclomaticComplexity|MethodLength ON
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributes.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributes.java
index 2c75274..7674e91 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributes.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/FilterByQueriedAttributes.java
@@ -265,9 +265,9 @@ public class FilterByQueriedAttributes extends AbstractProfileAction {
         
         boolean requestedValues = false;
         
-        final Collection<IdPAttributeValue<?>> keepers = new ArrayList<>(attribute.getValues().size());
+        final Collection<IdPAttributeValue> keepers = new ArrayList<>(attribute.getValues().size());
         
-        for (final IdPAttributeValue<?> value : attribute.getValues()) {
+        for (final IdPAttributeValue value : attribute.getValues()) {
             
             for (final IdPAttribute requested : requestedAttributes) {
                 if (!requested.getValues().isEmpty()) {
@@ -288,4 +288,4 @@ public class FilterByQueriedAttributes extends AbstractProfileAction {
         return keepers.size();
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoderTest.java
index ebce4b8..2d7ae4c 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ByteAttributeTranscoderTest.java
@@ -174,7 +174,7 @@ public class SAML1ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ScopedStringAttributeValue("foo", "bar"),
                         new IdPAttributeValue<Object>() {
                             public Object getValue() {
@@ -196,7 +196,7 @@ public class SAML1ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ByteAttributeValue(BYTE_ARRAY_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -231,7 +231,7 @@ public class SAML1ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ByteAttributeValue(BYTE_ARRAY_1));
 
         final IdPRequestedAttribute inputAttribute = new IdPRequestedAttribute(ATTR_NAME);
@@ -289,7 +289,7 @@ public class SAML1ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(BYTE_ARRAY_1), new ByteAttributeValue(BYTE_ARRAY_2));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -365,4 +365,4 @@ public class SAML1ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
         Assert.assertEquals(attr.getValues().get(1).getValue(), BYTE_ARRAY_2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoderTest.java
index 1071168..d6da1d5 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1ScopedStringAttributeTranscoderTest.java
@@ -167,7 +167,7 @@ public class SAML1ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -190,7 +190,7 @@ public class SAML1ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new StringAttributeValue(STRING_1),
@@ -228,7 +228,7 @@ public class SAML1ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1));
 
@@ -275,7 +275,7 @@ public class SAML1ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
         
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new ScopedStringAttributeValue(STRING_2, SCOPE_2));
@@ -367,4 +367,4 @@ public class SAML1ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
         Assert.assertTrue(SCOPE_2.equals(value1.getScope()) || SCOPE_2.equals(value2.getScope()));
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoderTest.java
index ad33578..128da03 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML1StringAttributeTranscoderTest.java
@@ -171,7 +171,7 @@ public class SAML1StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -194,7 +194,7 @@ public class SAML1StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new StringAttributeValue(STRING_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -228,7 +228,7 @@ public class SAML1StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new StringAttributeValue(STRING_1));
 
         final IdPRequestedAttribute inputAttribute = new IdPRequestedAttribute(ATTR_NAME);
@@ -269,7 +269,7 @@ public class SAML1StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
         
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new StringAttributeValue(STRING_1),
                         new StringAttributeValue(STRING_2),
@@ -324,4 +324,4 @@ public class SAML1StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
         Assert.assertEquals(attr.getValues().get(1).getValue().toString(), STRING_2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoderTest.java
index 203a93c..b874721 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ByteAttributeTranscoderTest.java
@@ -167,7 +167,7 @@ public class SAML2ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ScopedStringAttributeValue("foo", "bar"),
                         new IdPAttributeValue<Object>() {
                             public Object getValue() {
@@ -189,7 +189,7 @@ public class SAML2ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ByteAttributeValue(BYTE_ARRAY_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -225,7 +225,7 @@ public class SAML2ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new StringAttributeValue("foo"), new ByteAttributeValue(BYTE_ARRAY_1));
 
         final IdPRequestedAttribute inputAttribute = new IdPRequestedAttribute(ATTR_NAME);
@@ -326,7 +326,7 @@ public class SAML2ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
     }
     
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(BYTE_ARRAY_1), new ByteAttributeValue(BYTE_ARRAY_2));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -402,4 +402,4 @@ public class SAML2ByteAttributeTranscoderTest extends OpenSAMLInitBaseTestCase {
         Assert.assertEquals(attr.getValues().get(1).getValue(), BYTE_ARRAY_2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoderTest.java
index 05d1b7c..1748eae 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2ScopedStringAttributeTranscoderTest.java
@@ -169,7 +169,7 @@ public class SAML2ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -192,7 +192,7 @@ public class SAML2ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new StringAttributeValue(STRING_1),
@@ -230,7 +230,7 @@ public class SAML2ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1));
 
@@ -321,7 +321,7 @@ public class SAML2ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
     }
     
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new ScopedStringAttributeValue(STRING_1, SCOPE_1),
                         new ScopedStringAttributeValue(STRING_2, SCOPE_2));
@@ -391,4 +391,4 @@ public class SAML2ScopedStringAttributeTranscoderTest extends OpenSAMLInitBaseTe
         Assert.assertTrue(SCOPE_2.equals(value1.getScope()) || SCOPE_2.equals(value2.getScope()));
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoderTest.java
index 1182837..222614e 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2StringAttributeTranscoderTest.java
@@ -164,7 +164,7 @@ public class SAML2StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -187,7 +187,7 @@ public class SAML2StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
     
     @Test public void single() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new StringAttributeValue(STRING_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -222,7 +222,7 @@ public class SAML2StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
 
     @Test public void singleRequested() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new StringAttributeValue(STRING_1));
 
         final IdPRequestedAttribute inputAttribute = new IdPRequestedAttribute(ATTR_NAME);
@@ -306,7 +306,7 @@ public class SAML2StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
     }
     
     @Test public void multi() throws Exception {
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}),
                         new StringAttributeValue(STRING_1),
                         new StringAttributeValue(STRING_2),
@@ -361,4 +361,4 @@ public class SAML2StringAttributeTranscoderTest extends OpenSAMLInitBaseTestCase
         Assert.assertEquals(attr.getValues().get(1).getValue().toString(), STRING_2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoderTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoderTest.java
index 92f1e2c..93c754d 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoderTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/attribute/transcoding/impl/SAML2XMLObjectAttributeTranscoderTest.java
@@ -171,7 +171,7 @@ public class SAML2XMLObjectAttributeTranscoderTest extends OpenSAMLInitBaseTestC
     
     @Test(expectedExceptions = {AttributeEncodingException.class,}) public void inappropriate() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final Collection<IdPAttributeValue<?>> values =
+        final Collection<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), new IdPAttributeValue<Object>() {
                     @Override
                     public Object getValue() {
@@ -194,7 +194,7 @@ public class SAML2XMLObjectAttributeTranscoderTest extends OpenSAMLInitBaseTestC
     }
     
     @Test public void single() throws Exception {
-        final List<IdPAttributeValue<?>> values =
+        final List<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), objectFor(STRING_1));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -224,7 +224,7 @@ public class SAML2XMLObjectAttributeTranscoderTest extends OpenSAMLInitBaseTestC
     }
 
     @Test public void singleRequested() throws Exception {
-        final List<IdPAttributeValue<?>> values =
+        final List<IdPAttributeValue> values =
                 Arrays.asList(new ByteAttributeValue(new byte[] {1, 2, 3,}), objectFor(STRING_1));
 
         final IdPRequestedAttribute inputAttribute = new IdPRequestedAttribute(ATTR_NAME);
@@ -316,7 +316,7 @@ public class SAML2XMLObjectAttributeTranscoderTest extends OpenSAMLInitBaseTestC
     }
     
     @Test public void multi() throws Exception {
-        final List<IdPAttributeValue<?>> values =
+        final List<IdPAttributeValue> values =
                 Arrays.asList(objectFor(STRING_1), objectFor(STRING_2));
 
         final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
@@ -426,4 +426,4 @@ public class SAML2XMLObjectAttributeTranscoderTest extends OpenSAMLInitBaseTestC
         Assert.assertTrue(false, "No potential match");
     }
 
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/impl/TestSources.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/impl/TestSources.java
index 26651a7..5c6bd5b 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/impl/TestSources.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/impl/TestSources.java
@@ -165,7 +165,7 @@ public final class TestSources {
     public static AttributeDefinition populatedStaticAttribute(String attributeName,
             int attributeValuesCount) throws ComponentInitializationException {
         IdPAttribute attr;
-        List<IdPAttributeValue<?>> valuesList = new ArrayList<>();
+        List<IdPAttributeValue> valuesList = new ArrayList<>();
 
         if (attributeValuesCount > 0) {
             valuesList.add(new StringAttributeValue(COMMON_ATTRIBUTE_VALUE_STRING));
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
index 26fc2f1..93f03db 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML1NameIdentifierGeneratorTest.java
@@ -58,7 +58,7 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
 
     private final static String QUALIFIER = "Qualifier";
 
-    private static IdPAttributeValue<?> saml1NameIdFor(final String ident) {
+    private static IdPAttributeValue saml1NameIdFor(final String ident) {
         NameIdentifier id = saml1Builder.buildObject();
 
         id.setValue(ident);
@@ -67,7 +67,7 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
         return new XMLObjectAttributeValue(id);
     }
 
-    private static IdPAttributeValue<?> saml2NameIdFor(final String ident) {
+    private static IdPAttributeValue saml2NameIdFor(final String ident) {
         NameID id = saml2Builder.buildObject();
 
         id.setValue(ident);
@@ -109,7 +109,7 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
 
     @Test public void testWrongType() throws Exception {
         final int[] intArray = {1, 2, 3, 4};
-        final List<IdPAttributeValue<?>> values = List.of(new IdPAttributeValue<Object>() {
+        final List<IdPAttributeValue> values = List.of(new IdPAttributeValue<Object>() {
             public Object getValue() {
                 return intArray;
             }
@@ -206,4 +206,4 @@ public class AttributeSourcedSAML1NameIdentifierGeneratorTest extends OpenSAMLIn
         Assert.assertEquals(outputNameId.getNameQualifier(), prc.getSubcontext(RelyingPartyContext.class)
                 .getConfiguration().getResponderId(prc));
     }
-}
\ No newline at end of file
+}
diff --git a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
index efca1ee..12a4d1a 100644
--- a/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
+++ b/idp-saml-impl/src/test/java/net/shibboleth/idp/saml/nameid/impl/AttributeSourcedSAML2NameIDGeneratorTest.java
@@ -58,7 +58,7 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
 
     private final static String QUALIFIER = "Qualifier";
 
-    private static IdPAttributeValue<?> saml1NameIdFor(final String ident) {
+    private static IdPAttributeValue saml1NameIdFor(final String ident) {
         NameIdentifier id = saml1Builder.buildObject();
 
         id.setValue(ident);
@@ -67,7 +67,7 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
         return new XMLObjectAttributeValue(id);
     }
 
-    private static IdPAttributeValue<?> saml2NameIdFor(final String ident) {
+    private static IdPAttributeValue saml2NameIdFor(final String ident) {
         NameID id = saml2Builder.buildObject();
 
         id.setValue(ident);
@@ -207,4 +207,4 @@ public class AttributeSourcedSAML2NameIDGeneratorTest extends OpenSAMLInitBaseTe
         Assert.assertEquals(outputNameId.getSPNameQualifier(),
                 prc.getSubcontext(RelyingPartyContext.class).getRelyingPartyId());
     }
-}
\ 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