[java-shib-attribute] branch main updated: Fix null and annotation issues.
Scott Cantor
cantor.2 at osu.edu
Wed Nov 16 00:09:06 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=94a07705bed6e091760af026a2d72f1515d5bd73
The following commit(s) were added to refs/heads/main by this push:
new 94a07705b Fix null and annotation issues.
94a07705b is described below
commit 94a07705bed6e091760af026a2d72f1515d5bd73
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Nov 15 19:09:03 2022 -0500
Fix null and annotation issues.
---
shib-attribute-resolver-api/pom.xml | 5 --
.../attribute/resolver/AbstractResolverPlugin.java | 6 ++-
.../resolver/PluginDependencySupport.java | 21 +-------
.../resolver/ResolvedAttributeDefinition.java | 9 ++--
.../attribute/resolver/ResolvedDataConnector.java | 11 ++--
.../resolver/ResolverDataConnectorDependency.java | 7 +--
.../AbstractExecutableSearchFilterBuilder.java | 2 +-
...ParameterizedExecutableSearchFilterBuilder.java | 5 +-
.../TemplatedExecutableSearchFilterBuilder.java | 10 ++--
.../rdbms/AbstractExecutableStatementBuilder.java | 5 +-
.../dc/rdbms/FormatExecutableStatementBuilder.java | 7 +--
.../rdbms/TemplatedExecutableStatementBuilder.java | 4 +-
.../resolver/dc/storage/StorageServiceSearch.java | 4 +-
.../resolver/AbstractAttributeDefinitionTest.java | 5 +-
.../resolver/AbstractDataConnectorTest.java | 1 +
.../resolver/AbstractResolverPluginTest.java | 6 ++-
.../resolver/AttributeResolutionLookupTest.java | 4 +-
shib-attribute-resolver-impl/pom.xml | 11 ++--
.../ad/impl/DateTimeAttributeDefinition.java | 1 +
.../ad/impl/PrescopedAttributeDefinition.java | 4 +-
.../ad/impl/RegexSplitAttributeDefinition.java | 7 +--
.../ad/impl/ScopedAttributeDefinition.java | 17 +++++-
.../ad/impl/ScriptedAttributeDefinition.java | 7 ++-
.../ad/impl/StaticAttributeDefinition.java | 2 +-
.../ad/mapped/impl/MappedAttributeDefinition.java | 14 ++---
.../resolver/ad/mapped/impl/SourceValue.java | 3 +-
.../resolver/ad/mapped/impl/ValueMap.java | 8 ++-
.../dc/http/impl/AbstractHTTPSearchBuilder.java | 3 +-
.../resolver/dc/http/impl/HTTPDataConnector.java | 5 --
.../http/impl/ScriptedResponseMappingStrategy.java | 15 ++----
.../dc/http/impl/TemplatedBodyBuilder.java | 2 +-
.../dc/impl/AbstractSearchDataConnector.java | 4 ++
.../dc/impl/ContextDerivedDataConnector.java | 6 ++-
.../resolver/dc/impl/PairwiseIdDataConnector.java | 4 --
.../resolver/dc/impl/ScriptedDataConnector.java | 19 +++----
.../resolver/dc/impl/StaticDataConnector.java | 6 +--
.../resolver/dc/ldap/impl/LDAPDataConnector.java | 8 +--
.../resolver/dc/rdbms/impl/RDBMSDataConnector.java | 18 ++++---
.../impl/ScriptedStorageMappingStrategy.java | 30 ++++-------
.../storage/impl/StorageServiceDataConnector.java | 30 +++++------
.../dc/storage/impl/TemplatedSearchBuilder.java | 51 ++++++++++++------
.../resolver/impl/AttributeResolverImpl.java | 25 ++++-----
.../ad/impl/DateTimeAttributeDefinitionTest.java | 15 ++++--
.../resolver/ad/impl/DecryptedAttributeTest.java | 9 +++-
.../idp/attribute/resolver/ad/impl/LogicTest.java | 2 +
.../resolver/ad/impl/PrescopedAtributeTest.java | 1 +
.../impl/PrincipalNameAttributeDefinitionTest.java | 11 ++--
.../resolver/ad/impl/RegexAtributeTest.java | 1 +
.../resolver/ad/impl/ScopedAttributeTest.java | 1 +
.../resolver/ad/impl/ScriptedAttributeTest.java | 12 ++++-
.../resolver/ad/impl/SimpleAttributeTest.java | 6 ++-
.../ad/impl/StaticAttributeDefinitionTest.java | 3 +-
.../resolver/ad/impl/TemplateAttributeTest.java | 11 ++--
.../ad/mapped/impl/MappedAttributeTest.java | 18 +++++--
.../resolver/ad/mapped/impl/SourceValueTest.java | 15 ++++--
.../resolver/ad/mapped/impl/ValueMapTest.java | 5 ++
.../dc/http/impl/HTTPDataConnectorTest.java | 4 +-
.../dc/impl/SAMLAttributeDataConnectorTest.java | 4 +-
.../dc/impl/ScriptedDataConnectorTest.java | 8 ++-
.../resolver/dc/impl/StaticDataConnectorTest.java | 5 +-
.../dc/ldap/impl/LDAPDataConnectorTest.java | 8 +--
.../resolver/dc/ldap/impl/Regressions.java | 2 +
.../dc/rdbms/impl/RDBMSDataConnectorTest.java | 6 +++
.../impl/StorageServiceDataConnectorTest.java | 8 +--
.../impl/AttributeResolutionContextTest.java | 3 +-
.../resolver/impl/AttributeResolverImplTest.java | 6 +--
.../tests/PluginDependencySupportTest.java | 32 +++++++----
.../attribute/resolver/testing/TestSources.java | 62 +++++++++++-----------
68 files changed, 381 insertions(+), 289 deletions(-)
diff --git a/shib-attribute-resolver-api/pom.xml b/shib-attribute-resolver-api/pom.xml
index 70fc7a514..a811bc170 100644
--- a/shib-attribute-resolver-api/pom.xml
+++ b/shib-attribute-resolver-api/pom.xml
@@ -74,11 +74,6 @@
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
-
- <dependency>
- <groupId>${spring.groupId}</groupId>
- <artifactId>spring-beans</artifactId>
- </dependency>
<!-- Provided Dependencies -->
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index 456b4d1ae..95ae64420 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -181,6 +181,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
if (null != activationCondition) {
final ProfileRequestContext profileRequestContext =
resolutionContext.getProfileRequestContextLookupStrategy().apply(resolutionContext);
+ assert activationCondition != null;
if (!activationCondition.test(profileRequestContext)) {
log.debug("Resolver plugin '{}': activation criteria not met, nothing to do", getId());
return null;
@@ -189,9 +190,10 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
final AttributeResolverWorkContext workContext =
resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
- Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
-
try {
+ if (workContext == null) {
+ throw new ResolutionException("AttributeResolverWorkContext cannot be null");
+ }
final ResolvedType result = doResolve(resolutionContext, workContext);
if (null == result) {
log.debug("Resolver plugin '{}' produced no value.", getId());
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
index c18b10523..259572cce 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
@@ -135,7 +135,7 @@ public final class PluginDependencySupport {
* @return the merged value set
*/
// Checkstyle: MethodLength|CyclomaticComplexity OFF
- public static Map<String, List<IdPAttributeValue>> getAllAttributeValues(
+ @Nonnull @NonnullElements public static Map<String, List<IdPAttributeValue>> getAllAttributeValues(
@Nonnull final AttributeResolverWorkContext workContext,
@Nonnull final Collection<ResolverAttributeDefinitionDependency> attributeDependencies,
@Nonnull @NonnullElements final Collection<ResolverDataConnectorDependency> dataConnectorDependencies) {
@@ -186,23 +186,6 @@ public final class PluginDependencySupport {
}
// Checkstyle: MethodLength|CyclomaticComplexity ON
- /**
- * Adds the values of the attributes to the target collection of attribute values indexes by attribute ID.
- *
- * @param sources the source attributes
- * @param target current set attribute values
- */
- private static void mergeAttributes(@Nonnull final Map<String, IdPAttribute> sources,
- @Nullable final Map<String, List<IdPAttributeValue>> target) {
- for (final IdPAttribute source : sources.values()) {
- if (source == null) {
- continue;
- }
-
- addAttribute(source, target);
- }
- }
-
/**
* Adds the values of the given attribute to the target collection of attribute values.
*
@@ -210,7 +193,7 @@ public final class PluginDependencySupport {
* @param target current set attribute values
*/
private static void addAttribute(@Nullable final IdPAttribute source,
- @Nullable final Map<String, List<IdPAttributeValue>> target) {
+ @Nonnull @NonnullElements final Map<String, List<IdPAttributeValue>> target) {
if (source == null) {
return;
}
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
index 7b8e6d72e..7a266f305 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
@@ -27,6 +27,7 @@ import javax.annotation.concurrent.ThreadSafe;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.logic.Constraint;
@@ -75,12 +76,14 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
}
/** {@inheritDoc} */
- @Override @Nonnull @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+ @Override
+ @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
return resolvedDefinition.getAttributeDependencies();
}
/** {@inheritDoc} */
- @Override @Nonnull @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+ @Override
+ @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
return resolvedDefinition.getDataConnectorDependencies();
}
@@ -90,7 +93,7 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
}
/** {@inheritDoc} */
- @Override @Nonnull public String getId() {
+ @Override @Nullable public String getId() {
return resolvedDefinition.getId();
}
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
index 364748f0b..82f2ce247 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
@@ -31,6 +31,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.Unmodifiable;
import net.shibboleth.shared.logic.Constraint;
@@ -78,12 +79,14 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
}
/** {@inheritDoc} */
- @Override @Nonnull @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+ @Override
+ @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
return resolvedConnector.getAttributeDependencies();
}
/** {@inheritDoc} */
- @Override @Nonnull @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+ @Override
+ @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
return resolvedConnector.getDataConnectorDependencies();
}
@@ -98,7 +101,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
}
/** {@inheritDoc} */
- @Override @Nonnull public String getId() {
+ @Override @Nullable public String getId() {
return resolvedConnector.getId();
}
@@ -113,7 +116,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
}
/** {@inheritDoc} */
- @Override public void setFailoverDataConnectorId(final String id) {
+ @Override public void setFailoverDataConnectorId(@Nullable final String id) {
return;
}
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
index 551b0f29d..b0da33305 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
@@ -30,6 +30,7 @@ import java.util.Objects;
import net.shibboleth.shared.annotation.ParameterName;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.StringSupport;
/**
@@ -40,7 +41,6 @@ public final class ResolverDataConnectorDependency {
/** ID of the plugin that will produce the attribute. */
@Nonnull @NotEmpty private final String dependencyPluginId;
-
/** Whether to depend on all the connector's attributes. */
private boolean allAttributes;
@@ -52,8 +52,9 @@ public final class ResolverDataConnectorDependency {
*
* @param pluginId ID of dependency
*/
- public ResolverDataConnectorDependency(@ParameterName(name="pluginId") final String pluginId) {
- dependencyPluginId = pluginId;
+ public ResolverDataConnectorDependency(@Nonnull @NotEmpty @ParameterName(name="pluginId") final String pluginId) {
+ dependencyPluginId = Constraint.isNotEmpty(
+ StringSupport.trimOrNull(pluginId), "Plugin ID cannot be null or empty");
allAttributes = false;
attributeNames = Collections.emptySet();
}
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
index a88e2b97c..e209c290f 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
@@ -48,7 +48,7 @@ public abstract class AbstractExecutableSearchFilterBuilder extends AbstractInit
* @return executable search filter
*/
// Checkstyle: AnonInnerLength OFF
- protected ExecutableSearchFilter build(@Nonnull final FilterTemplate searchFilter) {
+ @Nonnull protected ExecutableSearchFilter build(@Nonnull final FilterTemplate searchFilter) {
return new ExecutableSearchFilter() {
/** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
index ee4c60b8b..41f251227 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
@@ -65,7 +65,8 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
}
/** {@inheritDoc} */
- @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Override
+ @Nonnull public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
checkComponentActive();
final FilterTemplate sf = new FilterTemplate(searchFilter);
@@ -84,4 +85,4 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
return super.build(sf);
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
index bc01bfbe7..7111ce979 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
@@ -164,7 +164,8 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
}
/** {@inheritDoc} */
- @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Override
+ @Nonnull public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
final VelocityContext context = new VelocityContext();
@@ -221,9 +222,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
if (null == engine) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: no velocity engine was configured");
- }
-
- if (null == templateText) {
+ } else if (null == templateText) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: template text must be non null");
}
@@ -270,4 +269,5 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
return value;
}
}
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
index 44dc595bd..f173c4e62 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
@@ -84,7 +84,8 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException;
/** {@inheritDoc} */
- @Override public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Override
+ @Nonnull public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
final String query = getSQLQuery(resolutionContext, dependencyAttributes);
@@ -109,4 +110,4 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
};
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
index db24fa8b7..d6ac1b2c2 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
@@ -72,8 +72,9 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
}
}
} else {
- if (resolutionContext.getPrincipal() != null) {
- args.add(resolutionContext.getPrincipal().replace("'", "''"));
+ final String principal = resolutionContext.getPrincipal();
+ if (principal != null) {
+ args.add(principal.replace("'", "''"));
} else {
args.add(null);
}
@@ -81,4 +82,4 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
return String.format(sqlQuery, args.toArray());
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
index 7a13da88c..58af5d9ea 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
@@ -220,9 +220,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
if (null == engine) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: no velocity engine was configured");
- }
-
- if (null == templateText) {
+ } else if (null == templateText) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: Template text must be non null");
}
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
index 6f863e8d3..d79d387db 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.attribute.resolver.dc.storage;
import java.io.IOException;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opensaml.storage.StorageRecord;
import org.opensaml.storage.StorageService;
@@ -42,5 +43,6 @@ public interface StorageServiceSearch extends ExecutableSearch {
*
* @throws IOException thrown if there is a problem executing the search
*/
- @Nonnull StorageRecord<?> execute(@Nonnull StorageService storageService) throws IOException;
+ @Nullable StorageRecord<?> execute(@Nonnull StorageService storageService) throws IOException;
+
}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
index d2e357183..bede14389 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
@@ -26,6 +26,7 @@ import javax.annotation.Nullable;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
import org.testng.Assert;
@@ -140,7 +141,7 @@ public class AbstractAttributeDefinitionTest {
private static final class MockAttributeDefinition extends AbstractAttributeDefinition {
/** Static attribute value returned from resolution. */
- private IdPAttribute staticAttribute;
+ @Nullable private IdPAttribute staticAttribute;
/**
* Constructor.
@@ -148,7 +149,7 @@ public class AbstractAttributeDefinitionTest {
* @param id id of the attribute definition, never null or empty
* @param attribute value returned from the resolution of this attribute, may be null
*/
- public MockAttributeDefinition(String id, IdPAttribute attribute) {
+ public MockAttributeDefinition(@Nonnull @NotEmpty String id, @Nullable IdPAttribute attribute) {
setId(id);
staticAttribute = attribute;
}
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
index 33d4de647..b108a7dde 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
@@ -91,6 +91,7 @@ public class AbstractDataConnectorTest {
connector.initialize();
Map<String, IdPAttribute> result = connector.resolve(context);
assertNotNull(result);
+ assert result != null;
assertTrue(result.containsKey(attribute.getId()));
assertEquals(result.get(attribute.getId()), attribute);
}
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
index 01a905767..2c9078491 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
@@ -152,7 +152,9 @@ public class AbstractResolverPluginTest {
MockBaseAttributeResolver plugin = new MockBaseAttributeResolver("foo", "bar");
plugin.initialize();
- Assert.assertEquals(plugin.resolve(context).getId(), "foo");
+ IdPAttribute attr = plugin.resolve(context);
+ assert attr != null;
+ Assert.assertEquals(attr.getId(), "foo");
context = new AttributeResolutionContext();
plugin = new MockBaseAttributeResolver(" foo ", "bar");
@@ -160,7 +162,6 @@ public class AbstractResolverPluginTest {
plugin.initialize();
Assert.assertNull(plugin.resolve(context));
-
}
/**
@@ -205,4 +206,5 @@ public class AbstractResolverPluginTest {
}
}
+
}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
index 7fce9b0a2..967aa5386 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
@@ -36,7 +36,9 @@ public class AttributeResolutionLookupTest {
@Test public void apply() {
final ProfileRequestContext pfc = new ProfileRequestContext();
- pfc.getSubcontext(AttributeResolutionContext.class, true).setAttributeIssuerID("child");
+ final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+ assert arc != null;
+ arc.setAttributeIssuerID("child");
final TestClass what = new TestClass();
Assert.assertEquals(what.apply(pfc), "child");
diff --git a/shib-attribute-resolver-impl/pom.xml b/shib-attribute-resolver-impl/pom.xml
index e60660841..cbc4f203f 100644
--- a/shib-attribute-resolver-impl/pom.xml
+++ b/shib-attribute-resolver-impl/pom.xml
@@ -91,6 +91,11 @@
<artifactId>ldaptive</artifactId>
</dependency>
+ <dependency>
+ <groupId>${spring.groupId}</groupId>
+ <artifactId>spring-core</artifactId>
+ </dependency>
+
<!-- Provided Dependencies -->
<!-- Runtime Dependencies -->
@@ -171,12 +176,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>${spring.groupId}</groupId>
- <artifactId>spring-core</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
<profiles>
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
index 7fe0165ae..36575c554 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
@@ -205,6 +205,7 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
}
try {
+ assert formatter != null;
return new DateTimeAttributeValue(formatter.parse(stringValue, Instant::from));
} catch (final DateTimeException e) {
log.info("{} Error converting input value '{}' into Instant", getLogPrefix(), stringValue, e);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
index 143e1fac1..8557d5e82 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
@@ -54,14 +54,14 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
@Nonnull private final Logger log = LoggerFactory.getLogger(PrescopedAttributeDefinition.class);
/** Delimiter between value and scope. Default value: @ */
- private String scopeDelimiter = "@";
+ @Nonnull @NotEmpty private String scopeDelimiter = "@";
/**
* Get delimiter between value and scope.
*
* @return delimiter between value and scope
*/
- @Nonnull public String getScopeDelimiter() {
+ @Nonnull @NotEmpty public String getScopeDelimiter() {
return scopeDelimiter;
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
index 3708d24b6..edb0731c2 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
@@ -55,14 +55,14 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
@Nonnull private final Logger log = LoggerFactory.getLogger(RegexSplitAttributeDefinition.class);
/** Regular expression used to split values. */
- @Nullable private Pattern regexp;
+ @NonnullAfterInit private Pattern regexp;
/**
* Gets the regular expression used to split input values.
*
* @return regular expression used to split input values
*/
- @Nullable @NonnullAfterInit public Pattern getRegularExpression() {
+ @NonnullAfterInit public Pattern getRegularExpression() {
return regexp;
}
@@ -144,4 +144,5 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
+ "': no dependencies were configured");
}
}
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
index 77217a13e..f1ddfb2ee 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
@@ -114,7 +114,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
* @throws ResolutionException if the attribute was not there or if it didn't have only one
* string value
*/
- private String getScopeFromSource(@Nonnull final AttributeResolverWorkContext workContext)
+ @Nonnull @NotEmpty private String getScopeFromSource(@Nonnull final AttributeResolverWorkContext workContext)
throws ResolutionException{
final ResolvedAttributeDefinition resolved =
workContext.getResolvedIdPAttributeDefinitions().get(getScopeSource());
@@ -124,7 +124,16 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
workContext.getResolvedIdPAttributeDefinitions().entrySet());
throw new ResolutionException("Scope source not found in resolved dependencies");
}
- final List<IdPAttributeValue> values = resolved.getResolvedAttribute().getValues();
+
+ final IdPAttribute scopeAttribute = resolved.getResolvedAttribute();
+ if (scopeAttribute == null) {
+ log.error("{} Scope source '{}' not found in resolved dependencies", getLogPrefix(), getScopeSource());
+ log.debug("{} Attributes available {}", getLogPrefix(),
+ workContext.getResolvedIdPAttributeDefinitions().entrySet());
+ throw new ResolutionException("Scope source not found in resolved dependencies");
+ }
+
+ final List<IdPAttributeValue> values = scopeAttribute.getValues();
if (values.size() != 1) {
log.error("{} Exactly one value required for {}, {} found", getLogPrefix(),
getScopeSource(), values.size());
@@ -154,6 +163,10 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
} else {
scopeValue = getScopeFromSource(workContext);
}
+
+ if (scopeValue == null) {
+ throw new ResolutionException(getLogPrefix() + " Scope was null or empty");
+ }
final List<IdPAttributeValue> dependencyValues =
PluginDependencySupport.getMergedAttributeValues(workContext,
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
index f27fcf831..c8e04ac94 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
@@ -210,6 +210,11 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
+ if (input == null || !(input[1] instanceof AttributeResolverWorkContext)) {
+ log.error("{} AttributeResolverWorkContext missing from script context inputs", getLogPrefix());
+ return;
+ }
+
final Map<String, List<IdPAttributeValue>> dependencyAttributes =
PluginDependencySupport.getAllAttributeValues(
(AttributeResolverWorkContext) input[1],
@@ -271,4 +276,4 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
}
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
index bcda43c50..616ace8bc 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
@@ -64,7 +64,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
/** {@inheritDoc} */
@Override @Nonnull protected IdPAttribute doAttributeDefinitionResolve(
- final AttributeResolutionContext resolutionContext,
+ @Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
checkComponentActive();
log.debug("{} resolving static attribute {}", getLogPrefix(), value);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index 3f8639917..e7801b6cd 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -108,10 +108,10 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
* @return the default return value.
*/
@Nullable public String getDefaultValue() {
- if (null == defaultValue) {
- return null;
+ if (null != defaultValue) {
+ return defaultValue.getValue();
}
- return defaultValue.getValue();
+ return null;
}
/**
@@ -171,6 +171,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
if (!valueMapMatch) {
if (passThru) {
+ assert value != null;
mappedValues.add(new StringAttributeValue(value));
} else if (defaultValue != null) {
mappedValues.add(defaultValue);
@@ -227,13 +228,6 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
return resultAttribute;
}
- /** {@inheritDoc} */
- @Override protected void doDestroy() {
- valueMaps = null;
-
- super.doDestroy();
- }
-
/** {@inheritDoc} */
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
index 0da0e6ad7..724e5a252 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
@@ -19,7 +19,6 @@ package net.shibboleth.idp.attribute.resolver.ad.mapped.impl;
import java.util.regex.Pattern;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.google.common.base.MoreObjects;
@@ -157,7 +156,7 @@ public class SourceValue extends AbstractInitializableComponent {
*
* @return Returns the pattern.
*/
- @Nonnull public Pattern getPattern() {
+ @Nullable public Pattern getPattern() {
checkComponentActive();
Constraint.isFalse(isPartialMatch(), "getPattern is only meaningful for a non partial Match, use getValue()");
return pattern;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
index 239cc972a..ac2c8dc81 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
@@ -23,6 +23,7 @@ import java.util.HashSet;
import java.util.Set;
import java.util.function.Function;
import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.annotation.Nonnull;
@@ -128,7 +129,12 @@ public class ValueMap implements Function<String, Set<StringAttributeValue>> {
} else {
log.debug("Performing regular expression based comparison");
try {
- final Matcher m = sourceValue.getPattern().matcher(attributeValue);
+ final Pattern p = sourceValue.getPattern();
+ if (p == null) {
+ log.debug("Error matching value '{}', pattern was null", attributeValue);
+ continue;
+ }
+ final Matcher m = p.matcher(attributeValue);
if (m.matches()) {
newValue = returnValue != null ? m.replaceAll(returnValue) : null;
log.debug("Attribute value '{}' matches regular expression, will be mapped to '{}'",
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index 88d54f204..eb6747d4d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -134,7 +134,8 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
}
/** {@inheritDoc} */
- @Override public HTTPSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Override
+ @Nonnull public HTTPSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index ead6328f8..3fcd0b87d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -29,8 +29,6 @@ import javax.annotation.Nullable;
import org.apache.http.client.HttpClient;
import org.opensaml.security.httpclient.HttpClientSecurityParameters;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -48,9 +46,6 @@ import net.shibboleth.shared.logic.Constraint;
* that obtains data from an HTTP service.
*/
public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HTTPResponseMappingStrategy> {
-
- /** Class logging. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPDataConnector.class);
/** The {@link HttpClient} to use. */
@NonnullAfterInit private HttpClient httpClient;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
index cca3ca9cb..cb0313927 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
@@ -160,7 +160,7 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("response", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("response", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
scriptContext.setAttribute("log", log, ScriptContext.ENGINE_SCOPE);
}
@@ -187,12 +187,8 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
for (final Object o : outputCollection) {
if (o instanceof IdPAttribute) {
final IdPAttribute attribute = (IdPAttribute) o;
- if (null == attribute.getId()) {
- log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
- } else {
- checkValues(attribute);
- outputMap.put(attribute.getId(), attribute);
- }
+ checkValues(attribute);
+ outputMap.put(attribute.getId(), attribute);
} else {
log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
o.getClass().getName());
@@ -262,11 +258,6 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
*/
private void checkValues(final IdPAttribute attribute) {
- if (null == attribute.getValues()) {
- log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
- attribute.setValues(Collections.<IdPAttributeValue> emptyList());
- return;
- }
log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
attribute.getValues().size());
final List<IdPAttributeValue> inputValues = attribute.getValues();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
index 7ae718e2f..ca36abfea 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
@@ -378,7 +378,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
/** {@inheritDoc} */
@Override
- @Nonnull @NotEmpty protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
+ @Nullable @NotEmpty protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
index db933982a..b4c9abe37 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
@@ -144,6 +144,8 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
* @param cache cache used to cache search results
*/
public void setResultsCache(@Nullable final Cache<String,Map<String,IdPAttribute>> cache) {
+ checkSetterPreconditions();
+
if (cache != null) {
cache.invalidateAll();
}
@@ -177,12 +179,14 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
if (resultsCache != null && resolutionContext.getAllowCachedResults()) {
final String cacheKey = executable.getResultCacheKey();
if (cacheKey != null) {
+ assert resultsCache != null;
resolvedAttributes = resultsCache.getIfPresent(cacheKey);
log.trace("{} Cache found, resolved attributes {} using cache {}", new Object[] {getLogPrefix(),
resolvedAttributes, resultsCache,});
if (resolvedAttributes == null) {
resolvedAttributes = retrieveAttributes(executable);
log.trace("{} Resolved attributes {}", getLogPrefix(), resolvedAttributes);
+ assert resultsCache != null;
resultsCache.put(cacheKey, resolvedAttributes != null ? resolvedAttributes
: Collections.<String,IdPAttribute>emptyMap());
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
index 31fe89150..f53af0d1c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
@@ -17,6 +17,7 @@
package net.shibboleth.idp.attribute.resolver.dc.impl;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -35,6 +36,7 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
@@ -104,7 +106,7 @@ public class ContextDerivedDataConnector extends AbstractDataConnector {
/** {@inheritDoc} */
@Override
- @Nonnull protected Map<String,IdPAttribute> doDataConnectorResolve(
+ @Nonnull @NonnullElements protected Map<String,IdPAttribute> doDataConnectorResolve(
@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
@@ -117,7 +119,7 @@ public class ContextDerivedDataConnector extends AbstractDataConnector {
throw new NoResultAnErrorResolutionException(getLogPrefix() + " No attributes returned");
}
log.debug("{} Generated no attributes", getLogPrefix());
- return null;
+ return Collections.emptyMap();
}
log.debug("{} Generated {} attributes", getLogPrefix(), results.size());
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
index 7a2fc3233..a132fa801 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
@@ -230,10 +230,6 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
return null;
}
- if (val == null) {
- log.warn("{} Attribute value {} for connector {} resolved as empty or null", getLogPrefix(),
- getSourceAttributeInformation(), getId());
- }
return val;
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
index 5a9c9fa21..091df1ea6 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
@@ -138,10 +138,12 @@ public class ScriptedDataConnector extends AbstractDataConnector {
@Override
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
+
if (null == script) {
throw new ComponentInitializationException(getLogPrefix() + ": No script supplied");
}
+ assert script != null;
scriptEvaluator = new DataConnectorScriptEvaluator(script);
scriptEvaluator.setCustomObject(customObject);
scriptEvaluator.setContextExtenders(contextExtenders);
@@ -154,7 +156,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
Constraint.isNotNull(resolutionContext, "AttributeResolutionContext cannot be null");
Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
-
+
return scriptEvaluator.execute(resolutionContext, workContext);
}
@@ -196,6 +198,8 @@ public class ScriptedDataConnector extends AbstractDataConnector {
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
+ assert(input != null);
+
log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
@@ -250,12 +254,8 @@ public class ScriptedDataConnector extends AbstractDataConnector {
for (final Object o : outputCollection) {
if (o instanceof IdPAttribute) {
final IdPAttribute attribute = (IdPAttribute) o;
- if (null == attribute.getId()) {
- log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
- } else {
- checkValues(attribute);
- outputMap.put(attribute.getId(), attribute);
- }
+ checkValues(attribute);
+ outputMap.put(attribute.getId(), attribute);
} else {
log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
o.getClass().getName());
@@ -272,11 +272,6 @@ public class ScriptedDataConnector extends AbstractDataConnector {
*/
private void checkValues(final IdPAttribute attribute) {
- if (null == attribute.getValues()) {
- log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
- attribute.setValues(Collections.<IdPAttributeValue> emptyList());
- return;
- }
log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
attribute.getValues().size());
final List<IdPAttributeValue> inputValues = attribute.getValues();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
index 9e0c69464..c38622782 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
@@ -22,7 +22,6 @@ import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import org.slf4j.Logger;
@@ -57,7 +56,7 @@ public class StaticDataConnector extends AbstractDataConnector {
*
* @return static values returned by this connector
*/
- @Nullable @NonnullAfterInit public Map<String, IdPAttribute> getAttributes() {
+ @NonnullAfterInit public Map<String, IdPAttribute> getAttributes() {
return attributes;
}
@@ -84,8 +83,9 @@ public class StaticDataConnector extends AbstractDataConnector {
@Nonnull protected Map<String, IdPAttribute> doDataConnectorResolve(
@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
- checkComponentActive();
+
log.trace("{} Resolved attributes: {}", getLogPrefix(), attributes);
+ assert attributes != null;
return attributes;
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
index 9853bd45a..f786684ad 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
@@ -199,12 +199,14 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
*
* @throws ResolutionException thrown if there is a problem retrieving data from the LDAP
*/
- @Override @Nullable protected Map<String, IdPAttribute> retrieveAttributes(final ExecutableSearchFilter filter)
- throws ResolutionException {
-
+ @Override @Nullable protected Map<String, IdPAttribute> retrieveAttributes(
+ @Nullable final ExecutableSearchFilter filter) throws ResolutionException {
+
+ // The base class method defines the parameter is non-null, so this is arguably unneeded.
if (filter == null) {
throw new ResolutionException(getLogPrefix() + " Search filter cannot be null");
}
+
try {
final SearchResponse result = filter.execute(searchOperation, connectionFactory);
log.trace("{} Search returned {}", getLogPrefix(), result);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
index 8baa1d5ab..39566950c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
@@ -37,6 +37,7 @@ import net.shibboleth.idp.attribute.resolver.dc.impl.AbstractSearchDataConnector
import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
import net.shibboleth.idp.attribute.resolver.dc.rdbms.ResultMappingStrategy;
import net.shibboleth.idp.attribute.resolver.dc.rdbms.StringResultMappingStrategy;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
@@ -47,21 +48,23 @@ import net.shibboleth.shared.logic.Constraint;
public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableStatement,ResultMappingStrategy> {
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(RDBMSDataConnector.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(RDBMSDataConnector.class);
/** JDBC data source for retrieving {@link Connection}s. */
- private DataSource dataSource;
+ @NonnullAfterInit private DataSource dataSource;
/** Whether the default validator is being used. */
- private boolean defaultValidator = true;
+ private boolean defaultValidator;
/** Whether the default mapping strategy is being used. */
- private boolean defaultMappingStrategy = true;
+ private boolean defaultMappingStrategy;
/**
* Constructor.
*/
public RDBMSDataConnector() {
+ defaultValidator = true;
+ defaultMappingStrategy = true;
}
/**
@@ -69,7 +72,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
*
* @return JDBC data source for retrieving {@link Connection}s
*/
- public DataSource getDataSource() {
+ @NonnullAfterInit public DataSource getDataSource() {
return dataSource;
}
@@ -104,6 +107,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
if (defaultValidator) {
final DataSourceValidator validator = new DataSourceValidator();
+ assert dataSource != null;
validator.setDataSource(dataSource);
validator.setThrowValidateError(isFailFastInitialize());
validator.initialize();
@@ -135,12 +139,14 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
* data into {@link IdPAttribute}s
*/
@Override
- @Nullable protected Map<String, IdPAttribute> retrieveAttributes(final ExecutableStatement statement)
+ @Nullable protected Map<String, IdPAttribute> retrieveAttributes(@Nullable final ExecutableStatement statement)
throws ResolutionException {
+ // The base class method defines the parameter is non-null, so this is arguably unneeded.
if (statement == null) {
throw new ResolutionException("Executable statement cannot be null");
}
+
Connection connection = null;
try {
connection = dataSource.getConnection();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
index 04da977a5..c81ce9792 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
@@ -75,14 +75,13 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
@Nonnull public Map<String,IdPAttribute> map(@Nonnull final StorageRecord<?> results)
throws ResolutionException {
log.debug("{} Handling StorageRecord", getLogPrefix());
-
- if (results == null) {
- log.debug("{} StorageRecord was missing", getLogPrefix());
- throw new ResolutionException(getLogPrefix() + " StorageRecord was missing");
- }
-
+
try {
- return (Map<String,IdPAttribute>) evaluate(results);
+ final Object map = (Map<String, IdPAttribute>) evaluate(results);
+ if (map instanceof Map) {
+ return (Map<String, IdPAttribute>) map;
+ }
+ throw new ResolutionException(getLogPrefix() + "Script finalization did not return a map");
} catch (final RuntimeException e) {
throw new ResolutionException(getLogPrefix() + " Script did not run successfully", e);
}
@@ -94,7 +93,7 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("record", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("record", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
scriptContext.setAttribute("log", log, ScriptContext.ENGINE_SCOPE);
}
@@ -121,12 +120,8 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
for (final Object o : outputCollection) {
if (o instanceof IdPAttribute) {
final IdPAttribute attribute = (IdPAttribute) o;
- if (null == attribute.getId()) {
- log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
- } else {
- checkValues(attribute);
- outputMap.put(attribute.getId(), attribute);
- }
+ checkValues(attribute);
+ outputMap.put(attribute.getId(), attribute);
} else {
log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
o.getClass().getName());
@@ -141,13 +136,8 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
*
* @param attribute the attribute to look at
*/
- private void checkValues(final IdPAttribute attribute) {
+ private void checkValues(@Nonnull final IdPAttribute attribute) {
- if (null == attribute.getValues()) {
- log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
- attribute.setValues(Collections.<IdPAttributeValue> emptyList());
- return;
- }
log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
attribute.getValues().size());
final List<IdPAttributeValue> inputValues = attribute.getValues();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
index c1fb00de1..21eef1de0 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
@@ -30,8 +30,6 @@ import javax.annotation.Nullable;
import org.opensaml.storage.StorageRecord;
import org.opensaml.storage.StorageService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.NoResultAnErrorResolutionException;
@@ -55,14 +53,11 @@ import net.shibboleth.shared.primitive.StringSupport;
public class StorageServiceDataConnector
extends AbstractSearchDataConnector<StorageServiceSearch,StorageMappingStrategy> {
- /** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(StorageServiceDataConnector.class);
-
/** The {@link StorageService} to use. */
@NonnullAfterInit private StorageService storageService;
/** ID of the attribute generated by this data connector if simple result mapping used. */
- @NonnullAfterInit private String generatedAttributeID;
+ @Nullable private String generatedAttributeID;
/** Whether no record is an error. */
private boolean noResultAnError;
@@ -92,15 +87,6 @@ public class StorageServiceDataConnector
storageService = Constraint.isNotNull(service, "StorageService cannot be null");
}
- /**
- * Get the ID of the attribute generated by this connector if simple result mapping used.
- *
- * @return ID of the attribute generated by this connector
- */
- @NonnullAfterInit public String getGeneratedAttributeID() {
- return generatedAttributeID;
- }
-
/**
* Sets whether the lack of a returned record constitutes an error.
*
@@ -111,6 +97,15 @@ public class StorageServiceDataConnector
noResultAnError = flag;
}
+ /**
+ * Get the ID of the attribute generated by this connector if simple result mapping used.
+ *
+ * @return ID of the attribute generated by this connector
+ */
+ @Nullable public String getGeneratedAttributeID() {
+ return generatedAttributeID;
+ }
+
/**
* Set the ID of the attribute generated by this connector if simple result mapping used.
*
@@ -133,6 +128,7 @@ public class StorageServiceDataConnector
throw new ComponentInitializationException(
getLogPrefix() + " No mapping strategy or generated attribute ID set");
}
+ assert generatedAttributeID != null;
setMappingStrategy(new SimpleStorageMappingStrategy(generatedAttributeID));
}
@@ -143,9 +139,9 @@ public class StorageServiceDataConnector
@Override
@Nullable protected Map<String,IdPAttribute> retrieveAttributes(@Nonnull final StorageServiceSearch executable)
throws ResolutionException {
-
+
try {
-
+ assert storageService != null;
final StorageRecord<?> record = executable.execute(storageService);
if (record == null) {
if (noResultAnError) {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
index 16c2fa82c..4de9ce9ea 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
@@ -39,7 +39,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
import net.shibboleth.idp.attribute.resolver.dc.storage.StorageServiceSearch;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.component.AbstractInitializableComponent;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
@@ -166,9 +165,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
if (null == engine) {
throw new ComponentInitializationException("Velocity engine cannot be null");
- }
-
- if (null == contextTemplateText) {
+ } else if (null == contextTemplateText) {
throw new ComponentInitializationException("Context template text cannot be null");
} else if (null == keyTemplateText) {
throw new ComponentInitializationException("Key template text cannot be null");
@@ -179,35 +176,57 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
}
/** {@inheritDoc} */
- @Override public StorageServiceSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Override
+ @Nonnull public StorageServiceSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
- final Pair<String,String> searchParams = getContextAndKey(resolutionContext, dependencyAttributes);
+ final ContextAndKey searchParams = getContextAndKey(resolutionContext, dependencyAttributes);
return new StorageServiceSearch() {
/** {@inheritDoc} */
@Nullable public String getResultCacheKey() {
- if (searchParams.getFirst() != null && searchParams.getSecond() != null) {
- return searchParams.getFirst() + "!" + searchParams.getSecond();
- }
- return null;
+ return searchParams.context() + "!" + searchParams.key();
}
/** {@inheritDoc} */
- public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
- return storageService.read(searchParams.getFirst(), searchParams.getSecond());
+ @Nullable public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
+ return storageService.read(searchParams.context(), searchParams.key());
}
};
}
- /** Helper method to extract the parameters needed for the {@link StorageServiceSearch}
+ /**
+ * Record encapsulating storage context and key.
+ *
+ * @param context context
+ * @param key key
+ */
+ public record ContextAndKey(@Nonnull String context, @Nonnull String key) {
+
+ /**
+ * Constructor.
+ *
+ * @param context context
+ * @param key key
+ */
+ public ContextAndKey(@Nonnull final String context, @Nonnull final String key) {
+ this.context = Constraint.isNotEmpty(context, "Context cannot be null or empty");
+ this.key = Constraint.isNotEmpty(key, "Key cannot be null or empty");
+ }
+ }
+
+ /**
+ * Helper method to extract the parameters needed for the {@link StorageServiceSearch}
+ *
* @param resolutionContext the context of the resolution
* @param dependencyAttributes the attributes we depend upon
- * @return the derived {@link StorageService} context and context
+ *
+ * @return the derived {@link StorageService} context and key
+ *
* @throws ResolutionException if the velocity operations failed resolution failed.
*/
- @Nonnull private Pair<String,String> getContextAndKey(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Nonnull private ContextAndKey getContextAndKey(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
final VelocityContext context = new VelocityContext();
@@ -231,7 +250,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
final String ctx = contextTemplate.merge(context);
final String key = keyTemplate.merge(context);
log.debug("Produced search context '{}', key '{}'", ctx, key);
- return new Pair<>(ctx, key);
+ return new ContextAndKey(ctx, key);
} catch (final VelocityException e) {
log.error("Error running template engine: {}", e.getMessage());
throw new ResolutionException("Error running template engine", e);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index ca76558af..f8d2c4fa6 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -35,9 +34,7 @@ import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import org.opensaml.messaging.context.BaseContext;
-import org.opensaml.messaging.context.navigate.ParentContextLookup;
import org.opensaml.profile.context.MetricContext;
-import org.opensaml.profile.context.ProfileRequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -123,7 +120,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
*
* @return attribute definitions loaded in to this resolver
*/
- @Nonnull @NonnullElements @Unmodifiable public Map<String, AttributeDefinition>
+ @NonnullAfterInit @NonnullElements @Unmodifiable public Map<String, AttributeDefinition>
getAttributeDefinitions() {
return attributeDefinitions;
}
@@ -153,7 +150,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
*
* @return data connectors loaded in to this resolver
*/
- @Nonnull @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
+ @NonnullAfterInit @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
return dataConnectors;
}
@@ -194,6 +191,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
final AttributeResolverWorkContext workContext =
resolutionContext.getSubcontext(AttributeResolverWorkContext.class, true);
+ assert workContext != null;
AttributeContext attributeContext = null;
final boolean timerStarted = startTimer(resolutionContext);
@@ -288,7 +286,8 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
Constraint.isNotNull(attributeId, "Attribute ID can not be null");
Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
log.trace("{} Beginning to resolve attribute definition '{}'", logPrefix, attributeId);
@@ -334,7 +333,8 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
Constraint.isNotNull(connectorId, "Data connector ID can not be null");
Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
if (workContext.getResolvedDataConnectors().containsKey(connectorId)) {
log.trace("{} Data connector '{}' was already resolved, nothing to do", logPrefix, connectorId);
@@ -348,9 +348,9 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
}
final Instant resolveTime = Instant.now();
-
- if (connector.getLastFail() != null
- && resolveTime.isBefore(connector.getLastFail().plus(connector.getNoRetryDelay()))) {
+ final Instant lastFailTime = connector.getLastFail();
+ if (lastFailTime != null
+ && resolveTime.isBefore(lastFailTime.plus(connector.getNoRetryDelay()))) {
log.debug("{} Data connector '{}' failed to resolve previously, still waiting", logPrefix,
connectorId);
final String failoverDataConnectorId = connector.getFailoverDataConnectorId();
@@ -574,7 +574,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
protected void finalizeResolvedAttributes(@Nonnull final AttributeResolutionContext resolutionContext) {
Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
final Map<String, IdPAttribute> resolvedAttributes = new LazyMap<>();
@@ -597,7 +597,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
protected void finalizePreResolvedAttributes(@Nonnull final AttributeResolutionContext resolutionContext) {
Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
final Map<String, IdPAttribute> resolvedAttributes = new LazyMap<>();
@@ -608,6 +608,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
}
final AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class, true);
+ assert context != null;
log.debug("Pre-resolved Attributes: {}", resolvedAttributes.keySet());
context.setIdPAttributes(resolvedAttributes.values());
context.setUnfilteredIdPAttributes(resolvedAttributes.values());
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
index caeda9d96..fad9ef822 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
@@ -26,6 +26,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.testng.annotations.Test;
import net.shibboleth.idp.attribute.DateTimeAttributeValue;
@@ -42,6 +44,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.collection.LazySet;
import net.shibboleth.shared.component.ComponentInitializationException;
@@ -49,10 +52,10 @@ import net.shibboleth.shared.component.ComponentInitializationException;
public class DateTimeAttributeDefinitionTest {
/** The name. */
- private static final String TEST_ATTRIBUTE_NAME = "datetime";
- private static final String STRING_SECS = "1659979872";
- private static final String STRING_MSECS = "1659979872969";
- private static final String STRING_ISO = "2022-08-08T17:31:12.969Z";
+ @Nonnull @NotEmpty private static final String TEST_ATTRIBUTE_NAME = "datetime";
+ @Nonnull @NotEmpty private static final String STRING_SECS = "1659979872";
+ @Nonnull @NotEmpty private static final String STRING_MSECS = "1659979872969";
+ @Nonnull @NotEmpty private static final String STRING_ISO = "2022-08-08T17:31:12.969Z";
/**
* Test resolution of an empty definition to nothing.
@@ -75,7 +78,8 @@ public class DateTimeAttributeDefinitionTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
final IdPAttribute result = simple.resolve(context);
-
+ assert result != null;
+
assertTrue(result.getValues().isEmpty());
}
@@ -149,6 +153,7 @@ public class DateTimeAttributeDefinitionTest {
datetime.initialize();
final Instant now = Instant.now();
+ assert now != null;
final IdPAttribute attr = new IdPAttribute(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR);
attr.setValues(List.of(new DateTimeAttributeValue(now), StringAttributeValue.valueOf(STRING_SECS)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
index fe3ad01c8..6dbab1134 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
@@ -25,6 +25,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.springframework.core.io.ClassPathResource;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -45,6 +47,7 @@ import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
import net.shibboleth.idp.attribute.resolver.testing.ResolverTestSupport;
import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.collection.LazySet;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.resource.Resource;
@@ -57,7 +60,7 @@ import net.shibboleth.shared.spring.resource.ResourceHelper;
@SuppressWarnings("javadoc")
public class DecryptedAttributeTest {
- private static final String TEST_ATTRIBUTE_NAME = "decrypted";
+ @Nonnull @NotEmpty private static final String TEST_ATTRIBUTE_NAME = "decrypted";
private DataSealer dataSealer;
@@ -116,6 +119,7 @@ public class DecryptedAttributeTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
final IdPAttribute result = decrypted.resolve(context);
+ assert result != null;
assertTrue(result.getValues().isEmpty());
}
@@ -240,7 +244,8 @@ public class DecryptedAttributeTest {
decrypted.initialize();
final IdPAttribute result = decrypted.resolve(resolutionContext);
-
+ assert result != null;
+
final List<IdPAttributeValue> outValues = result.getValues();
assertEquals(outValues.size(), 1);
assertFalse(outValues.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
index b4810536a..09cdba10a 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
@@ -58,6 +58,7 @@ public class LogicTest {
@Test public void wrong() {
final ProfileRequestContext pfc = new ProfileRequestContext();
final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+ assert arc != null;
arc.setAttributeIssuerID("badValue");
arc.setPrincipal("badValue");
@@ -71,6 +72,7 @@ public class LogicTest {
@Test public void correct() {
final ProfileRequestContext pfc = new ProfileRequestContext();
final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+ assert arc != null;
arc.setAttributeIssuerID("AII");
arc.setPrincipal("Principal");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
index f57001327..eff204000 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
@@ -182,6 +182,7 @@ public class PrescopedAtributeTest {
attrDef.setDataConnectorDependencies(Collections.singleton(depend));
attrDef.initialize();
final IdPAttribute result = attrDef.resolve(resolutionContext);
+ assert result != null;
final Collection<?> f = result.getValues();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
index e7e89d8e1..c25f95410 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
@@ -36,8 +36,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
public class PrincipalNameAttributeDefinitionTest {
@Test public void nullContext() throws ComponentInitializationException {
- PrincipalNameAttributeDefinition defn;
- defn = new PrincipalNameAttributeDefinition();
+ final PrincipalNameAttributeDefinition defn = new PrincipalNameAttributeDefinition();
defn.setId("id");
defn.initialize();
@@ -53,8 +52,7 @@ public class PrincipalNameAttributeDefinitionTest {
@Test
public void nullName() throws ComponentInitializationException{
- PrincipalNameAttributeDefinition defn;
- defn = new PrincipalNameAttributeDefinition();
+ final PrincipalNameAttributeDefinition defn = new PrincipalNameAttributeDefinition();
defn.setId("id");
defn.initialize();
@@ -73,11 +71,12 @@ public class PrincipalNameAttributeDefinitionTest {
defn.setId("id");
defn.initialize();
- IdPAttribute result = defn.resolve(TestSources.createResolutionContext("principal", "issuer", "recipient"));
+ final IdPAttribute result = defn.resolve(TestSources.createResolutionContext("principal", "issuer", "recipient"));
+ assert result != null;
assertEquals(result.getValues().size(), 1);
- StringAttributeValue value = (StringAttributeValue) result.getValues().iterator().next();
+ final StringAttributeValue value = (StringAttributeValue) result.getValues().iterator().next();
assertEquals(value.getValue(), "principal");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
index fe63773de..92ab036d9 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
@@ -121,6 +121,7 @@ public class RegexAtributeTest {
attrDef.initialize();
final IdPAttribute result = attrDef.resolve(resolutionContext);
+ assert result != null;
final Collection<?> f = result.getValues();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
index c56ede5ba..ba9cbf151 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
@@ -194,6 +194,7 @@ public class ScopedAttributeTest {
attrDef.initialize();
final IdPAttribute result = attrDef.resolve(resolutionContext);
+ assert result != null;
final Collection<?> f = result.getValues();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
index a8a55a3b4..0a8cdb4d9 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
@@ -32,6 +32,7 @@ import java.util.List;
import java.util.Set;
import java.util.function.Function;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.script.ScriptException;
@@ -82,7 +83,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
return "/net/shibboleth/idp/attribute/resolver/impl/ad/" + fileName;
}
- private EvaluableScript getScript(String fileName) throws ComponentInitializationException, IOException {
+ @Nonnull private EvaluableScript getScript(String fileName) throws ComponentInitializationException, IOException {
EvaluableScript es = new EvaluableScript ();
es.setEngineName(SCRIPT_LANGUAGE);
es.setScript(getClass().getResourceAsStream(fileNameToPath(fileName)));
@@ -113,6 +114,8 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
assertNotNull(attr.getScript());
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
+
final List<IdPAttributeValue> results = val.getValues();
assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -144,6 +147,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
assertNotNull(attr.getScript());
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
final List<IdPAttributeValue> results = val.getValues();
assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -174,6 +178,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
assertNotNull(attr.getScript());
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
final List<IdPAttributeValue> results = val.getValues();
assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -196,6 +201,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
assertNotNull(attr.getScript());
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
final List<IdPAttributeValue> results = val.getValues();
assertEquals(results.size(), 1, "Scripted result value count");
@@ -216,6 +222,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
attr.initialize();
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
final List<IdPAttributeValue> results = val.getValues();
assertEquals(results.size(), 2, "Scripted result value count");
@@ -237,6 +244,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
assertNotNull(attr.getScript());
final IdPAttribute val = attr.resolve(generateContext());
+ assert val != null;
final List<IdPAttributeValue> results = val.getValues();
assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -294,6 +302,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
ComponentInitializationException {
final IdPAttribute result = buildTest("addAfterGetValues.script", true).resolve(generateContext());
+ assert result != null;
final List<IdPAttributeValue> values = result.getValues();
assertEquals(values.size(), 1);
assertTrue(values.contains(new StringAttributeValue("newValue")));
@@ -369,6 +378,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
scripted.initialize();
final IdPAttribute result = scripted.resolve(resolutionContext);
+ assert result != null;
final List<IdPAttributeValue> outValues = result.getValues();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
index be1735e4d..171c63f8a 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
@@ -77,6 +77,7 @@ public class SimpleAttributeTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
final IdPAttribute result = simple.resolve(context);
+ assert result != null;
assertTrue(result.getValues().isEmpty());
}
@@ -225,8 +226,9 @@ public class SimpleAttributeTest {
simple.initialize();
final IdPAttribute result = simple.resolve(resolutionContext);
-
- final List<IdPAttributeValue> outValues = result.getValues();
+ assert result != null;
+
+ final List<IdPAttributeValue> outValues = result.getValues();
assertEquals(outValues.size(), 2);
assertTrue(outValues.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
assertTrue(outValues.contains(new EmptyAttributeValue(EmptyType.NULL_VALUE)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
index 45ee244b4..4f6269819 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
@@ -77,8 +77,7 @@ public class StaticAttributeDefinitionTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
IdPAttribute result = attrDef.resolve(context);
-
- assertNotNull(result);
+ assert result != null;
assertEquals(result.getId(), "attribute");
try {
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
index e1bf4dc1d..d1138556c 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
@@ -25,6 +25,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.testng.annotations.Test;
@@ -77,7 +79,7 @@ public class TemplateAttributeTest {
*
* @return a new engine suitable groomed
*/
- private VelocityEngine getEngine() {
+ @Nonnull private VelocityEngine getEngine() {
if (null == engineSingleton) {
engineSingleton = new VelocityEngine();
try {
@@ -145,6 +147,7 @@ public class TemplateAttributeTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
final IdPAttribute val = attr.resolve(context);
+ assert val != null;
final Collection<?> results = val.getValues();
assertEquals(results.size(), 0, "Templated value count");
@@ -387,12 +390,12 @@ public class TemplateAttributeTest {
// (to show that a non string object gets injected)
new IdPAttributeValue() {
- public Object getNativeValue() {
+ @Nonnull public Object getNativeValue() {
return new StringAttributeValue("NativeValue");
}
- public String getDisplayValue() {
- return null;
+ @Nonnull public String getDisplayValue() {
+ return "";
}
}));
final StaticAttributeDefinition simple = new StaticAttributeDefinition();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
index ae588aaff..90f437750 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
@@ -108,6 +108,7 @@ public class MappedAttributeTest {
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
assertTrue(result.getValues().isEmpty());
}
@@ -132,6 +133,7 @@ public class MappedAttributeTest {
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
assertFalse(result.getValues().isEmpty());
assertTrue(result.getValues().contains(new StringAttributeValue("default")));
@@ -177,6 +179,7 @@ public class MappedAttributeTest {
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
// mapped attribute definition should return no values for empty and null
assertTrue(result.getValues().isEmpty());
@@ -199,6 +202,7 @@ public class MappedAttributeTest {
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
assertFalse(result.getValues().isEmpty());
assertEquals(result.getValues().size(), 2);
@@ -219,11 +223,15 @@ public class MappedAttributeTest {
assertTrue(definition.getValueMaps().isEmpty());
definition.setValueMaps(Collections.singleton(substringValueMapping("elephant", false, "banana")));
definition.setDefaultValue("default");
- assertEquals(definition.getDefaultAttributeValue().getValue(), "default");
+
+ final StringAttributeValue defValue = definition.getDefaultAttributeValue();
+ assert defValue != null;
+ assertEquals(defValue.getValue(), "default");
assertFalse(definition.isPassThru());
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
assertFalse(result.getValues().isEmpty());
assertEquals(result.getValues().size(), 3);
@@ -246,11 +254,15 @@ public class MappedAttributeTest {
assertTrue(definition.getValueMaps().isEmpty());
definition.setValueMaps(Collections.singleton(substringValueMapping("elephant", false, "banana")));
definition.setDefaultValue("default");
- assertEquals(definition.getDefaultAttributeValue().getValue(), "default");
+
+ final StringAttributeValue defValue = definition.getDefaultAttributeValue();
+ assert defValue != null;
+ assertEquals(defValue.getValue(), "default");
definition.setPassThru(true);
definition.initialize();
final IdPAttribute result = definition.resolve(resolutionContext);
+ assert result != null;
assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
assertFalse(result.getValues().isEmpty());
assertEquals(result.getValues().size(), ResolverTestSupport.EPA3_VALUES.length);
@@ -293,4 +305,4 @@ public class MappedAttributeTest {
definition.resolve(resolutionContext);
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
index d029fc53c..020006b49 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
@@ -21,6 +21,10 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
+import java.util.regex.Pattern;
+
+import javax.annotation.Nonnull;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
@@ -45,8 +49,9 @@ public class SourceValueTest {
log.info("Value = 'value', ignore = true, partial = false", value.toString());
value = newSourceValue("eulaV", true, false);
-
- assertEquals(value.getPattern().pattern(), "eulaV");
+ final Pattern pattern = value.getPattern();
+ assert pattern != null;
+ assertEquals(pattern.pattern(), "eulaV");
assertFalse(value.isPartialMatch());
assertFalse(value.isCaseSensitive());
log.info("Value = 'eulaV', ignore = false, partial = true", value.toString());
@@ -68,8 +73,8 @@ public class SourceValueTest {
assertTrue(value.isIgnoreCase());
}
- public static SourceValue newSourceValue(final String value, final boolean ignoreCase, final boolean partialMatch)
- throws ComponentInitializationException {
+ @Nonnull public static SourceValue newSourceValue(final String value, final boolean ignoreCase,
+ final boolean partialMatch) throws ComponentInitializationException {
final SourceValue sourceValue = new SourceValue();
sourceValue.setValue(value);
@@ -79,4 +84,4 @@ public class SourceValueTest {
return sourceValue;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
index 22d93ba75..5b3e8d024 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
@@ -59,10 +59,13 @@ public class ValueMapTest {
map.setReturnValue("return");
Set<StringAttributeValue> result = map.apply("elephant");
+ assert result != null;
assertTrue(result.isEmpty());
result = map.apply("elephantvaluegiraffe");
+ assert result != null;
+
assertEquals(result.size(), 1);
assertTrue(result.contains(new StringAttributeValue("return")));
}
@@ -77,9 +80,11 @@ public class ValueMapTest {
map.setReturnValue("foo$1");
Set<StringAttributeValue> result = map.apply("elephant");
+ assert result != null;
assertTrue(result.isEmpty());
result = map.apply("Recursion");
+ assert result != null;
assertEquals(result.size(), 2);
assertTrue(result.contains(new StringAttributeValue("fooecursion")));
assertTrue(result.contains(new StringAttributeValue("foocursion")));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
index 4fdac47e9..453374eae 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
@@ -121,6 +121,7 @@ public class HTTPDataConnectorTest {
final Map<String,IdPAttribute> attrs = connector.resolve(context);
+ assert attrs != null;
assertEquals(attrs.size(), 2);
assertEquals(attrs.get("foo").getValues().size(), 1);
@@ -296,7 +297,7 @@ public class HTTPDataConnectorTest {
TestSources.SP_ENTITY_ID);
final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
+ assert attrs != null;
assertEquals(attrs.size(), 2);
assertEquals(attrs.get("foo").getValues().size(), 1);
@@ -388,6 +389,7 @@ public class HTTPDataConnectorTest {
final InputStream certStream = FileBackedHTTPMetadataResolver.class.getResourceAsStream(SCRIPT_PATH + cert);
final X509Certificate entityCert = X509Support.decodeCertificate(ByteStreams.toByteArray(certStream));
+ assert entityCert != null;
final X509Credential entityCredential = new BasicX509Credential(entityCert);
return new ExplicitKeyTrustEngine(new StaticCredentialResolver(entityCredential));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
index cf58b82db..ee4e26352 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
@@ -61,6 +61,7 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
final Map<String, IdPAttribute> attributes = connector.resolve(context);
+ assert attributes != null;
assertEquals(attributes.size(), 2);
List<IdPAttributeValue> attributeValues = attributes.get("SamlName").getValues();
@@ -88,4 +89,5 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
}
}
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
index 47dcdb806..b294bb013 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.util.Collections;
import java.util.Map;
+import javax.annotation.Nonnull;
import javax.script.ScriptException;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -44,7 +45,7 @@ import net.shibboleth.shared.scripting.EvaluableScript;
@SuppressWarnings("javadoc")
public class ScriptedDataConnectorTest {
- private EvaluableScript getScript(String fileName) throws IOException, ComponentInitializationException {
+ @Nonnull private EvaluableScript getScript(String fileName) throws IOException, ComponentInitializationException {
final String name = "/net/shibboleth/idp/attribute/resolver/impl/dc/" + fileName;
final EvaluableScript es = new EvaluableScript();
es.setEngineName("javascript");
@@ -62,6 +63,7 @@ public class ScriptedDataConnectorTest {
connector.initialize();
final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class, true);
+ assert context != null;
context.getSubcontext(AttributeResolverWorkContext.class, true);
connector.resolve(context);
@@ -81,9 +83,11 @@ public class ScriptedDataConnectorTest {
connector.initialize();
final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class, true);
+ assert context != null;
context.getSubcontext(AttributeResolverWorkContext.class, true);
final Map<String, IdPAttribute> result = connector.resolve(context);
-
+ assert result != null;
+
assertEquals(result.size(), 1);
assertEquals(result.get(attribute.getId()),attribute);
}
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
index b9b5d7eee..a9ddccb8c 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
@@ -77,8 +77,9 @@ public class StaticDataConnectorTest {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
- Map<String, IdPAttribute> result = connector.resolve(context);
-
+ final Map<String, IdPAttribute> result = connector.resolve(context);
+ assert result != null;
+
assertEquals(result.size(), 2);
assertTrue(result.containsKey("attribute"));
assertTrue(result.containsKey("thingy"));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
index 3ea77ff35..4c2335c19 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
@@ -364,7 +364,7 @@ public class LDAPDataConnectorTest {
TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
- assertNotNull(attrs);
+ assert attrs != null;
// check total attributes: uid, cn, sn, mail
assertEquals(attrs.size(), 4);
// check uid
@@ -394,7 +394,8 @@ public class LDAPDataConnectorTest {
TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
- assertNotNull(attrs);
+ assert attrs != null;
+
// check total attributes: uid, cn, sn, mail
assertEquals(attrs.size(), 4);
// check uid
@@ -546,7 +547,8 @@ public class LDAPDataConnectorTest {
TestSources.createResolutionContext("PHILIP_THE_PRINCIPAL", TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
- assertNotNull(attrs);
+ assert attrs != null;
+
// check total attributes: uid, cn, sn, mail
assertEquals(attrs.size(), 4);
// check uid
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
index 92e138e71..aea23948f 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
@@ -124,6 +124,8 @@ public class Regressions {
TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
+ assert attrs != null;
+
final List<IdPAttributeValue> values = attrs.get("mail").getValues();
assertEquals(values.size(), 4);
assertTrue(values.contains(new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
index d9b21f465..8d1218d3d 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
@@ -253,6 +253,8 @@ public class RDBMSDataConnectorTest {
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
+ assert attrs != null;
+
// check total attributes: userid, name, homephone, mail
assertTrue(attrs.size() == 4);
// check userid
@@ -359,6 +361,8 @@ public class RDBMSDataConnectorTest {
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
+ assert attrs != null;
+
// check total attributes: name
assertTrue(attrs.size() == 1);
// check name
@@ -382,6 +386,8 @@ public class RDBMSDataConnectorTest {
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> attrs = connector.resolve(context);
+ assert attrs != null;
+
// check total attributes: userid, name, homephone, mail
assertTrue(attrs.size() == 4);
// check userid
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
index c4fb88653..bea83117d 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
@@ -90,7 +90,7 @@ public class StorageServiceDataConnectorTest {
TestSources.SP_ENTITY_ID);
final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
+ assert attrs != null;
assertTrue(attrs.isEmpty());
}
@@ -132,7 +132,7 @@ public class StorageServiceDataConnectorTest {
TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
+ assert attrs != null;
assertEquals(attrs.size(), 1);
assertEquals(attrs.get("foobar").getValues().size(), 1);
@@ -189,9 +189,9 @@ public class StorageServiceDataConnectorTest {
TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
TestSources.SP_ENTITY_ID);
final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
- assertEquals(attrs.size(), 2);
+ assert attrs != null;
+ assertEquals(attrs.size(), 2);
assertEquals(attrs.get("foo").getValues().size(), 1);
assertEquals(((StringAttributeValue) attrs.get("foo").getValues().get(0)).getValue(), "foo1");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
index acd9b5757..51e5c7505 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
@@ -104,7 +104,8 @@ public class AttributeResolutionContextTest {
@Test public void lookupsParent() {
final ProfileRequestContext profileCtx = new ProfileRequestContext();
final AttributeResolutionContext context = profileCtx.getSubcontext(AttributeResolutionContext.class, true);
-
+ assert context != null;
+
context.setPrincipal(THE_PRINCIPAL);
context.setAttributeIssuerID(THE_ISSUER);
context.setAttributeRecipientID(THE_RECIPIENT);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
index adf102db6..ad259f1e8 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
@@ -221,7 +221,7 @@ public class AttributeResolverImplTest {
// IDP-1623 Connector 4 contributes nullness
final StaticDataConnector connector4 = new StaticDataConnector() {
- public java.util.Map<String,IdPAttribute> doDataConnectorResolve(@Nonnull final AttributeResolutionContext resolutionContext,
+ @Nonnull public Map<String,IdPAttribute> doDataConnectorResolve(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
return null;
}
@@ -1055,8 +1055,8 @@ public class AttributeResolverImplTest {
@Nullable protected IdPAttribute doAttributeDefinitionResolve(
@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
- AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class);
- assertNotNull(context);
+ final AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class);
+ assert context != null;
assertEquals(context.getIdPAttributes().size(), 1);
assertTrue(context.getIdPAttributes().containsKey(preResolvedName));
return super.doAttributeDefinitionResolve(resolutionContext, workContext);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
index ff1b9c285..363070b16 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
@@ -44,7 +44,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.buildResolutionContext(ResolverTestSupport.buildAttributeDefinition(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final List<IdPAttributeValue> result =
PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -63,7 +64,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.buildResolutionContext(ResolverTestSupport.buildAttributeDefinition(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final List<IdPAttributeValue> result =
PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -84,7 +86,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
depend.setAttributeNames(Collections.singletonList(ResolverTestSupport.EPE_ATTRIB_ID));
@@ -108,7 +111,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
depend.setAttributeNames(Collections.singleton(ResolverTestSupport.EPE_ATTRIB_ID));
@@ -132,7 +136,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
depend.setAttributeNames(List.of(ResolverTestSupport.EPE_ATTRIB_ID, ResolverTestSupport.EPA_ATTRIB_ID));
@@ -159,7 +164,8 @@ public class PluginDependencySupportTest {
ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
depend.setAllAttributes(true);
@@ -191,7 +197,8 @@ public class PluginDependencySupportTest {
final AttributeResolutionContext resolutionContext =
ResolverTestSupport.buildResolutionContext(connector1, definition1);
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency dependConnector = new ResolverDataConnectorDependency("connector1");
@@ -223,7 +230,8 @@ public class PluginDependencySupportTest {
final AttributeResolutionContext resolutionContext =
ResolverTestSupport.buildResolutionContext(connector1, definition1);
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
depend.setAllAttributes(true);
@@ -263,7 +271,8 @@ public class PluginDependencySupportTest {
final AttributeResolutionContext resolutionContext =
ResolverTestSupport.buildResolutionContext(connector1, definition1);
final AttributeResolverWorkContext workContext =
- resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+ resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+ assert workContext != null;
final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
@@ -333,5 +342,6 @@ public class PluginDependencySupportTest {
Assert.assertNotEquals(dc1.hashCode(), dc2.hashCode());
Assert.assertNotEquals(dc2.hashCode(), dc3.hashCode());
-}
-}
+ }
+
+}
\ No newline at end of file
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
index 323c391df..8d1e479e6 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
@@ -44,80 +44,81 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.annotation.constraint.NullableElements;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Basic data sources for testing the attribute generators. */
public final class TestSources {
/** The name we use in this test for the static connector. */
- public static final String STATIC_CONNECTOR_NAME = "staticCon";
+ @Nonnull @NotEmpty public static final String STATIC_CONNECTOR_NAME = "staticCon";
/** The name of the attribute we use as source. */
- public static final String DEPENDS_ON_ATTRIBUTE_NAME_ATTR = "at1";
+ @Nonnull @NotEmpty public static final String DEPENDS_ON_ATTRIBUTE_NAME_ATTR = "at1";
/** The name of the connector we use as source. */
- public static final String DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR = "ac1";
+ @Nonnull @NotEmpty public static final String DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR = "ac1";
/** The name of another attribute we use as source. */
- public static final String DEPENDS_ON_SECOND_ATTRIBUTE_NAME = "at2";
+ @Nonnull @NotEmpty public static final String DEPENDS_ON_SECOND_ATTRIBUTE_NAME = "at2";
/** Another attributes values. */
- public static final String[] SECOND_ATTRIBUTE_VALUE_STRINGS = {"at2-Val1", "at2-Val2"};
+ @Nonnull @NotEmpty public static final String[] SECOND_ATTRIBUTE_VALUE_STRINGS = {"at2-Val1", "at2-Val2"};
/** Some test attributes. */
- public static final StringAttributeValue[] SECOND_ATTRIBUTE_VALUE_RESULTS = {
+ @Nonnull public static final StringAttributeValue[] SECOND_ATTRIBUTE_VALUE_RESULTS = {
new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),
new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),};
/** A value from both providers. */
- public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
+ @Nonnull @NotEmpty public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
/** A test attribute value. */
- public static final StringAttributeValue COMMON_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+ @Nonnull public static final StringAttributeValue COMMON_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
COMMON_ATTRIBUTE_VALUE_STRING);
/** A value from the connector. */
- public static final String CONNECTOR_ATTRIBUTE_VALUE_STRING = "at1-Connector";
+ @Nonnull @NotEmpty public static final String CONNECTOR_ATTRIBUTE_VALUE_STRING = "at1-Connector";
/** A test attribute value. */
- public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+ @Nonnull public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
CONNECTOR_ATTRIBUTE_VALUE_STRING);
/** A value from the attribute. */
- public static final String ATTRIBUTE_ATTRIBUTE_VALUE_STRING = "at1-Attribute";
+ @Nonnull @NotEmpty public static final String ATTRIBUTE_ATTRIBUTE_VALUE_STRING = "at1-Attribute";
/** A test attribute value. */
- public static final StringAttributeValue ATTRIBUTE_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+ @Nonnull public static final StringAttributeValue ATTRIBUTE_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
ATTRIBUTE_ATTRIBUTE_VALUE_STRING);
/** Regexp (as string). for CONNECTOR_ATTRIBUTE_VALUE (for map and regexp testing). */
- public static final String CONNECTOR_ATTRIBUTE_VALUE_REGEXP = "at1-(.+)or";
+ @Nonnull @NotEmpty public static final String CONNECTOR_ATTRIBUTE_VALUE_REGEXP = "at1-(.+)or";
/** Regexp. for CONNECTOR_ATTRIBUTE_VALUE (for map and regexp testing). */
- public static final Pattern CONNECTOR_ATTRIBUTE_VALUE_REGEXP_PATTERN = Pattern
+ @Nonnull public static final Pattern CONNECTOR_ATTRIBUTE_VALUE_REGEXP_PATTERN = Pattern
.compile(CONNECTOR_ATTRIBUTE_VALUE_REGEXP);
/** Result from a regexp. */
- public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_REGEXP_RESULT = new StringAttributeValue(
+ @Nonnull public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_REGEXP_RESULT = new StringAttributeValue(
"Connect");
/** Principal name for Principal method tests */
- public static final String TEST_PRINCIPAL = "PrincipalName";
+ @Nonnull @NotEmpty public static final String TEST_PRINCIPAL = "PrincipalName";
/** Relying party name for Principal method tests */
- public static final String TEST_RELYING_PARTY = "RP1";
+ @Nonnull @NotEmpty public static final String TEST_RELYING_PARTY = "RP1";
/** Authentication method for Principal method tests */
- public static final String TEST_AUTHN_METHOD = "AuthNmEthod";
+ @Nonnull @NotEmpty public static final String TEST_AUTHN_METHOD = "AuthNmEthod";
/** A standard IdP EntityID */
- 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";
/** A standard Principal Name*/
- public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
+ @Nonnull @NotEmpty public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
/** A standard SP EntityID */
- 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";
/** Constructor. */
private TestSources() {
@@ -130,7 +131,7 @@ public final class TestSources {
* @return The connector
* @throws ComponentInitializationException if we cannot initialized (unlikely)
*/
- public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
+ @Nonnull public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
throws ComponentInitializationException {
final StaticDataConnector connector = new StaticDataConnector();
@@ -147,7 +148,7 @@ public final class TestSources {
* @return The connector
* @throws ComponentInitializationException if we cannot initialized (unlikely)
*/
- public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
+ @Nonnull public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
List<IdPAttribute> attributeSet = new ArrayList<>(2);
IdPAttribute attr = new IdPAttribute(DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR);
@@ -169,7 +170,7 @@ public final class TestSources {
* @return the attribute definition
* @throws ComponentInitializationException if we cannot initialized (unlikely)
*/
- public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
+ @Nonnull public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
return populatedStaticAttribute(DEPENDS_ON_ATTRIBUTE_NAME_ATTR, 2);
}
@@ -179,7 +180,7 @@ public final class TestSources {
* @return the definition
* @throws ComponentInitializationException if intialization fails
*/
- public static AttributeDefinition populatedStaticAttribute(String attributeName,
+ @Nonnull public static AttributeDefinition populatedStaticAttribute(String attributeName,
int attributeValuesCount) throws ComponentInitializationException {
final List<IdPAttributeValue> valuesList = new ArrayList<>();
@@ -206,7 +207,7 @@ public final class TestSources {
* @return the attribute definition
* @throws ComponentInitializationException if we cannot initialized (unlikely)
*/
- public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
+ @Nonnull public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
throws ComponentInitializationException {
final StaticAttributeDefinition definition = new StaticAttributeDefinition();
@@ -222,7 +223,7 @@ public final class TestSources {
* @param recipientId the recipient
* @return the context
*/
- public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
+ @Nonnull public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
String recipientId) {
ProfileRequestContext parent = new ProfileRequestContext();
AttributeResolutionContext retVal = parent.getSubcontext(AttributeResolutionContext.class, true);
@@ -239,9 +240,8 @@ public final class TestSources {
* @param attributeId what to depend on
* @return the dependency
*/
- public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(String attributeId) {
- ResolverAttributeDefinitionDependency retVal = new ResolverAttributeDefinitionDependency(attributeId);
- return retVal;
+ @Nonnull public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(String attributeId) {
+ return new ResolverAttributeDefinitionDependency(attributeId);
}
/** Summon up appropriate {@link ResolverDataConnectorDependency}.
@@ -249,7 +249,7 @@ public final class TestSources {
* @param attributeId attribute to depend on
* @return the dependency
*/
- public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
+ @Nonnull public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
ResolverDataConnectorDependency retVal = new ResolverDataConnectorDependency(connectorId);
if (null == attributeId) {
retVal.setAllAttributes(true);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list