[java-shib-attribute] 04/04: IDP-2069, JSSH-27 Null Handling Task, use ensureId
Rod Widdowson
rdw at steadingsoftware.com
Sat Apr 29 10:36:41 UTC 2023
This is an automated email from the git hooks/post-receive script.
rdw 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=b6b7fad86f2a347cc6c3fc2593345aed9e22d824
commit b6b7fad86f2a347cc6c3fc2593345aed9e22d824
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Apr 29 11:29:17 2023 +0100
IDP-2069, JSSH-27 Null Handling Task, use ensureId
https://shibboleth.atlassian.net/browse/IDP-2069
https://shibboleth.atlassian.net/browse/JSSH-27
Take a sweep acorss resolver-api and resolver-impl cleaning up a lot
of warnings.
---
.../dc/ldap/StringAttributeValueMappingStrategy.java | 1 +
.../ldap/TemplatedExecutableSearchFilterBuilder.java | 15 +++++++++------
.../dc/rdbms/AbstractExecutableStatementBuilder.java | 8 ++++++--
.../dc/rdbms/StringResultMappingStrategy.java | 1 +
.../dc/rdbms/TemplatedExecutableStatementBuilder.java | 15 +++++++++------
.../resolver/ad/impl/DateTimeAttributeDefinition.java | 9 +++++----
.../ad/impl/DecryptedAttributeDefinition.java | 2 +-
.../ad/impl/PrescopedAttributeDefinition.java | 7 +++++--
.../ad/impl/RegexSplitAttributeDefinition.java | 2 +-
.../resolver/ad/impl/ScopedAttributeDefinition.java | 14 +++++++++++---
.../resolver/ad/impl/ScriptedAttributeDefinition.java | 9 ++++++---
.../resolver/ad/impl/ScriptedIdPAttributeImpl.java | 10 +++++-----
.../resolver/ad/impl/StaticAttributeDefinition.java | 2 +-
.../resolver/ad/impl/TemplateAttributeDefinition.java | 4 +++-
.../resolver/dc/http/impl/TemplatedBodyBuilder.java | 18 ++++++++++++------
.../resolver/dc/http/impl/TemplatedURLBuilder.java | 8 +++++---
.../resolver/dc/impl/ScriptedDataConnector.java | 15 ++++++++++-----
.../resolver/dc/ldap/impl/LDAPDataConnector.java | 6 ++++--
.../dc/storage/impl/TemplatedSearchBuilder.java | 19 +++++++++++++------
.../resolver/impl/AttributeResolverImpl.java | 14 +++++++++-----
20 files changed, 117 insertions(+), 62 deletions(-)
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
index 48ca3414c..a2669b549 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
@@ -75,6 +75,7 @@ public class StringAttributeValueMappingStrategy extends AbstractMappingStrategy
final String originalId = attr.getName();
final String effectiveId = aliases.containsKey(originalId) ? aliases.get(originalId) : originalId;
+ assert effectiveId != null;
if (log.isDebugEnabled()) {
if (!effectiveId.equals(originalId)) {
log.debug("Remapping attribute {} to {}", originalId, effectiveId);
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 861b24c54..49226624d 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
@@ -55,13 +55,13 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
private final Logger log = LoggerFactory.getLogger(TemplatedExecutableSearchFilterBuilder.class);
/** Template evaluated to generate a search filter. */
- private Template template;
+ @NonnullAfterInit private Template template;
/** Template (as Text) to be evaluated. */
- private String templateText;
+ @NonnullAfterInit private String templateText;
/** VelocityEngine. */
- private VelocityEngine engine;
+ @NonnullAfterInit private VelocityEngine engine;
/** Event handler used for escaping. */
private ReferenceInsertionEventHandler eventHandler = new EscapingReferenceInsertionEventHandler();
@@ -221,15 +221,18 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (null == engine) {
+ final VelocityEngine localEngine = engine;
+ final String localTemplateText = templateText;
+ if (null == localEngine) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: no velocity engine was configured");
- } else if (null == templateText) {
+ }
+ if (null == localTemplateText) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: template text must be non null");
}
- template = Template.fromTemplate(engine, templateText);
+ template = Template.fromTemplate(localEngine, localTemplateText);
}
/** Escapes LDAP attribute values added to the template context. */
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 f173c4e62..bcfd71f1c 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
@@ -46,7 +46,9 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
/** Constructor. */
public AbstractExecutableStatementBuilder() {
- queryTimeout = Duration.ofSeconds(5);
+ final Duration fiveSecs = Duration.ofSeconds(5);
+ assert fiveSecs != null;
+ queryTimeout = fiveSecs;
}
/**
@@ -100,7 +102,9 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
@Nonnull public ResultSet execute(@Nonnull final Connection connection) throws SQLException {
final Statement stmt = connection.createStatement();
stmt.setQueryTimeout((int) queryTimeout.toSeconds());
- return stmt.executeQuery(query);
+ final ResultSet resultSet = stmt.executeQuery(query);
+ assert resultSet!= null;
+ return resultSet;
}
/** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
index 44b553eee..188bb50f4 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
@@ -81,6 +81,7 @@ public class StringResultMappingStrategy extends AbstractMappingStrategy<ResultS
final String originalId = resultMetadata.getColumnName(i);
final String effectiveId = aliases.containsKey(originalId) ? aliases.get(originalId) : originalId;
+ assert effectiveId != null;
if (log.isDebugEnabled()) {
if (!effectiveId.equals(originalId)) {
log.debug("Remapping column {} to {}", originalId, effectiveId);
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 0ebbf2f1c..f2005655f 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
@@ -54,13 +54,13 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
private final Logger log = LoggerFactory.getLogger(TemplatedExecutableStatementBuilder.class);
/** Template to be evaluated. */
- private Template template;
+ @NonnullAfterInit private Template template;
/** Template (as Text) to be evaluated. */
- private String templateText;
+ @NonnullAfterInit private String templateText;
/** VelocityEngine. */
- private VelocityEngine engine;
+ @NonnullAfterInit private VelocityEngine engine;
/** Event handler used for escaping. */
private ReferenceInsertionEventHandler eventHandler = new EscapingReferenceInsertionEventHandler();
@@ -219,15 +219,18 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (null == engine) {
+ final VelocityEngine localEngine = engine;
+ final String localTemplateText = templateText;
+ if (null == localEngine) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: no velocity engine was configured");
- } else if (null == templateText) {
+ }
+ if (null == localTemplateText) {
throw new ComponentInitializationException(
"TemplatedExecutableStatementBuilder: Template text must be non null");
}
- template = Template.fromTemplate(engine, templateText);
+ template = Template.fromTemplate(localEngine, localTemplateText);
}
/** Escapes SQL values added to the template context. */
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 f04da659c..842a95dc3 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
@@ -151,12 +151,12 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
- final IdPAttribute result = new IdPAttribute(getId());
+ final IdPAttribute result = new IdPAttribute(ensureId());
final List<IdPAttributeValue> values = PluginDependencySupport.getMergedAttributeValues(workContext,
getAttributeDependencies(),
getDataConnectorDependencies(),
- getId());
+ ensureId());
final List<? extends IdPAttributeValue> converted = values.stream()
.map(v -> convert(v))
@@ -192,8 +192,9 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
try {
final Long longValue = Long.valueOf(stringValue);
- return new DateTimeAttributeValue(
- epochInSeconds ? Instant.ofEpochSecond(longValue) : Instant.ofEpochMilli(longValue));
+ final Instant val = epochInSeconds ? Instant.ofEpochSecond(longValue) : Instant.ofEpochMilli(longValue);
+ assert val != null;
+ return new DateTimeAttributeValue(val);
} catch (final DateTimeException e) {
log.info("{} Epoch value was out of range", getLogPrefix(), e);
return null;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
index 29b444900..6607a8ba6 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
@@ -117,7 +117,7 @@ public class DecryptedAttributeDefinition extends AbstractAttributeDefinition {
}
}
- final IdPAttribute decryptedAttribute = new IdPAttribute(getId());
+ final IdPAttribute decryptedAttribute = new IdPAttribute(ensureId());
decryptedAttribute.setValues(decryptedValues);
return decryptedAttribute;
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 3ccc7938f..fd7e391c0 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
@@ -85,7 +85,7 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
Constraint.isNotNull(workContext, getLogPrefix() + " AttributeResolverWorkContext cannot be null");
checkComponentActive();
- final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+ final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
final List<IdPAttributeValue> dependencyValues =
PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -137,7 +137,10 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
log.debug("{} Value '{}' was split into {} at scope delimiter '{}'",
new Object[] {getLogPrefix(), value.getValue(), stringValues, scopeDelimiter,});
- return ScopedStringAttributeValue.valueOf(stringValues[0], stringValues[1]);
+ final String val0 = stringValues[0];
+ final String val1 = stringValues[1];
+ assert val1 != null && val0 != null;
+ return ScopedStringAttributeValue.valueOf(val0, val1);
}
/** {@inheritDoc} */
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 ac4ed347c..521a660d4 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
@@ -86,7 +86,7 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
checkComponentActive();
final List<IdPAttributeValue> resultantValues = new ArrayList<>();
- final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+ final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
final List<IdPAttributeValue> dependencyValues =
PluginDependencySupport.getMergedAttributeValues(workContext,
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 10faf058c..6ce315778 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
@@ -96,6 +96,15 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
return scopeSource;
}
+ /** Null safe getter for {@link #nonScopeAttributeDependencies}.
+ * @return Returns the nonScopeAttributeDependencies.
+ */
+ @Nonnull private Collection<ResolverAttributeDefinitionDependency> getNonScopeAttributeDependencies() {
+ checkComponentActive();
+ assert nonScopeAttributeDependencies!=null;
+ return nonScopeAttributeDependencies;
+ }
+
/**
* Set the source of the scope for this definition.
*
@@ -156,7 +165,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
checkComponentActive();
- final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+ final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
final String scopeValue;
if (scopeSource == null) {
scopeValue = scope;
@@ -167,10 +176,9 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
if (scopeValue == null) {
throw new ResolutionException(getLogPrefix() + " Scope was null or empty");
}
-
final List<IdPAttributeValue> dependencyValues =
PluginDependencySupport.getMergedAttributeValues(workContext,
- nonScopeAttributeDependencies,
+ getNonScopeAttributeDependencies(),
getDataConnectorDependencies(),
ensureId());
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 003b79ac7..ec4a6e25c 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
@@ -18,7 +18,6 @@
package net.shibboleth.idp.attribute.resolver.ad.impl;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -217,9 +216,11 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
return;
}
+ final AttributeResolverWorkContext input1 = (AttributeResolverWorkContext) input[1];
+ assert input1!=null;
final Map<String, List<IdPAttributeValue>> dependencyAttributes =
PluginDependencySupport.getAllAttributeValues(
- (AttributeResolverWorkContext) input[1],
+ input1,
getAttributeDependencies(),
getDataConnectorDependencies());
@@ -246,7 +247,9 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
- final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
+ final String key = dependencyAttribute.getKey();
+ assert key != null;
+ final IdPAttribute pseudoAttribute = new IdPAttribute(key);
pseudoAttribute.setValues(dependencyAttribute.getValue());
scriptContext.setAttribute(dependencyAttribute.getKey(),
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
index 963c66f65..0cdedf747 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
@@ -50,7 +50,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
/** The {@link IdPAttribute} we are encapsulating. */
- private final IdPAttribute encapsulatedAttribute;
+ @Nonnull private final IdPAttribute encapsulatedAttribute;
/** Logger. */
private final Logger log = LoggerFactory.getLogger(ScriptedIdPAttributeImpl.class);
@@ -69,7 +69,7 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
private List<Object> attributeValues;
/** The prefix for logging. Derived from the definition's logPrefix and the attribute ID. */
- private final String logPrefix;
+ @Nonnull final String logPrefix;
/**
* Constructor.
@@ -79,10 +79,10 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
*/
public ScriptedIdPAttributeImpl(@Nonnull final IdPAttribute attribute, final String prefix) {
encapsulatedAttribute = attribute;
-
- logPrefix =
- new StringBuilder(prefix).append(" scripted attribute '").append(attribute.getId()).append("':")
+ final String lpf = new StringBuilder(prefix).append(" scripted attribute '").append(attribute.getId()).append("':")
.toString();
+ assert lpf != null;
+ logPrefix=lpf;
}
/**
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 72b9bb46a..2c754e569 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
@@ -68,7 +68,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
@Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
checkComponentActive();
log.debug("{} resolving static attribute {}", getLogPrefix(), value);
-
+ assert value!=null;
return value;
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
index 5df6ae384..1bdf0175a 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
@@ -258,7 +258,9 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
int valueCount = 0;
for (final Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet() ) {
- valueCount = addAttributeValues(entry.getKey(), entry.getValue(), sourceValues, valueCount);
+ final String key = entry.getKey();
+ assert key != null;
+ valueCount = addAttributeValues(key, entry.getValue(), sourceValues, valueCount);
}
return valueCount;
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 4d1237f23..73eaf60aa 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
@@ -284,21 +284,24 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (null == engine) {
+ final VelocityEngine localEngine = engine;
+ final String localUrlTemplateText = urlTemplateText;
+ final String localBodyTemplateText = bodyTemplateText;
+ if (null == localEngine) {
throw new ComponentInitializationException("Velocity engine cannot be null");
}
- if (null == urlTemplateText) {
+ if (null == localUrlTemplateText) {
throw new ComponentInitializationException("URL template text cannot be null");
- } else if (null == bodyTemplateText) {
+ } else if (null == localBodyTemplateText) {
throw new ComponentInitializationException("Body template text cannot be null");
}
- urlTemplate = Template.fromTemplate(engine, urlTemplateText);
- bodyTemplate = Template.fromTemplate(engine, bodyTemplateText);
+ urlTemplate = Template.fromTemplate(localEngine, localUrlTemplateText);
+ bodyTemplate = Template.fromTemplate(localEngine, localBodyTemplateText);
if (null != cacheKeyTemplateText) {
- cacheKeyTemplate = Template.fromTemplate(engine, cacheKeyTemplateText);
+ cacheKeyTemplate = Template.fromTemplate(localEngine, cacheKeyTemplateText);
}
contentType = ContentType.create(mimeType, charset);
@@ -322,6 +325,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
@Nonnull protected ClassicHttpRequest getHttpRequest(@Nonnull final AttributeResolutionContext resolutionContext,
@Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
+ checkComponentActive();
final VelocityContext context = new VelocityContext();
log.trace("Creating request using attribute resolution context {}", resolutionContext);
context.put("resolutionContext", resolutionContext);
@@ -351,7 +355,9 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
final ClassicHttpRequest request;
try {
+ assert urlTemplate!=null;
url = merge(urlTemplate, context);
+ assert bodyTemplate!=null;
body = merge(bodyTemplate, context);
} catch (final VelocityException e) {
log.error("Error running template engine: {}", e.getMessage());
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index c2fdcba2e..86b03718b 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -145,16 +145,18 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
/** {@inheritDoc} */
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
+ final VelocityEngine localEngine = engine;
+ final String localTemplateText = templateText;
- if (null == engine) {
+ if (null == localEngine) {
throw new ComponentInitializationException("Velocity engine cannot be null");
}
- if (null == templateText) {
+ if (null == localTemplateText) {
throw new ComponentInitializationException("Template text cannot be null");
}
- template = Template.fromTemplate(engine, templateText);
+ template = Template.fromTemplate(localEngine, localTemplateText);
}
/**
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 63cc735be..638283c41 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
@@ -205,10 +205,13 @@ public class ScriptedDataConnector extends AbstractDataConnector {
log.debug("{} Adding current attribute resolution contexts to script context", getLogPrefix());
scriptContext.setAttribute("resolutionContext", input[0], ScriptContext.ENGINE_SCOPE);
+
+ final AttributeResolutionContext input0 = (AttributeResolutionContext) input[0];
+ final AttributeResolverWorkContext input1 = (AttributeResolverWorkContext) input[1];
+ assert input0!=null && input1!=null;
final ProfileRequestContext prc =
- ((AttributeResolutionContext) input[0]).getProfileRequestContextLookupStrategy().apply(
- (AttributeResolutionContext) input[0]);
+ input0.getProfileRequestContextLookupStrategy().apply(input0);
if (null == prc) {
log.error("{} ProfileRequestContext could not be located", getLogPrefix());
}
@@ -216,14 +219,16 @@ public class ScriptedDataConnector extends AbstractDataConnector {
final Map<String, List<IdPAttributeValue>> dependencyAttributes =
PluginDependencySupport.getAllAttributeValues(
- (AttributeResolverWorkContext) input[1],
+ input1,
getAttributeDependencies(),
getDataConnectorDependencies());
for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
+ final String key = dependencyAttribute.getKey();
+ assert key != null;
log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
- new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
- final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
+ new Object[] {getLogPrefix(), key, dependencyAttribute.getValue(),});
+ final IdPAttribute pseudoAttribute = new IdPAttribute(key);
pseudoAttribute.setValues(dependencyAttribute.getValue());
scriptContext.setAttribute(dependencyAttribute.getKey(), new ScriptedIdPAttributeImpl(pseudoAttribute,
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 43985af99..8b6be5aa1 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
@@ -42,6 +42,7 @@ import net.shibboleth.idp.attribute.resolver.dc.impl.AbstractSearchDataConnector
import net.shibboleth.idp.attribute.resolver.dc.ldap.ExecutableSearchFilter;
import net.shibboleth.idp.attribute.resolver.dc.ldap.SearchResultMappingStrategy;
import net.shibboleth.idp.attribute.resolver.dc.ldap.StringAttributeValueMappingStrategy;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.LoggerFactory;
@@ -56,10 +57,10 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
@Nonnull private final Logger log = LoggerFactory.getLogger(LDAPDataConnector.class);
/** Factory for retrieving LDAP connections. */
- private ConnectionFactory connectionFactory;
+ @NonnullAfterInit private ConnectionFactory connectionFactory;
/** For executing LDAP searches. */
- private SearchOperation searchOperation;
+ @NonnullAfterInit private SearchOperation searchOperation;
/** Whether the default validator is being used. */
private boolean defaultValidator = true;
@@ -197,6 +198,7 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
}
try {
+ assert searchOperation!=null && connectionFactory!=null;
final SearchResponse result = filter.execute(searchOperation, connectionFactory);
log.trace("{} Search returned {}", getLogPrefix(), result);
return getMappingStrategy().map(result);
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 99fa75eeb..663864799 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
@@ -162,17 +162,21 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
/** {@inheritDoc} */
@Override protected void doInitialize() throws ComponentInitializationException {
+
+ final VelocityEngine localEngine = engine;
+ final String localKeyTemplateText = keyTemplateText;
+ final String localContextTemplateText = contextTemplateText;
- if (null == engine) {
+ if (null == localEngine) {
throw new ComponentInitializationException("Velocity engine cannot be null");
- } else if (null == contextTemplateText) {
+ } else if (null == localContextTemplateText) {
throw new ComponentInitializationException("Context template text cannot be null");
- } else if (null == keyTemplateText) {
+ } else if (null == localKeyTemplateText) {
throw new ComponentInitializationException("Key template text cannot be null");
}
- contextTemplate = Template.fromTemplate(engine, contextTemplateText);
- keyTemplate = Template.fromTemplate(engine, keyTemplateText);
+ contextTemplate = Template.fromTemplate(localEngine, localContextTemplateText);
+ keyTemplate = Template.fromTemplate(localEngine, localKeyTemplateText);
}
/** {@inheritDoc} */
@@ -191,7 +195,10 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
/** {@inheritDoc} */
@Nullable public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
- return storageService.read(searchParams.context(), searchParams.key());
+ final String ctx = searchParams.context();
+ final String key = searchParams.key();
+ assert ctx != null && key!=null;
+ return storageService.read(ctx, key);
}
};
}
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 0d543721c..41ed70f9f 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
@@ -20,7 +20,6 @@ package net.shibboleth.idp.attribute.resolver.impl;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -361,7 +360,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
log.debug("{} Data connector '{}' invoking failover data connector '{}'", logPrefix, connectorId,
failoverDataConnectorId);
resolveDataConnector(failoverDataConnectorId, resolutionContext);
- workContext.recordFailoverResolution(connector, dataConnectors.get(failoverDataConnectorId));
+ final DataConnector dc = dataConnectors.get(failoverDataConnectorId);
+ assert dc!=null;
+ workContext.recordFailoverResolution(connector, dc);
return;
}
if (connector.isPropagateResolutionExceptions()) {
@@ -387,7 +388,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
failoverDataConnectorId, e);
}
resolveDataConnector(failoverDataConnectorId, resolutionContext);
- workContext.recordFailoverResolution(connector, dataConnectors.get(failoverDataConnectorId));
+ final DataConnector dc = dataConnectors.get(failoverDataConnectorId);
+ assert dc!=null;
+ workContext.recordFailoverResolution(connector, dc);
return;
}
// Pass it on. Do not look at propagateException because this is handled in the
@@ -583,8 +586,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
collectResolvedAttributes(resolvedAttributes, workContext, false) ;
collectExportingDataConnectors(resolvedAttributes, resolutionContext, workContext);
-
- resolutionContext.setResolvedIdPAttributes(resolvedAttributes.values());
+ final Collection<IdPAttribute> resolved = resolvedAttributes.values();
+ assert resolved !=null;
+ resolutionContext.setResolvedIdPAttributes(resolved);
}
/**
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list