[java-oidc-common] branch main updated: Round of null cleanup.

Henri Mikkonen henri.mikkonen at iki.fi
Tue Apr 2 06:24:21 UTC 2024


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

hjmikkon pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=08a7c27aa5398ed79af77db96cb3e0c2a7abc6ea

The following commit(s) were added to refs/heads/main by this push:
     new 08a7c27  Round of null cleanup.
08a7c27 is described below

commit 08a7c27aa5398ed79af77db96cb3e0c2a7abc6ea
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Tue Apr 2 09:24:14 2024 +0300

    Round of null cleanup.
---
 .../impl/OIDCByteAttributeTranscoder.java          |  6 ++--
 .../impl/OIDCScopedStringAttributeTranscoder.java  |  4 ++-
 .../impl/OIDCStringAttributeTranscoder.java        | 23 +++++++++-----
 .../impl/OIDCByteAttributeTranscoderTest.java      |  7 ++--
 .../OIDCScopedStringAttributeTranscoderTest.java   |  9 ++++++
 .../impl/OIDCStringAttributeTranscoderTest.java    |  6 ++++
 .../descriptors/EncryptionA128CBCHS256.java        |  4 ++-
 .../algorithm/descriptors/EncryptionA128GCM.java   |  4 ++-
 .../descriptors/EncryptionA192CBCHS384.java        |  4 ++-
 .../algorithm/descriptors/EncryptionA192GCM.java   |  4 ++-
 .../descriptors/EncryptionA256CBCHS512.java        |  4 ++-
 .../algorithm/descriptors/EncryptionA256GCM.java   |  4 ++-
 .../algorithm/descriptors/KeyTransportRSA15.java   |  4 ++-
 .../algorithm/descriptors/KeyTransportRSAOAEP.java |  4 ++-
 .../descriptors/KeyTransportRSAOAEP256.java        |  4 ++-
 .../descriptors/KeyTransportRSAOAEP384.java        |  4 ++-
 .../descriptors/KeyTransportRSAOAEP512.java        |  4 ++-
 .../net/shibboleth/oidc/jwk/RemoteJwkSetCache.java |  4 ++-
 .../oidc/jwk/support/RemoteJwkUtils.java           |  6 +++-
 .../shibboleth/oidc/security/JWSAssemblyUtils.java |  9 ++++--
 ...piringJWTSharedSecretCredentialFactoryBean.java |  8 +++--
 .../credential/BasicJWKCredentialFactoryBean.java  | 26 ++++++++++++---
 .../credential/DefaultClientSecretCredential.java  |  8 ++---
 .../security/credential/JWACredentialSupport.java  |  4 ++-
 .../security/credential/JWKCredentialSupport.java  | 12 ++++---
 .../shibboleth/oidc/jwk/RemoteJwkSetCacheTest.java |  2 +-
 .../credential/JWACredentialSupportTest.java       |  1 +
 ...bstractClientInformationCredentialResolver.java | 14 +++++---
 .../impl/BasicJOSEObjectCredentialResolver.java    | 37 +++++++++++++++-------
 ...tInformationClientSecretCredentialResolver.java |  5 ---
 .../oidc/metadata/MetadataManagementData.java      |  2 +-
 .../ProviderMetadataProviderContainer.java         |  6 +++-
 .../RelyingPartyClientInformationProvider.java     |  6 +++-
 .../ext/impl/provider/InlineJwksProvider.java      | 15 +++++++--
 .../MetadataPolicyViaLocationFetchingStrategy.java |  1 +
 .../ClientInformationResolverServiceStrategy.java  |  4 ++-
 .../ProviderMetadataResolverServiceStrategy.java   |  4 ++-
 .../impl/OIDCMetadataPolicyResolverTest.java       |  5 ++-
 ...loadClientResolverServiceConfigurationTest.java |  4 ++-
 ...erMetadataResolverServiceConfigurationTest.java |  4 ++-
 40 files changed, 206 insertions(+), 80 deletions(-)

diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
index 3703de8..662c306 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoder.java
@@ -57,10 +57,10 @@ public class OIDCByteAttributeTranscoder extends AbstractOIDCAttributeTranscoder
         String attributeString = "";
         final JSONArray array = new JSONArray();
         for (final IdPAttributeValue value : attribute.getValues()) {
-            if (value instanceof ByteAttributeValue && ((ByteAttributeValue) value).getValue() != null) {
+            if (value instanceof ByteAttributeValue byteAttrValue) {
                 if (asInteger) {
                     final JSONArray innerArray = new JSONArray();
-                    for (final byte byteValue : ((ByteAttributeValue) value).getValue()) {
+                    for (final byte byteValue : byteAttrValue.getValue()) {
                         innerArray.add((int) byteValue);
                     }
                     // each byte array is converted to JSON int array and placed into JSON array.
@@ -71,7 +71,7 @@ public class OIDCByteAttributeTranscoder extends AbstractOIDCAttributeTranscoder
                     }
                     try {
                         attributeString +=
-                                Base64Support.encode(((ByteAttributeValue) value).getValue(), Base64Support.UNCHUNKED);
+                                Base64Support.encode(byteAttrValue.getValue(), Base64Support.UNCHUNKED);
                     } catch (final EncodingException e) {
                         //convert exception and throw if any of the values can not be base64 encoded
                         throw new AttributeEncodingException("Attribtue value could not be base64 encoded",e);
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
index e9705d0..18c6aad 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoder.java
@@ -115,8 +115,10 @@ public class OIDCScopedStringAttributeTranscoder extends AbstractOIDCAttributeTr
                 log.warn("Ignoring value '{}' with no scope delimiter ({})", stringValue, scopeDelimiter);
                 return CollectionSupport.emptyList();
             }
+            final String scope = stringValue.substring(offset + scopeDelimiter.length());
+            assert scope != null;
             return CollectionSupport.listOf(ScopedStringAttributeValue.valueOf(stringValue.substring(0, offset), 
-                    stringValue.substring(offset + scopeDelimiter.length())));
+                    scope));
         } else if (input instanceof JSONArray) {
             // Deal with array recursively
             final JSONArray array = (JSONArray)input;
diff --git a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
index 32c2460..268cc8a 100644
--- a/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
+++ b/oidc-common-attribute-impl/src/main/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoder.java
@@ -91,13 +91,16 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
         if (attribute.getValues().isEmpty()) {
             return null;
         }
-        
-        final List<?> values = transformValues(rule,
-                attribute.getValues()
-                    .stream()
-                    .filter(StringAttributeValue.class::isInstance)
-                    .map(StringAttributeValue.class::cast)
-                    .map(StringAttributeValue::getValue));
+
+        final Stream<String> valuesStream = attribute.getValues()
+                .stream()
+                .filter(StringAttributeValue.class::isInstance)
+                .map(StringAttributeValue.class::cast)
+                .map(StringAttributeValue::getValue);
+        if (valuesStream == null) {
+            return null;
+        }
+        final List<?> values = transformValues(rule, valuesStream);
         
         // Handle String values parsed into JSON.
         final Boolean asObject = rule.getOrDefault(PROP_ASOBJECT, Boolean.class, false);
@@ -235,11 +238,15 @@ public class OIDCStringAttributeTranscoder extends AbstractOIDCAttributeTranscod
      */
     @Nonnull private Object toJSONObject(@Nonnull @NotEmpty final String value) throws AttributeEncodingException {
         try {
-            return new JSONParser(JSONParser.MODE_PERMISSIVE).parse(value);
+            final Object parsedObject = new JSONParser(JSONParser.MODE_PERMISSIVE).parse(value);
+            if (parsedObject != null) {
+                return parsedObject;
+            }
         } catch (final ParseException e) {
             log.trace("Unable to parse string '{}' into JSONObject", value, e);
             throw new AttributeEncodingException("Unable to parse string into JSONObject", e);
         }
+        throw new AttributeEncodingException("Unable to parse string into JSONObject: parser returned null object");
     }
 
     /**
diff --git a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoderTest.java b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoderTest.java
index eba29a4..c409f7a 100644
--- a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoderTest.java
+++ b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCByteAttributeTranscoderTest.java
@@ -83,7 +83,8 @@ public class OIDCByteAttributeTranscoderTest {
 
     @Test(expectedExceptions=AttributeEncodingException.class)
     public void testNoValues() throws ComponentInitializationException, AttributeEncodingException {
-        
+
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -101,6 +102,7 @@ public class OIDCByteAttributeTranscoderTest {
     @Test
     public void testEncoding() throws ComponentInitializationException, AttributeEncodingException, DecodingException {
 
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -121,7 +123,7 @@ public class OIDCByteAttributeTranscoderTest {
                 null, inputAttribute, JSONObject.class, tr);
         assert object != null;
         final String base64Coded = (String) object.get(ATTR_NAME);
-        Assert.assertEquals(bytes, Base64Support.decode(base64Coded));
+        Assert.assertEquals(bytes, base64Coded == null ? null : Base64Support.decode(base64Coded));
     }
     
     @Test
@@ -159,6 +161,7 @@ public class OIDCByteAttributeTranscoderTest {
 
     @Test(expectedExceptions=AttributeEncodingException.class)
     public void testEncodingWrongType() throws ComponentInitializationException, AttributeEncodingException {
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
diff --git a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoderTest.java b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoderTest.java
index 2bd95ac..a790ffe 100644
--- a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoderTest.java
+++ b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCScopedStringAttributeTranscoderTest.java
@@ -106,6 +106,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testEncoding() throws ComponentInitializationException, AttributeEncodingException {
 
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -139,6 +140,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
         ruleset.put(OIDCAttributeTranscoder.PROP_ASARRAY, true);
         ruleset.put(OIDCScopedStringAttributeTranscoder.PROP_SCOPE_DELIMITER, ":");
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -169,6 +171,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test(expectedExceptions=AttributeEncodingException.class)
     public void testEncodingWrongType() throws ComponentInitializationException, AttributeEncodingException {
 
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -192,6 +195,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testDecodingNoValues() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -216,6 +220,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testDecodingScopedString() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -275,6 +280,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testDecodingUnScopedString() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -300,6 +306,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testDecodingWrongType() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -359,6 +366,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     @Test
     public void testDecodingComplexArray() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -396,6 +404,7 @@ public class OIDCScopedStringAttributeTranscoderTest {
     public void testDecodingComplexArray_NumberNotSupported() 
             throws ComponentInitializationException, AttributeDecodingException {
 
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
diff --git a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoderTest.java b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoderTest.java
index 4753f5f..f7ccb07 100644
--- a/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoderTest.java
+++ b/oidc-common-attribute-impl/src/test/java/net/shibboleth/oidc/attribute/transcoding/impl/OIDCStringAttributeTranscoderTest.java
@@ -247,6 +247,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test(expectedExceptions=AttributeEncodingException.class)
     public void testEncodingWrongType() throws ComponentInitializationException, AttributeEncodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();
@@ -269,6 +270,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test
     public void testDecodingString() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -295,6 +297,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test
     public void testDecodingNoValues() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -320,6 +323,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test
     public void testDecodingWrongType_ClaimsRequest() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -348,6 +352,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test
     public void testDecodingStringArray() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
@@ -719,6 +724,7 @@ public class OIDCStringAttributeTranscoderTest {
     @Test
     public void testDecodingWrongType() throws ComponentInitializationException, AttributeDecodingException {
         
+        assert ruleset != null;
         registry.setTranscoderRegistry(CollectionSupport.singletonList(new TranscodingRule(ruleset)));
         registry.setApplicationContext(new MockApplicationContext());        
         registry.initialize();        
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128CBCHS256.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128CBCHS256.java
index 5b5c5a2..5ab1cc9 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128CBCHS256.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128CBCHS256.java
@@ -48,7 +48,9 @@ public final class EncryptionA128CBCHS256 implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128GCM.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128GCM.java
index c4cfc9c..37a78cb 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128GCM.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA128GCM.java
@@ -47,7 +47,9 @@ public final class EncryptionA128GCM implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192CBCHS384.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192CBCHS384.java
index 89f9341..b902009 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192CBCHS384.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192CBCHS384.java
@@ -48,7 +48,9 @@ public final class EncryptionA192CBCHS384 implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192GCM.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192GCM.java
index cba0db8..f41e66e 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192GCM.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA192GCM.java
@@ -47,7 +47,9 @@ public final class EncryptionA192GCM implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256CBCHS512.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256CBCHS512.java
index 5788542..0b1998c 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256CBCHS512.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256CBCHS512.java
@@ -48,7 +48,9 @@ public final class EncryptionA256CBCHS512 implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256GCM.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256GCM.java
index 5d205b7..d2d471c 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256GCM.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/EncryptionA256GCM.java
@@ -47,7 +47,9 @@ public final class EncryptionA256GCM implements BlockEncryptionAlgorithm {
     /** {@inheritDoc} */
     @Nonnull
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSA15.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSA15.java
index 0c1cec8..d89113e 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSA15.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSA15.java
@@ -52,7 +52,9 @@ public class KeyTransportRSA15 implements KeyTransportAlgorithm {
     @Nonnull
     @NotEmpty
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP.java
index c99b931..e776d30 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP.java
@@ -53,7 +53,9 @@ public class KeyTransportRSAOAEP implements KeyTransportAlgorithm {
     @Nonnull
     @NotEmpty
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP256.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP256.java
index e9fb94a..1d9f96e 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP256.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP256.java
@@ -53,7 +53,9 @@ public class KeyTransportRSAOAEP256 implements KeyTransportAlgorithm {
     @Nonnull
     @NotEmpty
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP384.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP384.java
index 4050bef..b14a888 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP384.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP384.java
@@ -54,7 +54,9 @@ public class KeyTransportRSAOAEP384 implements KeyTransportAlgorithm {
     @Nonnull
     @NotEmpty
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP512.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP512.java
index 5f768fa..1ba284a 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP512.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwa/algorithm/descriptors/KeyTransportRSAOAEP512.java
@@ -55,7 +55,9 @@ public class KeyTransportRSAOAEP512 implements KeyTransportAlgorithm {
     @Nonnull
     @NotEmpty
     public String getJCAAlgorithmID() {
-        return String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        final String result = String.format("%s/%s/%s", getKey(), getCipherMode(), getPadding());
+        assert result != null;
+        return result;
     }
 
     /** {@inheritDoc} */
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/RemoteJwkSetCache.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/RemoteJwkSetCache.java
index 17fdb62..93aa811 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/RemoteJwkSetCache.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/RemoteJwkSetCache.java
@@ -199,7 +199,9 @@ public class RemoteJwkSetCache extends AbstractIdentifiableInitializableComponen
             final JWKSet remoteJwkSet = RemoteJwkUtils.fetchRemoteJwkSet("RemoteJwkSetCache", uri, httpClient, 
                     httpClientSecurityParameters);
             if (remoteJwkSet != null && remoteJwkSet.getKeys() != null && !remoteJwkSet.getKeys().isEmpty()) {
-                storage.create(context, cacheKey, remoteJwkSet.toString(), expires.toEpochMilli());
+                final String value = remoteJwkSet.toString();
+                assert value != null;
+                storage.create(context, cacheKey, value, expires.toEpochMilli());
                 return remoteJwkSet;
             } else {
                 log.warn("Could not find any remote keys from {}", cacheKey);
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/support/RemoteJwkUtils.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/support/RemoteJwkUtils.java
index 2ab74c9..6b01131 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/support/RemoteJwkUtils.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/jwk/support/RemoteJwkUtils.java
@@ -60,12 +60,16 @@ public final class RemoteJwkUtils {
             final HttpClientSecurityParameters httpClientSecurityParameters) {
         final Logger log = LoggerFactory.getLogger(RemoteJwkUtils.class);
         final ClassicHttpRequest get = ClassicRequestBuilder.get().setUri(uri).build();
+        assert get != null;
         final HttpClientContext clientContext = HttpClientContext.create();
+        assert clientContext != null;
         HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, true);
         HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, get);
         final String output;
         try (final ClassicHttpResponse response = httpClient.executeOpen(null, get, clientContext)) {
-            HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, get.getUri().getScheme());
+            final String scheme = get.getUri().getScheme();
+            assert scheme != null;
+            HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, scheme);
             if (response == null) {
                 log.error("{} Could not get the JWK contents from {}", logPrefix, uri);
                 return null;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
index 03563d6..1e785f7 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
@@ -68,8 +68,9 @@ public final class JWSAssemblyUtils {
             @Nonnull final JWTClaimsSet claimsSet, @Nonnull final byte[] secret) throws 
                     EncodingException, JOSEException, ParseException {
 
-        return assembleMacJws(algorithm,claimsSet,secret).serialize();
-        
+        final String result = assembleMacJws(algorithm,claimsSet,secret).serialize();
+        assert result != null;
+        return result;
     }
     
     /**
@@ -129,7 +130,9 @@ public final class JWSAssemblyUtils {
      * @return the UTF-8 byte representation of the secret.
      */
     @Nonnull public static byte[] getSecretBytes(@Nonnull final String secret) {
-        return secret.getBytes(StandardCharsets.UTF_8);
+        final byte[] result = secret.getBytes(StandardCharsets.UTF_8);
+        assert result != null;
+        return result;
     }
     
     /**
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
index f21851a..d974dc4 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
@@ -59,7 +59,9 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean
     
     /** Constructor.*/
     public BasicExpiringJWTSharedSecretCredentialFactoryBean() {
-        credentialExpiresAt = Duration.ZERO;
+        final Duration zero = Duration.ZERO;
+        assert zero != null;
+        credentialExpiresAt = zero;
         jcaAlg = "AES";
     }
     
@@ -119,7 +121,9 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean
         jwkCredential.setEntityId(getEntityID());
         jwkCredential.setAlgorithm(alg);
         if (getUsageType() != null) {
-            jwkCredential.setUsageType(Enums.getIfPresent(UsageType.class, getUsageType()).or(UsageType.UNSPECIFIED));
+            final UsageType usageType = Enums.getIfPresent(UsageType.class, getUsageType()).or(UsageType.UNSPECIFIED);
+            assert usageType != null;
+            jwkCredential.setUsageType(usageType);
         } else {
             jwkCredential.setUsageType(UsageType.UNSPECIFIED);
         }
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
index b343c5b..71d0e9a 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
@@ -16,11 +16,14 @@ package net.shibboleth.oidc.security.credential;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.PrivateKey;
+import java.security.PublicKey;
 import java.text.ParseException;
 import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.crypto.SecretKey;
 
 import org.opensaml.spring.credential.AbstractCredentialFactoryBean;
 import org.slf4j.Logger;
@@ -112,13 +115,26 @@ public class BasicJWKCredentialFactoryBean extends AbstractCredentialFactoryBean
         try (final InputStream is = localResource.getInputStream()) {
             jwk = JWK.parse(new String(ByteStreams.toByteArray(is)));
             jwkCredential = new BasicJWKCredential();
-            if (jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA) {
+            if ((jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA) &&
+                    jwk instanceof AsymmetricJWK asymmetricJwk) {
                 if (jwk.isPrivate()) {
-                    jwkCredential.setPrivateKey(((AsymmetricJWK) jwk).toPrivateKey());
+                    final PrivateKey privateKey = asymmetricJwk.toPrivateKey();
+                    if (privateKey == null) {
+                        throw new BeanCreationException("Private Key was null in " + localResource.getDescription());
+                    }
+                    jwkCredential.setPrivateKey(privateKey);
                 }
-                jwkCredential.setPublicKey(((AsymmetricJWK) jwk).toPublicKey());
-            } else if (jwk.getKeyType() == KeyType.OCT) {
-                jwkCredential.setSecretKey(((OctetSequenceKey) jwk).toSecretKey(symmetricKeyAlgorithm));
+                final PublicKey publicKey = asymmetricJwk.toPublicKey();
+                if (publicKey == null) {
+                    throw new BeanCreationException("Public Key was null in " + localResource.getDescription());
+                }
+                jwkCredential.setPublicKey(publicKey);
+            } else if (jwk.getKeyType() == KeyType.OCT && jwk instanceof OctetSequenceKey octetSequeceKey) {
+                final SecretKey secretKey = octetSequeceKey.toSecretKey(symmetricKeyAlgorithm);
+                if (secretKey == null) {
+                    throw new BeanCreationException("Public Key was null in " + localResource.getDescription());
+                }
+                jwkCredential.setSecretKey(secretKey);
             } else {
                 throw new BeanCreationException("Unsupported KeyFile at " + localResource.getDescription());
             }
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
index 2474c82..97db57b 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
@@ -56,9 +56,7 @@ public class DefaultClientSecretCredential implements ClientSecretCredential {
      * @param secret the client_secret
      */
     public DefaultClientSecretCredential(@Nonnull final String secret) {
-        Constraint.isNotEmpty(secret, "Secret can not be null or empty");
-        clientSecret = secret.getBytes(StandardCharset.UTF_8);
-        secretKeyName = DEFAULT_SECRET_KEY_NAME;
+        this(secret, DEFAULT_SECRET_KEY_NAME);
     }
     
     /**
@@ -70,7 +68,9 @@ public class DefaultClientSecretCredential implements ClientSecretCredential {
      */
     public DefaultClientSecretCredential(@Nonnull final String secret, @Nonnull final String keyName) {
         Constraint.isNotEmpty(secret, "Secret can not be null or empty");
-        clientSecret = secret.getBytes(StandardCharset.UTF_8);
+        final byte[] bytes = secret.getBytes(StandardCharset.UTF_8);
+        assert bytes != null;
+        clientSecret = bytes;
         secretKeyName = Constraint.isNotEmpty(keyName, "Secret keyname can not be null or empty");
     }
     
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWACredentialSupport.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWACredentialSupport.java
index dabb718..a73c3d1 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWACredentialSupport.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWACredentialSupport.java
@@ -84,7 +84,9 @@ public final class JWACredentialSupport {
      */
     public static boolean keySupportsCurve(@Nonnull final ECKey key, 
             @Nonnull @NotEmpty final String algorithm) throws JOSEException {
-        return keySupportsCurve(key, JWSAlgorithm.parse(algorithm));
+        final JWSAlgorithm alg = JWSAlgorithm.parse(algorithm);
+        assert alg != null;
+        return keySupportsCurve(key, alg);
     }
     
     /**
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
index ca7e2b5..6fb0617 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
@@ -59,8 +59,10 @@ public final class JWKCredentialSupport {
         if (skey == null) {
             return null;
         }
-        
-        final SecretKey derivedKey = generateSymmetricKey(skey.getEncoded(), alg, enc);
+
+        final byte[] encoded = skey.getEncoded();
+        assert encoded != null;
+        final SecretKey derivedKey = generateSymmetricKey(encoded, alg, enc);
         //build a new credential so the old is left in its original state
         return CredentialConversionUtil.copySymmetricCredentialWithNewSecret(
                 credential, "derived-"+CredentialConversionUtil.resolveKid(credential), derivedKey);
@@ -80,8 +82,10 @@ public final class JWKCredentialSupport {
     @Nonnull public static final SecretKey generateSymmetricKey(@Nonnull final byte[] clientSecret,
             @Nonnull final JWEAlgorithm alg, @Nonnull final EncryptionMethod enc) throws JOSEException {
         
-        return SecretKeyDerivation.deriveSecretKey(
-                new Secret(new String(clientSecret, StandardCharset.UTF_8)), alg, enc);        
+        final SecretKey result = SecretKeyDerivation.deriveSecretKey(
+                new Secret(new String(clientSecret, StandardCharset.UTF_8)), alg, enc);
+        assert result != null;
+        return result;
     }
     
     /**
diff --git a/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/jwk/RemoteJwkSetCacheTest.java b/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/jwk/RemoteJwkSetCacheTest.java
index 3c305cc..4631bde 100644
--- a/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/jwk/RemoteJwkSetCacheTest.java
+++ b/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/jwk/RemoteJwkSetCacheTest.java
@@ -41,7 +41,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 /**
  * Unit tests for {@link RemoteJwkSetCache}.
  */
- at SuppressWarnings("javadoc")
+ at SuppressWarnings({"javadoc", "null"})
 public class RemoteJwkSetCacheTest {
     
     RemoteJwkSetCache jwkSetCache;
diff --git a/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/security/credential/JWACredentialSupportTest.java b/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/security/credential/JWACredentialSupportTest.java
index 8554846..76b0a5e 100644
--- a/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/security/credential/JWACredentialSupportTest.java
+++ b/oidc-common-crypto-api/src/test/java/net/shibboleth/oidc/security/credential/JWACredentialSupportTest.java
@@ -16,6 +16,7 @@ import com.nimbusds.jose.jwk.gen.ECKeyGenerator;
 import com.nimbusds.jose.jwk.gen.RSAKeyGenerator;
 
 /** Tests for {@link JWACredentialSupport}.*/
+ at SuppressWarnings("null")
 public class JWACredentialSupportTest {
     
     private ECKey key;
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/AbstractClientInformationCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/AbstractClientInformationCredentialResolver.java
index 2fa1138..a4362ad 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/AbstractClientInformationCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/AbstractClientInformationCredentialResolver.java
@@ -15,7 +15,6 @@
 package net.shibboleth.oidc.security.credential.impl;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashSet;
 
 import javax.annotation.Nonnull;
@@ -23,15 +22,17 @@ import javax.annotation.Nullable;
 
 import org.opensaml.security.credential.Credential;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import com.nimbusds.oauth2.sdk.auth.Secret;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
 import net.shibboleth.oidc.security.credential.ClientSecretCredential;
 import net.shibboleth.oidc.security.credential.DefaultClientSecretCredential;
 import net.shibboleth.oidc.security.jose.criterion.ClientInformationCriterion;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.component.InitializableComponent;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
 
@@ -72,11 +73,14 @@ public abstract class AbstractClientInformationCredentialResolver extends BasicJ
             final ClientInformationCriterion clientCrit = criteriaSet.get(ClientInformationCriterion.class);
             if (clientCrit != null) {
                 final OIDCClientInformation information = clientCrit.getOidcClientInformation();
-                if (information.getSecret() != null) {
+                final Secret secret = information.getSecret();
+                if (secret != null) {
+                    final String secretValue = secret.getValue();
+                    assert secretValue != null;
                     final LinkedHashSet<Credential> credentials = new LinkedHashSet<>(1);
                     try {
                         final ClientSecretCredential secretCred = 
-                                new DefaultClientSecretCredential(information.getSecret().getValue());
+                                new DefaultClientSecretCredential(secretValue);
                         final Credential derivedCredential = deriveClientSecretCredential(secretCred, criteriaSet);
                         if (derivedCredential != null) {
                             credentials.add(derivedCredential);
@@ -91,7 +95,7 @@ public abstract class AbstractClientInformationCredentialResolver extends BasicJ
         } else {
             log.debug("Criteria did not contain a ClientInformationCriterion could not perform resolution");
         }
-        return Collections.emptySet();
+        return CollectionSupport.emptySet();
     }
 
 }
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
index 3dbadc4..41b249c 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJOSEObjectCredentialResolver.java
@@ -14,6 +14,7 @@
 
 package net.shibboleth.oidc.security.credential.impl;
 
+import java.security.PublicKey;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -83,13 +84,13 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
         List<Credential> credentials = null;
         
         final Header header = joseObject.getHeader();
-        if (JWSHeader.class.isInstance(header)) {
-            credentials = processJWSHeader(JWSHeader.class.cast(header));
-        } else if (JWEHeader.class.isInstance(header)) {
-            credentials = processJWEHeader(JWEHeader.class.cast(header));           
+        if (header instanceof JWSHeader jwsHeader) {
+            credentials = processJWSHeader(jwsHeader);
+        } else if (header instanceof JWEHeader jweHeader) {
+            credentials = processJWEHeader(jweHeader);           
         } else {
             throw new ResolverException("Saw unknown JOSEObject header type: " +
-                    header != null ? header.getClass().getName() : "null");
+                    header.getClass().getName());
         }
         
         // Extension point for subclasses
@@ -129,8 +130,9 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
         final List<Credential> credentials = new ArrayList<>();
         
         // JWK
-        if (jwsHeader.getJWK() != null) {
-            final Credential cred = buildJWKCredential(jwsHeader.getJWK(), jwsHeader.getKeyID());
+        final JWK jwk = jwsHeader.getJWK();
+        if (jwk != null) {
+            final Credential cred = buildJWKCredential(jwk, jwsHeader.getKeyID());
             if (cred != null) {
                 credentials.add(cred);
             }
@@ -153,8 +155,9 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
         final List<Credential> credentials = new ArrayList<>();
         
         // JWK
-        if (jweHeader.getJWK() != null) {
-            final Credential cred = buildJWKCredential(jweHeader.getJWK(), jweHeader.getKeyID());
+        final JWK jwk = jweHeader.getJWK();
+        if (jwk != null) {
+            final Credential cred = buildJWKCredential(jwk, jweHeader.getKeyID());
             if (cred != null) {
                 credentials.add(cred);
             }
@@ -179,9 +182,15 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
             @Nonnull final JWK jwk, @Nullable final String headerKid) {
         
         final BasicJWKCredential credential = new BasicJWKCredential();
-        if (jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA) {
+        if ((jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA)
+                && jwk instanceof AsymmetricJWK asymmetricJwk) {
             try {
-                credential.setPublicKey(((AsymmetricJWK) jwk).toPublicKey());
+                final PublicKey publicKey = asymmetricJwk.toPublicKey();
+                if (publicKey != null) {
+                    credential.setPublicKey(publicKey);
+                } else {
+                    log.warn("Public key was null in JWK");
+                }
             } catch (final JOSEException e) {
                 log.warn("Could not parse public key from JWK", e);
                 return null;
@@ -306,8 +315,12 @@ public class BasicJOSEObjectCredentialResolver extends AbstractCriteriaFiltering
             // Can only derive symmetric key credentials, ignore if not
             if (JWEAlgorithm.Family.SYMMETRIC.contains(JWEAlgorithm.parse(alg.getAlgorithm()))) {                     
                 try {
+                    final JWEAlgorithm jweAlgorithm = JWEAlgorithm.parse(alg.getAlgorithm());
+                    final EncryptionMethod encryptionMethod = EncryptionMethod.parse(enc.getEncAlgorithm());
+                    assert jweAlgorithm != null;
+                    assert encryptionMethod != null;
                     final Credential derivedCred = secretCred.toEncryptionCredential(
-                            JWEAlgorithm.parse(alg.getAlgorithm()), EncryptionMethod.parse(enc.getEncAlgorithm()));
+                            jweAlgorithm, encryptionMethod);
                     
                     log.debug("Derived encryption credential '{}' from 'alg={}' and 'enc={}'", derivedCred.getKeyNames()
                             ,alg.getAlgorithm(), enc.getEncAlgorithm());
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ClientInformationClientSecretCredentialResolver.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ClientInformationClientSecretCredentialResolver.java
index 7cb7472..6a4af94 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ClientInformationClientSecretCredentialResolver.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/ClientInformationClientSecretCredentialResolver.java
@@ -19,8 +19,6 @@ import javax.annotation.Nullable;
 
 import org.opensaml.security.credential.Credential;
 import org.opensaml.security.credential.impl.AbstractCriteriaFilteringCredentialResolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.oidc.security.credential.ClientSecretCredential;
 import net.shibboleth.oidc.security.credential.JOSEObjectCredentialResolver;
@@ -36,9 +34,6 @@ import net.shibboleth.shared.resolver.ResolverException;
  */
 public class ClientInformationClientSecretCredentialResolver extends AbstractClientInformationCredentialResolver {
     
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(ClientInformationClientSecretCredentialResolver.class);
-        
     /** {@inheritDoc} */
     @Override @Nonnull
     protected Iterable<Credential> resolveFromSource(@Nullable final CriteriaSet criteriaSet) throws ResolverException {
diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/MetadataManagementData.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/MetadataManagementData.java
index c25f0d5..b29a883 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/MetadataManagementData.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/MetadataManagementData.java
@@ -49,7 +49,7 @@ public class MetadataManagementData<MetadataIdentifier> {
     private Instant lastAccessedTime;
     
     /** Read-write stamped lock which governs access to the metadata's backing store data. */
-    private final StampedLock stmpLock;
+    @Nonnull private final StampedLock stmpLock;
     
     /** Constructor. 
      * 
diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/ProviderMetadataProviderContainer.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/ProviderMetadataProviderContainer.java
index 168147a..2c49f6e 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/ProviderMetadataProviderContainer.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/ProviderMetadataProviderContainer.java
@@ -71,6 +71,8 @@ public class ProviderMetadataProviderContainer extends AbstractServiceableCompon
      * @return the parameter we got as a constructor
      */
     @Nonnull public ProviderMetadataResolver getEmbeddedResolver() {
+        ifNotInitializedThrowUninitializedComponentException();
+        assert resolver != null;
         return resolver;
     }
 
@@ -115,7 +117,9 @@ public class ProviderMetadataProviderContainer extends AbstractServiceableCompon
         if (equals(other)) {
             return 0;
         }
-        return getId().compareTo(other.getId());
+        final String id = getId();
+        assert id != null;
+        return id.compareTo(other.getId());
     }
 
     /**
diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/RelyingPartyClientInformationProvider.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/RelyingPartyClientInformationProvider.java
index 56afb32..01a1684 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/RelyingPartyClientInformationProvider.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/RelyingPartyClientInformationProvider.java
@@ -83,6 +83,8 @@ public class RelyingPartyClientInformationProvider extends AbstractServiceableCo
      */
     @Nonnull
     public ClientInformationResolver getEmbeddedResolver() {
+        ifNotInitializedThrowUninitializedComponentException();
+        assert resolver != null;
         return resolver;
     }
 
@@ -171,7 +173,9 @@ public class RelyingPartyClientInformationProvider extends AbstractServiceableCo
         if (equals(other)) {
             return 0;
         }
-        return getId().compareTo(other.getId());
+        final String id = getId();
+        assert id != null;
+        return id.compareTo(other.getId());
     }
 
     /**
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/keyinfo/ext/impl/provider/InlineJwksProvider.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/keyinfo/ext/impl/provider/InlineJwksProvider.java
index 983710c..8cfb40c 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/keyinfo/ext/impl/provider/InlineJwksProvider.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/keyinfo/ext/impl/provider/InlineJwksProvider.java
@@ -14,6 +14,7 @@
 
 package net.shibboleth.oidc.metadata.keyinfo.ext.impl.provider;
 
+import java.security.PublicKey;
 import java.text.ParseException;
 import java.util.Arrays;
 import java.util.Collection;
@@ -67,9 +68,11 @@ public class InlineJwksProvider extends AbstractKeyInfoProvider {
         if (jwksData == null || StringSupport.trimOrNull(jwksData.getValue()) == null) {
             return null;
         }
+        final String input = jwksData.getValue();
+        assert input != null;
         final String data;
         try {
-            data = new String(Base64Support.decode(jwksData.getValue()));
+            data = new String(Base64Support.decode(input));
         } catch (final DecodingException e) {
             log.error("Could not decode the JWKS data", e);
             return null;
@@ -96,9 +99,15 @@ public class InlineJwksProvider extends AbstractKeyInfoProvider {
     @Nonnull protected BasicJWKCredential buildCredential(@Nonnull final JWK jwk,
             @Nonnull final KeyInfoResolutionContext kiContext) {
         final BasicJWKCredential credential = new BasicJWKCredential();
-        if (jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA) {
+        if ((jwk.getKeyType() == KeyType.EC || jwk.getKeyType() == KeyType.RSA)
+                && jwk instanceof AsymmetricJWK asymmetricJwk) {
             try {
-                credential.setPublicKey(((AsymmetricJWK) jwk).toPublicKey());
+                final PublicKey publicKey = asymmetricJwk.toPublicKey();
+                if (publicKey != null) {
+                    credential.setPublicKey(publicKey);
+                } else {
+                    log.warn("Could not parse public key from JWK: public key is null");
+                }
             } catch (final JOSEException e) {
                 log.warn("Could not parse public key from JWK", e);
             }
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/MetadataPolicyViaLocationFetchingStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/MetadataPolicyViaLocationFetchingStrategy.java
index 54a628d..a1c8ff8 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/MetadataPolicyViaLocationFetchingStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/MetadataPolicyViaLocationFetchingStrategy.java
@@ -101,6 +101,7 @@ public class MetadataPolicyViaLocationFetchingStrategy
         }
         final String fileLocation = requestURL.startsWith("file:") ? requestURL.substring(5) : requestURL;
         final CacheLoadingContext context = new CacheLoadingContext(null, null);
+        assert fileLocation != null;
         final FileSystemResource resource = new FileSystemResource(fileLocation);
         final byte[] loadedPolicy;
         try {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ClientInformationResolverServiceStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ClientInformationResolverServiceStrategy.java
index cf0a4c7..e95fa1c 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ClientInformationResolverServiceStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ClientInformationResolverServiceStrategy.java
@@ -60,7 +60,9 @@ public class ClientInformationResolverServiceStrategy extends AbstractIdentifiab
         }
         if (1 == resolvers.size()) {
             // done
-            return resolvers.iterator().next();
+            final AbstractServiceableComponent<ClientInformationResolver> result = resolvers.iterator().next();
+            assert result != null;
+            return result;
         }
         // initialize so we can sort
         for (final RelyingPartyClientInformationProvider resolver : resolvers) {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
index c8dfc1f..15d156d 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
@@ -61,7 +61,9 @@ public class ProviderMetadataResolverServiceStrategy extends AbstractIdentifiabl
         }
         if (1 == containers.size()) {
             // done
-            return containers.iterator().next();
+            final AbstractServiceableComponent<ProviderMetadataResolver> result = containers.iterator().next();
+            assert result != null;
+            return result;
         }
         
         // initialize so we can sort
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/OIDCMetadataPolicyResolverTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/OIDCMetadataPolicyResolverTest.java
index 315500f..c79faba 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/OIDCMetadataPolicyResolverTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/OIDCMetadataPolicyResolverTest.java
@@ -20,6 +20,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 import org.testng.Assert;
@@ -56,7 +58,8 @@ public class OIDCMetadataPolicyResolverTest {
         resolver.initialize();
     }
 
-    protected BatchMetadataCache<String, Map<String, MetadataPolicy>> buildCache(final String filename,
+    @SuppressWarnings("null")
+    @Nonnull protected BatchMetadataCache<String, Map<String, MetadataPolicy>> buildCache(final String filename,
             final CustomMetadataPolicyOperator customOperator)
             throws IOException, ComponentInitializationException {
         final Resource file = filename == null || filename.isEmpty()? null : new ClassPathResource(filename);
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadClientResolverServiceConfigurationTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadClientResolverServiceConfigurationTest.java
index a7dea34..459ae88 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadClientResolverServiceConfigurationTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadClientResolverServiceConfigurationTest.java
@@ -74,7 +74,8 @@ public class ReloadClientResolverServiceConfigurationTest {
         service = new ReloadableSpringService<>(ClientInformationResolver.class, new ClientInformationResolverServiceStrategy());
         service.setFailFast(true);
         service.setId("mockId");
-        
+
+        assert serviceLocations != null;
         service.setServiceConfigurations(serviceLocations);
         service.initialize();
     }
@@ -138,6 +139,7 @@ public class ReloadClientResolverServiceConfigurationTest {
         Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_OK);
     }
 
+    @SuppressWarnings("null")
     protected static ReloadServiceConfiguration initializeAction(final ReloadableService<?> reloadableService, 
             final HttpServletResponse response) throws ComponentInitializationException {
         final ReloadServiceConfiguration action = new ReloadServiceConfiguration();
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadProviderMetadataResolverServiceConfigurationTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadProviderMetadataResolverServiceConfigurationTest.java
index 447451a..888cc71 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadProviderMetadataResolverServiceConfigurationTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/profile/spring/relyingparty/metadata/impl/ReloadProviderMetadataResolverServiceConfigurationTest.java
@@ -71,7 +71,8 @@ public class ReloadProviderMetadataResolverServiceConfigurationTest {
         service = new ReloadableSpringService<>(ProviderMetadataResolver.class, new ProviderMetadataResolverServiceStrategy());
         service.setFailFast(true);
         service.setId("mockId");
-        
+
+        assert serviceLocations != null;
         service.setServiceConfigurations(serviceLocations);
         service.initialize();
     }
@@ -132,6 +133,7 @@ public class ReloadProviderMetadataResolverServiceConfigurationTest {
         Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_OK);
     }
 
+    @SuppressWarnings("null")
     protected static ReloadServiceConfiguration initializeAction(final ReloadableService<?> reloadableService, 
             final HttpServletResponse response) throws ComponentInitializationException {
         final ReloadServiceConfiguration action = new ReloadServiceConfiguration();

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


More information about the commits mailing list