[java-shib-attribute] branch main updated: Fix null and annotation bugs.

Scott Cantor cantor.2 at osu.edu
Mon Nov 14 20:00:57 UTC 2022


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

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

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=3a1232ac4b96edc1bd49dca00c0742f9552e8cb4

The following commit(s) were added to refs/heads/main by this push:
     new 3a1232ac4 Fix null and annotation bugs.
3a1232ac4 is described below

commit 3a1232ac4b96edc1bd49dca00c0742f9552e8cb4
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Nov 14 15:00:54 2022 -0500

    Fix null and annotation bugs.
---
 .../idp/attribute/ByteAttributeValue.java          |  7 ++--
 .../idp/attribute/DateTimeAttributeValue.java      | 11 +++---
 .../idp/attribute/EmptyAttributeValue.java         | 13 +++---
 .../idp/attribute/ScopedStringAttributeValue.java  |  9 ++---
 .../idp/attribute/StringAttributeValue.java        |  8 ++--
 .../idp/attribute/XMLObjectAttributeValue.java     | 19 ++++-----
 .../attribute/transcoding/TranscoderSupport.java   |  3 +-
 .../idp/attribute/transcoding/TranscodingRule.java | 20 ++++++----
 .../shibboleth/idp/attribute/AttributeTest.java    |  3 --
 .../idp/attribute/ByteAttributeValueTest.java      |  8 ++--
 .../idp/attribute/EmptyAttributeValueTest.java     |  6 +--
 .../attribute/ScopedStringAttributeValueTest.java  |  8 ++--
 .../idp/attribute/StringAttributeValueTest.java    |  8 ++--
 .../idp/attribute/XMLObjectAttributeValueTest.java |  8 ++--
 .../attribute/impl/ComputedPairwiseIdStore.java    | 17 ++++----
 .../idp/attribute/impl/JDBCPairwiseIdStore.java    | 46 ++++++++++++++++------
 .../impl/AttributeRegistryServiceStrategy.java     |  4 ++
 .../impl/AttributeTranscoderRegistryImpl.java      | 37 ++++++++++++-----
 .../impl/ComputedPairwiseIdStoreTest.java          | 24 ++++++-----
 .../attribute/impl/JDBCPairwiseIdStoreTest.java    | 26 ++++++++----
 .../impl/AttributeTranscoderRegistryImplTest.java  |  8 +++-
 .../attribute/transcoding/impl/PairTranscoder.java | 15 ++++---
 22 files changed, 189 insertions(+), 119 deletions(-)

diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
index 65256685f..54f8e4534 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ByteAttributeValue.java
@@ -36,7 +36,7 @@ import net.shibboleth.shared.logic.Constraint;
 public final class ByteAttributeValue implements IdPAttributeValue {
 
     /** Value of the attribute. */
-    private final byte[] value;
+    @Nonnull private final byte[] value;
 
     /**
      * Constructor.
@@ -55,13 +55,12 @@ public final class ByteAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return value;
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String getDisplayValue() {
+    @Nonnull @NotEmpty public String getDisplayValue() {
         return toHex();
     }
 
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/DateTimeAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/DateTimeAttributeValue.java
index b22e51366..e40ae9194 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/DateTimeAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/DateTimeAttributeValue.java
@@ -37,7 +37,7 @@ import com.google.common.base.MoreObjects;
 public class DateTimeAttributeValue implements IdPAttributeValue {
 
     /** The attribute value. */
-    @Nonnull @NotEmpty private final Instant value;
+    @Nonnull private final Instant value;
 
     /**
      * Constructor.
@@ -45,7 +45,7 @@ public class DateTimeAttributeValue implements IdPAttributeValue {
      * @param attributeValue the attribute value
      */
     public DateTimeAttributeValue(
-            @Nonnull @NotEmpty @ParameterName(name="attributeValue") final Instant attributeValue) {
+            @Nonnull @ParameterName(name="attributeValue") final Instant attributeValue) {
         value = Constraint.isNotNull(attributeValue, "Attribute value cannot be null or empty");
     }
 
@@ -55,13 +55,12 @@ public class DateTimeAttributeValue implements IdPAttributeValue {
      * @param attributeValue the attribute value
      */
     public DateTimeAttributeValue(
-            @Nonnull @NotEmpty @ParameterName(name="attributeValue") final ZonedDateTime attributeValue) {
+            @Nonnull @ParameterName(name="attributeValue") final ZonedDateTime attributeValue) {
         value = Constraint.isNotNull(attributeValue, "Attribute value cannot be null or empty").toInstant();
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return value;
     }
 
@@ -73,7 +72,7 @@ public class DateTimeAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String getDisplayValue() {
+    @Nonnull @NotEmpty public String getDisplayValue() {
         return value.toString();
     }
 
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/EmptyAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/EmptyAttributeValue.java
index b596f0081..9533ee34b 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/EmptyAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/EmptyAttributeValue.java
@@ -35,10 +35,10 @@ import com.google.common.base.MoreObjects;
 public final class EmptyAttributeValue implements IdPAttributeValue {
 
     /** Instance of null empty attribute value. */
-    public static final EmptyAttributeValue NULL = new EmptyAttributeValue(EmptyType.NULL_VALUE);
+    @Nonnull public static final EmptyAttributeValue NULL = new EmptyAttributeValue(EmptyType.NULL_VALUE);
 
     /** Instance of zero length attribute value. */
-    public static final EmptyAttributeValue ZERO_LENGTH = new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE);
+    @Nonnull public static final EmptyAttributeValue ZERO_LENGTH = new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE);
 
     /** Types of empty values. */
     public enum EmptyType {
@@ -50,7 +50,7 @@ public final class EmptyAttributeValue implements IdPAttributeValue {
     }
 
     /** Value of the attribute. */
-    @Nonnull @NotEmpty private final EmptyType value;
+    @Nonnull private final EmptyType value;
 
     /**
      * Constructor.
@@ -62,20 +62,19 @@ public final class EmptyAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return value;
     }
 
     /** Return the value.
      * @return the value
      */
-    public EmptyType getValue() {
+    @Nonnull public EmptyType getValue() {
         return value;
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String getDisplayValue() {
+    @Nonnull @NotEmpty public String getDisplayValue() {
         return value.toString();
     }
 
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
index f94db1c47..188ff9074 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/ScopedStringAttributeValue.java
@@ -35,7 +35,7 @@ import com.google.common.base.Objects;
 public final class ScopedStringAttributeValue extends StringAttributeValue {
 
     /** Scope of the attribute value. */
-    private final String scope;
+    @Nonnull @NotEmpty private final String scope;
 
     /**
      * Constructor.
@@ -51,8 +51,7 @@ public final class ScopedStringAttributeValue extends StringAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return new Pair<>(getValue(), scope);
     }
 
@@ -66,7 +65,7 @@ public final class ScopedStringAttributeValue extends StringAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String getDisplayValue() {
+    @Nonnull @NotEmpty public String getDisplayValue() {
         return getValue() + '@' + scope;
     }
 
@@ -95,7 +94,7 @@ public final class ScopedStringAttributeValue extends StringAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String toString() {
+    @Override public String toString() {
         return MoreObjects.toStringHelper(this).add("value", getValue()).add("scope", scope).toString();
     }
 
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
index e4605de2f..d87268a60 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/StringAttributeValue.java
@@ -44,8 +44,7 @@ public class StringAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return value;
     }
 
@@ -57,7 +56,7 @@ public class StringAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NotEmpty public String getDisplayValue() {
+    @Nonnull @NotEmpty public String getDisplayValue() {
         return value;
     }
 
@@ -105,4 +104,5 @@ public class StringAttributeValue implements IdPAttributeValue {
             return new StringAttributeValue(value);
         }
     }
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/XMLObjectAttributeValue.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/XMLObjectAttributeValue.java
index afa15f4dd..b5f32f758 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/XMLObjectAttributeValue.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/XMLObjectAttributeValue.java
@@ -38,10 +38,10 @@ import net.shibboleth.shared.xml.SerializeSupport;
 public final class XMLObjectAttributeValue implements IdPAttributeValue {
 
     /** Log. */
-    private static final Logger LOG = LoggerFactory.getLogger(XMLObjectAttributeValue.class);
+    @Nonnull private static final Logger LOG = LoggerFactory.getLogger(XMLObjectAttributeValue.class);
 
     /** Value of the attribute. */
-    private final XMLObject value;
+    @Nonnull private final XMLObject value;
 
     /**
      * Constructor.
@@ -53,30 +53,31 @@ public final class XMLObjectAttributeValue implements IdPAttributeValue {
     }
 
     /** {@inheritDoc} */
-    @Override
-    public Object getNativeValue() {
+    @Nonnull public Object getNativeValue() {
         return value;
     }
 
     /** Return the value.
      * @return the value
      */
-    public final XMLObject getValue() {
+    @Nonnull public final XMLObject getValue() {
         return value;
     }
 
     /** {@inheritDoc} */
-    @Override
     @Nonnull @NotEmpty public String getDisplayValue() {
         if (value instanceof NameIDType) {
-            final NameIDType valAsNameId = (NameIDType) value;
-            return valAsNameId.getValue();
+            final String n = ((NameIDType) value).getValue();
+            if (n != null) {
+                return n;
+            }
         }
+        
         try {
             return SerializeSupport.nodeToString(XMLObjectSupport.marshall(value));
         } catch (final MarshallingException e) {
             LOG.error("Error while marshalling XMLObject value", e);
-            return null;
+            return "(unable to get value)";
         }
     }
 
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscoderSupport.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscoderSupport.java
index 3aa95fadc..64f93d515 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscoderSupport.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscoderSupport.java
@@ -48,8 +48,7 @@ public final class TranscoderSupport {
         
         final AttributeTranscoder<T> transcoder =
                 rule.get(AttributeTranscoderRegistry.PROP_TRANSCODER, AttributeTranscoder.class);
-        Constraint.isNotNull(transcoder, "AttributeTranscoder not found in properties");
-        return transcoder;
+        return Constraint.isNotNull(transcoder, "AttributeTranscoder not found in properties");
     }
 
 }
\ No newline at end of file
diff --git a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscodingRule.java b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscodingRule.java
index ee133d070..97911e845 100644
--- a/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscodingRule.java
+++ b/shib-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/TranscodingRule.java
@@ -73,8 +73,8 @@ public final class TranscodingRule {
      */
     public TranscodingRule(@Nonnull @NonnullElements @ParameterName(name="map") final Map<String,Object> map) {
         rule = new HashMap<>(map);
-        processDisplayNames();
-        processDescriptions();
+        displayNames = processDisplayNames();
+        descriptions = processDescriptions();
     }
 
     /**
@@ -100,8 +100,8 @@ public final class TranscodingRule {
                         rule.put((String) k, v);
                     }
                 });
-        processDisplayNames();
-        processDescriptions();
+        displayNames = processDisplayNames();
+        descriptions = processDescriptions();
     }
 
     /**
@@ -174,8 +174,10 @@ public final class TranscodingRule {
     /**
      * Process any properties that start with {@link AttributeTranscoderRegistry#PROP_DISPLAY_NAME} and
      * create a Locale map around them.
+     * 
+     * @return the map of display names
      */
-    private void processDisplayNames() {
+    @Nonnull @NonnullElements private Map<Locale,String> processDisplayNames() {
         
         final ImmutableMap.Builder<Locale,String> builder = ImmutableMap.builder();
         final HashSet<Locale> inserted = new HashSet<>();
@@ -198,14 +200,16 @@ public final class TranscodingRule {
             }
         }
         
-        displayNames = builder.build();
+        return builder.build();
     }
 
     /**
      * Process any properties that start with {@link AttributeTranscoderRegistry#PROP_DESCRIPTION} and
      * create a Locale map around them.
+     * 
+     * @return the map of descriptions
      */
-    private void processDescriptions() {
+    @Nonnull @NonnullElements private Map<Locale,String> processDescriptions() {
         
         final ImmutableMap.Builder<Locale,String> builder = ImmutableMap.builder();
         final HashSet<Locale> inserted = new HashSet<>();
@@ -228,7 +232,7 @@ public final class TranscodingRule {
             }
         }
         
-        descriptions = builder.build();
+        return builder.build();
     }
     
     /**
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
index a22617f3e..de3ab9ff7 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
@@ -24,11 +24,8 @@ import static org.testng.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Locale;
-import java.util.Map;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ByteAttributeValueTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ByteAttributeValueTest.java
index e9706a3f6..e91430e58 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ByteAttributeValueTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ByteAttributeValueTest.java
@@ -19,6 +19,8 @@ package net.shibboleth.idp.attribute;
 
 import java.util.Arrays;
 
+import javax.annotation.Nonnull;
+
 import net.shibboleth.shared.codec.Base64Support;
 import net.shibboleth.shared.codec.DecodingException;
 import net.shibboleth.shared.codec.EncodingException;
@@ -31,9 +33,9 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class ByteAttributeValueTest {
 
-    static final byte[] DATA1 = {1,2,3,0xF};
-    static final byte[] DATAEQUALS1 = {1,2,3,0xF};
-    static final byte[] DATA2 = {2,3,1};
+    @Nonnull static final byte[] DATA1 = {1,2,3,0xF};
+    @Nonnull static final byte[] DATAEQUALS1 = {1,2,3,0xF};
+    @Nonnull static final byte[] DATA2 = {2,3,1};
     
     /** Test proper instantiation of the object. */
     @Test public void instantiation() {
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/EmptyAttributeValueTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/EmptyAttributeValueTest.java
index a55683c75..12d7db2cc 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/EmptyAttributeValueTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/EmptyAttributeValueTest.java
@@ -28,7 +28,7 @@ public class EmptyAttributeValueTest {
 
     /** Test proper instantiation of the object. */
     @Test public void instantiation() {
-        EmptyAttributeValue value = new EmptyAttributeValue(EmptyType.NULL_VALUE);
+        final EmptyAttributeValue value = new EmptyAttributeValue(EmptyType.NULL_VALUE);
         Assert.assertEquals(value.getValue(), EmptyType.NULL_VALUE);
 
         try {
@@ -43,8 +43,8 @@ public class EmptyAttributeValueTest {
     /** Test equality of two objects. */
     @SuppressWarnings("unlikely-arg-type")
     @Test public void equality() {
-        EmptyAttributeValue value1 = new EmptyAttributeValue(EmptyType.NULL_VALUE);
-        EmptyAttributeValue value2 = new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE);
+        final EmptyAttributeValue value1 = new EmptyAttributeValue(EmptyType.NULL_VALUE);
+        final EmptyAttributeValue value2 = new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE);
 
         Assert.assertTrue(value1.equals(value1));
         Assert.assertTrue(value2.equals(value2));
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ScopedStringAttributeValueTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ScopedStringAttributeValueTest.java
index 5c4f43a8f..addb74895 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ScopedStringAttributeValueTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/ScopedStringAttributeValueTest.java
@@ -27,7 +27,7 @@ public class ScopedStringAttributeValueTest {
 
     /** Test proper instantiation of the object. */
     @Test public void instantiation() {
-        ScopedStringAttributeValue value = new ScopedStringAttributeValue(" foo ", " bar ");
+        final ScopedStringAttributeValue value = new ScopedStringAttributeValue(" foo ", " bar ");
         Assert.assertEquals(value.getValue(), " foo ");
         Assert.assertEquals(value.getScope(), "bar");
 
@@ -63,9 +63,9 @@ public class ScopedStringAttributeValueTest {
     /** Test equality of two objects. */
     @SuppressWarnings("unlikely-arg-type")
     @Test public void equality() {
-        ScopedStringAttributeValue value1 = new ScopedStringAttributeValue(" foo ", " bar ");
-        ScopedStringAttributeValue value2 = new ScopedStringAttributeValue("foo", "bar");
-        ScopedStringAttributeValue value3 = new ScopedStringAttributeValue(" foo ", "baz ");
+        final ScopedStringAttributeValue value1 = new ScopedStringAttributeValue(" foo ", " bar ");
+        final ScopedStringAttributeValue value2 = new ScopedStringAttributeValue("foo", "bar");
+        final ScopedStringAttributeValue value3 = new ScopedStringAttributeValue(" foo ", "baz ");
 
         Assert.assertFalse(value1.equals(value2));
         Assert.assertTrue(value1.equals(value1));
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/StringAttributeValueTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/StringAttributeValueTest.java
index 769c5a59d..ba55c2af5 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/StringAttributeValueTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/StringAttributeValueTest.java
@@ -27,7 +27,7 @@ public class StringAttributeValueTest {
 
     /** Test proper instantiation of the object. */
     @Test public void instantiation() {
-        StringAttributeValue value = new StringAttributeValue(" foo ");
+        final StringAttributeValue value = new StringAttributeValue(" foo ");
         Assert.assertEquals(value.getValue(), " foo ");
 
         try {
@@ -49,9 +49,9 @@ public class StringAttributeValueTest {
     /** Test equality of two objects. */
     @SuppressWarnings("unlikely-arg-type")
     @Test public void equality() {
-        StringAttributeValue value1 = new StringAttributeValue(" foo ");
-        StringAttributeValue value2 = new StringAttributeValue("foo");
-        StringAttributeValue value3 = new StringAttributeValue(" baz ");
+        final StringAttributeValue value1 = new StringAttributeValue(" foo ");
+        final StringAttributeValue value2 = new StringAttributeValue("foo");
+        final StringAttributeValue value3 = new StringAttributeValue(" baz ");
 
         Assert.assertFalse(value1.equals(value2));
         Assert.assertFalse(value1.equals(value2));
diff --git a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/XMLObjectAttributeValueTest.java b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/XMLObjectAttributeValueTest.java
index c020cee83..7999a4414 100644
--- a/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/XMLObjectAttributeValueTest.java
+++ b/shib-attribute-api/src/test/java/net/shibboleth/idp/attribute/XMLObjectAttributeValueTest.java
@@ -53,7 +53,7 @@ public class XMLObjectAttributeValueTest extends XMLObjectBaseTestCase {
 
     /** Test proper instantiation of the object. */
     @Test public void instantiation() {
-        XMLObjectAttributeValue value = new XMLObjectAttributeValue(xsId1);
+        final XMLObjectAttributeValue value = new XMLObjectAttributeValue(xsId1);
         Assert.assertEquals(value.getValue(), xsId1);
 
         try {
@@ -67,9 +67,9 @@ public class XMLObjectAttributeValueTest extends XMLObjectBaseTestCase {
     /** Test equality of two objects. */
     @SuppressWarnings("unlikely-arg-type")
     @Test public void equality() {
-        XMLObjectAttributeValue value1 = new XMLObjectAttributeValue(xsId1);
-        XMLObjectAttributeValue value2 = new XMLObjectAttributeValue(xsId2);
-        XMLObjectAttributeValue value3 = new XMLObjectAttributeValue(xsId3);
+        final XMLObjectAttributeValue value1 = new XMLObjectAttributeValue(xsId1);
+        final XMLObjectAttributeValue value2 = new XMLObjectAttributeValue(xsId2);
+        final XMLObjectAttributeValue value3 = new XMLObjectAttributeValue(xsId3);
 
         Assert.assertTrue(value1.equals(value1));
         Assert.assertNotEquals(value1.hashCode(), value2.hashCode());
diff --git a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStore.java b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStore.java
index 7b96dddbf..e29cd1f83 100644
--- a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStore.java
+++ b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStore.java
@@ -241,21 +241,24 @@ public class ComputedPairwiseIdStore extends AbstractInitializableComponent impl
             throws IOException {
         checkComponentActive();
         Constraint.isNotNull(pid, "Input PairwiseId object cannot be null");
-        Constraint.isNotEmpty(pid.getRecipientEntityID(), "Recipient entityID cannot be null or empty");
-        Constraint.isNotEmpty(pid.getPrincipalName(), "Principal name cannot be null or empty");
-        Constraint.isNotEmpty(pid.getSourceSystemId(), "Source system ID cannot be null or empty");
+        final String recipientId =
+                Constraint.isNotEmpty(pid.getRecipientEntityID(), "Recipient entityID cannot be null or empty");
+        final String principalName =
+                Constraint.isNotEmpty(pid.getPrincipalName(), "Principal name cannot be null or empty");
+        final String sourceId =
+                Constraint.isNotEmpty(pid.getSourceSystemId(), "Source system ID cannot be null or empty");
     
-        final byte[] effectiveSalt = getEffectiveSalt(pid.getPrincipalName(), pid.getRecipientEntityID());
+        final byte[] effectiveSalt = getEffectiveSalt(principalName, recipientId);
         if (effectiveSalt == null) {
-            log.warn("Pairwise ID generation blocked for relying party ({})", pid.getRecipientEntityID());
+            log.warn("Pairwise ID generation blocked for relying party ({})", recipientId);
             throw new IOException("Pairwise ID generation blocked by exception rule");
         }
         
         try {
             final MessageDigest md = MessageDigest.getInstance(algorithm);
-            md.update(pid.getRecipientEntityID().getBytes());
+            md.update(recipientId.getBytes());
             md.update((byte) '!');
-            md.update(pid.getSourceSystemId().getBytes());
+            md.update(sourceId.getBytes());
             md.update((byte) '!');
 
             if (encoding == Encoding.BASE32) {
diff --git a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStore.java b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStore.java
index db030febe..adf10bb7c 100644
--- a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStore.java
+++ b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStore.java
@@ -617,8 +617,9 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
         
                 log.debug("Getting active and/or last inactive pairwise ID entry");
                 final List<PairwiseId> entries = buildIdentifierEntries(statement.executeQuery());
-                if (entries != null && entries.size() > 0 && (entries.get(0).getDeactivationTime() == null
-                        || entries.get(0).getDeactivationTime().isAfter(Instant.now()))) {
+                final Instant deactivationTime;
+                if (entries != null && entries.size() > 0 && ((deactivationTime = entries.get(0).getDeactivationTime()) == null
+                        || deactivationTime.isAfter(Instant.now()))) {
                     dbConn.commit();
                     log.debug("Returning existing active pairwise ID: {}", entries.get(0).getPairwiseId());
                     return entries.get(0);
@@ -635,7 +636,11 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
 
                 if ((entries == null || entries.size() == 0) && initialValueStore != null) {
                     log.debug("Issuing new pairwise ID using initial value store");
+                    assert initialValueStore != null;
                     retValue = initialValueStore.getBySourceValue(pid, allowCreate);
+                    if (retValue == null) {
+                        throw new IOException("Unable to obtain value from initial value store");
+                    }
                 } else {
                     log.debug("Issuing new random pairwise ID");
                     retValue.setPairwiseId(UUID.randomUUID().toString());
@@ -702,8 +707,8 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
                 log.error("More than one record found for a single persistent ID value");
             }
             
-            if (entries.get(0).getDeactivationTime() != null &&
-                    !entries.get(0).getDeactivationTime().isAfter(Instant.now())) {
+            final Instant deactivationTime = entries.get(0).getDeactivationTime();
+            if (deactivationTime != null && !deactivationTime.isAfter(Instant.now())) {
                 return null;
             }
     
@@ -722,10 +727,11 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
         Constraint.isNotEmpty(pid.getPairwiseId(), "Pairwise ID cannot be null or empty");
         
         final Timestamp deactivationTime;
-        if (pid.getDeactivationTime() == null) {
+        final Instant deactivationTimeFromPID = pid.getDeactivationTime();
+        if (deactivationTimeFromPID == null) {
             deactivationTime = new Timestamp(System.currentTimeMillis());
         } else {
-            deactivationTime = new Timestamp(pid.getDeactivationTime().toEpochMilli());
+            deactivationTime = new Timestamp(deactivationTimeFromPID.toEpochMilli());
         }
 
         log.debug("Deactivating pairwise ID {} as of {}", pid.getPairwiseId(), deactivationTime);
@@ -828,12 +834,21 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
         } else {
             statement.setNull(6, Types.VARCHAR);
         }
-        statement.setTimestamp(7, new Timestamp(entry.getCreationTime().toEpochMilli()));
-        if (entry.getDeactivationTime() != null) {
-            statement.setTimestamp(8, new Timestamp(entry.getDeactivationTime().toEpochMilli()));
+        
+        final Instant creationTime = entry.getCreationTime();
+        if (creationTime != null) {
+            statement.setTimestamp(7, new Timestamp(creationTime.toEpochMilli()));
+        } else {
+            statement.setNull(7,  Types.TIMESTAMP);
+        }
+        
+        final Instant deactivationTime = entry.getDeactivationTime();
+        if (deactivationTime != null) {
+            statement.setTimestamp(8, new Timestamp(deactivationTime.toEpochMilli()));
         } else {
             statement.setNull(8, Types.TIMESTAMP);
         }
+        
         statement.executeUpdate();
     }
     
@@ -941,12 +956,19 @@ public class JDBCPairwiseIdStore extends AbstractInitializableComponent implemen
             connection.setAutoCommit(autoCommit);
             connection.setTransactionIsolation(transactionIsolation);
             if (readWriteLock != null) {
+                final Lock tlock;
                 if (writeLock) {
-                    threadLock = readWriteLock.writeLock();
+                    tlock = readWriteLock.writeLock();
+                } else {
+                    tlock = readWriteLock.readLock();
+                }
+                if (tlock != null) {
+                    threadLock = tlock;
+                    threadLock.lock();
                 } else {
-                    threadLock = readWriteLock.readLock();
+                    log.error("Unable to get local lock");
+                    threadLock = null;
                 }
-                threadLock.lock();
             } else {
                 threadLock = null;
             }
diff --git a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeRegistryServiceStrategy.java b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeRegistryServiceStrategy.java
index bb26029b7..79e22ee8b 100644
--- a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeRegistryServiceStrategy.java
+++ b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeRegistryServiceStrategy.java
@@ -97,6 +97,10 @@ public class AttributeRegistryServiceStrategy extends AbstractIdentifiableInitia
     @Nullable public AbstractServiceableComponent<AttributeTranscoderRegistry> apply(
             @Nullable final ApplicationContext appContext) {
         
+        if (appContext == null) {
+            throw new ServiceException("ApplicationContext was null");
+        }
+        
         final Collection<TranscodingRule> mappingBeans = appContext.getBeansOfType(TranscodingRule.class).values();
         final Collection<TranscodingRuleLoader> loaderBeans =
                 appContext.getBeansOfType(TranscodingRuleLoader.class).values();
diff --git a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
index 55bc27dc6..ebc9efb84 100644
--- a/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
+++ b/shib-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
@@ -34,6 +34,7 @@ import javax.annotation.concurrent.ThreadSafe;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
@@ -268,14 +269,19 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
 
         final List<AttributeTranscoder<?>> transcoders = new ArrayList<>();
         
-        for (final String id :StringSupport.stringToList(beanNames, " ")) {
-            try {
-                transcoder = getApplicationContext().getBean(id, AttributeTranscoder.class);
-                transcoder.initialize();
-                transcoders.add(transcoder);
-            } catch (final Exception e) {
-                log.error("Unable to locate AttributeTranscoder bean named {}", id, e);
+        final ApplicationContext appContext = getApplicationContext();
+        if (appContext != null) {
+            for (final String id : StringSupport.stringToList(beanNames, " ")) {
+                try {
+                    transcoder = appContext.getBean(id, AttributeTranscoder.class);
+                    transcoder.initialize();
+                    transcoders.add(transcoder);
+                } catch (final Exception e) {
+                    log.error("Unable to locate AttributeTranscoder bean named {}", id, e);
+                }
             }
+        } else {
+            log.error("Unable to locate AttributeTranscoder beans, ApplicationContext was null");
         }
         
         return transcoders;
@@ -299,8 +305,14 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
         final String targetName = transcoder.getEncodedName(copy);
         if (targetName != null) {
             
-            final boolean encoder = copy.getOrDefault(PROP_ENCODER, Boolean.class, true);
-            final boolean decoder = copy.getOrDefault(PROP_DECODER, Boolean.class, true);
+            Boolean encoder = copy.getOrDefault(PROP_ENCODER, Boolean.class, true);
+            if (encoder == null) {
+                encoder = true;
+            }
+            Boolean decoder = copy.getOrDefault(PROP_DECODER, Boolean.class, true);
+            if (decoder == null) {
+                decoder = true;
+            }
             if (!encoder && !decoder) {
                 log.warn("Transcoding rule for {} and type {} was disabled in both directions, ignoring",
                         id, type.getName());
@@ -367,7 +379,12 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
             effectiveCondition = (Predicate<ProfileRequestContext>) baseCondition;
         } else if (baseCondition instanceof String) {
             try {
-                effectiveCondition = getApplicationContext().getBean((String) baseCondition, Predicate.class);
+                final ApplicationContext appContext = getApplicationContext();
+                if (appContext != null) {
+                    effectiveCondition = appContext.getBean((String) baseCondition, Predicate.class);
+                } else {
+                    log.error("Unable to locate Predicate bean named {}, ApplicationContext was null", baseCondition);
+                }
             } catch (final Exception e) {
                 log.error("Unable to locate Predicate bean named {}", baseCondition, e);
             }
diff --git a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStoreTest.java b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStoreTest.java
index e237557fc..318845688 100644
--- a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStoreTest.java
+++ b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/ComputedPairwiseIdStoreTest.java
@@ -20,8 +20,11 @@ package net.shibboleth.idp.attribute.impl;
 import java.io.IOException;
 import java.util.Collections;
 
+import javax.annotation.Nonnull;
+
 import net.shibboleth.idp.attribute.PairwiseId;
 import net.shibboleth.idp.attribute.impl.ComputedPairwiseIdStore.Encoding;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.codec.Base64Support;
 import net.shibboleth.shared.codec.EncodingException;
 import net.shibboleth.shared.component.ComponentInitializationException;
@@ -35,24 +38,24 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class ComputedPairwiseIdStoreTest {
 
-    public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
+    @Nonnull @NotEmpty public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
 
-    public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
+    @Nonnull @NotEmpty public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
 
     /** Value calculated using V2 version. DO NOT CHANGE WITHOUT TESTING AGAINST 2.0 */
-    private static final String RESULT = "Vl6z6K70iLc4AuBoNeb59Dj1rGw=";
+    @Nonnull @NotEmpty private static final String RESULT = "Vl6z6K70iLc4AuBoNeb59Dj1rGw=";
 
-    private static final String RESULT2 = "kLyH1uEvYigEvg1ZLh/QXeW1VAs=";
+    @Nonnull @NotEmpty private static final String RESULT2 = "kLyH1uEvYigEvg1ZLh/QXeW1VAs=";
 
-    private static final String B32RESULT = "KZPLH2FO6SELOOAC4BUDLZXZ6Q4PLLDM";
+    @Nonnull @NotEmpty private static final String B32RESULT = "KZPLH2FO6SELOOAC4BUDLZXZ6Q4PLLDM";
 
-    private static final byte salt[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+    @Nonnull private static final byte salt[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
 
-    private static final String salt2 = "thisisaspecialsalt";
+    @Nonnull @NotEmpty private static final String salt2 = "thisisaspecialsalt";
     
-    private static final String INVALID_BASE64_SALT="AB==";
+    @Nonnull @NotEmpty private static final String INVALID_BASE64_SALT = "AB==";
         
-    public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
+    @Nonnull @NotEmpty public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
     
     @Test(expectedExceptions = ComponentInitializationException.class)
     public void testInvalidConfig() throws ComponentInitializationException {
@@ -138,6 +141,7 @@ public class ComputedPairwiseIdStoreTest {
         pid = store.getBySourceValue(pid, true);
 
         Assert.assertNotNull(pid);
+        assert pid != null;
         Assert.assertEquals(pid.getPairwiseId(), RESULT);
     }
     
@@ -157,6 +161,7 @@ public class ComputedPairwiseIdStoreTest {
         pid = store.getBySourceValue(pid, true);
 
         Assert.assertNotNull(pid);
+        assert pid != null;
         Assert.assertEquals(pid.getPairwiseId(), RESULT2);
     }
 
@@ -175,6 +180,7 @@ public class ComputedPairwiseIdStoreTest {
         pid = store.getBySourceValue(pid, true);
 
         Assert.assertNotNull(pid);
+        assert pid != null;
         Assert.assertEquals(pid.getPairwiseId(), B32RESULT);
     }
    
diff --git a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStoreTest.java b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStoreTest.java
index 3266cb895..cdaeb2624 100644
--- a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStoreTest.java
+++ b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/impl/JDBCPairwiseIdStoreTest.java
@@ -27,10 +27,12 @@ import java.util.Objects;
 import java.util.UUID;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.sql.DataSource;
 
 import net.shibboleth.idp.attribute.PairwiseId;
 import net.shibboleth.idp.attribute.impl.JDBCPairwiseIdStore.ConnectionWithLock;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.component.UninitializedComponentException;
 import net.shibboleth.shared.component.UnmodifiableComponentException;
@@ -45,15 +47,15 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class JDBCPairwiseIdStoreTest {
 
-    private DataSource testSource;
+    @Nonnull @NotEmpty public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
+    @Nonnull @NotEmpty public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
+    @Nonnull @NotEmpty public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
 
-    public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
-    public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
-    public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
+    @Nonnull @NotEmpty public static final String INIT_FILE = "/net/shibboleth/idp/attribute/impl/StoredIdStore.sql";
+    @Nonnull @NotEmpty public static final String DELETE_FILE = "/net/shibboleth/idp/attribute/impl/DeleteStore.sql";
+
+    @Nullable private DataSource testSource;
 
-    public static final String INIT_FILE = "/net/shibboleth/idp/attribute/impl/StoredIdStore.sql";
-    public static final String DELETE_FILE = "/net/shibboleth/idp/attribute/impl/DeleteStore.sql";
-    
     @BeforeMethod
     public void setupSource() throws IOException, IOException  {
         testSource = DatabaseTestingSupport.GetMockDataSource(INIT_FILE, "PersistentIdStore");
@@ -72,6 +74,8 @@ public class JDBCPairwiseIdStoreTest {
         } catch (final ComponentInitializationException e) {
             // OK
         }
+        
+        assert testSource != null;
         store.setDataSource(testSource);
         
         Assert.assertEquals(store.getDataSource(), testSource);
@@ -87,7 +91,8 @@ public class JDBCPairwiseIdStoreTest {
         
         store.initialize();
         try {
-            store.setDataSource(null);
+            assert testSource != null;
+            store.setDataSource(testSource);
             Assert.fail("work after initialize");
         } catch (final UnmodifiableComponentException e) {
             // OK
@@ -124,6 +129,7 @@ public class JDBCPairwiseIdStoreTest {
 
     public void storeEntry(final int isolateLevel, final boolean localLock) throws ComponentInitializationException, IOException, SQLException {
         final JDBCPairwiseIdStore store = new JDBCPairwiseIdStore();
+        assert testSource != null;
         store.setDataSource(testSource);
         store.setVerifyDatabase(true);
         store.setTransactionIsolation(isolateLevel);
@@ -150,6 +156,7 @@ public class JDBCPairwiseIdStoreTest {
         id2.setRecipientEntityID(SP_ENTITY_ID);
         id2.setPairwiseId(persistentId);
         id2 = store.getByIssuedValue(id2);
+        assert id2 != null;
         
         Assert.assertNull(id2.getDeactivationTime());
         Assert.assertTrue(comparePersistentIdEntrys(id2, id));
@@ -158,6 +165,7 @@ public class JDBCPairwiseIdStoreTest {
         store.deactivate(id);
         
         id2 = store.getByIssuedValue(id2);
+        assert id2 != null;
         
         Assert.assertNotNull(id2.getDeactivationTime());
         Assert.assertTrue(comparePersistentIdEntrys(id2, id));
@@ -180,6 +188,8 @@ public class JDBCPairwiseIdStoreTest {
         id3.setRecipientEntityID(SP_ENTITY_ID + "2");
         id3.setPairwiseId(persistentId);
         id3 = store.getByIssuedValue(id3);
+        assert id3 != null;
+        
         Assert.assertNull(id3.getDeactivationTime());
         Assert.assertTrue(comparePersistentIdEntrys(id3, id));
     }
diff --git a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
index 1fae929fe..125a5db3d 100644
--- a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
+++ b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
@@ -63,7 +63,13 @@ public class AttributeTranscoderRegistryImplTest {
         final NamingFunction nf = new BasicNamingFunction<>(Pair.class,
                 new Function<Pair,String>() {
                     public String apply(final Pair p) {
-                        return "{Pair}" + p.getFirst().toString();
+                        if (p != null) {
+                            final Object obj = p.getFirst();
+                            if (obj != null) {
+                                return "{Pair}" + obj.toString();
+                            }
+                        }
+                        return null;
                     }
             });
         registry.setNamingRegistry(Collections.singletonList(nf));
diff --git a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/PairTranscoder.java b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/PairTranscoder.java
index ae35f85db..8c697255b 100644
--- a/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/PairTranscoder.java
+++ b/shib-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/PairTranscoder.java
@@ -20,6 +20,9 @@ package net.shibboleth.idp.attribute.transcoding.impl;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.attribute.AttributeDecodingException;
@@ -40,12 +43,12 @@ import net.shibboleth.shared.primitive.StringSupport;
 public class PairTranscoder extends AbstractAttributeTranscoder<Pair> {
 
     /** {@inheritDoc} */
-    public Class<Pair> getEncodedType() {
+    @Nonnull public Class<Pair> getEncodedType() {
         return Pair.class;
     }
 
     /** {@inheritDoc} */
-    public String getEncodedName(TranscodingRule rule) {
+    public String getEncodedName(@Nonnull TranscodingRule rule) {
         final String name = rule.get("name", String.class);
         if (name != null) {
             return "{Pair}" + name;
@@ -55,8 +58,8 @@ public class PairTranscoder extends AbstractAttributeTranscoder<Pair> {
 
     /** {@inheritDoc} */
     @Override
-    public Pair doEncode(ProfileRequestContext profileRequestContext, IdPAttribute attribute, Class<? extends Pair> to, TranscodingRule rule)
-            throws AttributeEncodingException {
+    public Pair doEncode(@Nullable final ProfileRequestContext profileRequestContext, @Nonnull final IdPAttribute attribute,
+            @Nonnull final Class<? extends Pair> to, @Nonnull final TranscodingRule rule) throws AttributeEncodingException {
         
         final String name = StringSupport.trimOrNull(rule.get("name", String.class));
         if (name == null) {
@@ -76,8 +79,8 @@ public class PairTranscoder extends AbstractAttributeTranscoder<Pair> {
 
     /** {@inheritDoc} */
     @Override
-    public IdPAttribute doDecode(ProfileRequestContext profileRequestContext, Pair input, TranscodingRule rule)
-            throws AttributeDecodingException {
+    public IdPAttribute doDecode(@Nullable final ProfileRequestContext profileRequestContext, at Nonnull final Pair input,
+            @Nonnull final TranscodingRule rule) throws AttributeDecodingException {
        
         final String id = StringSupport.trimOrNull(rule.get(AttributeTranscoderRegistry.PROP_ID, String.class));
         if (id == null) {

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


More information about the commits mailing list