You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2019/10/06 22:18:13 UTC
[logging-log4j2] 03/03: Remove return type of bind and inject
methods
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit cdf5d01d11c10be8851ba63650f8e23b0b33c177
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Oct 6 17:18:00 2019 -0500
Remove return type of bind and inject methods
This adds some docs as well.
Signed-off-by: Matt Sicker <bo...@gmail.com>
---
.../inject/PluginConfigurationInjector.java | 5 ++--
.../plugins/visitors/PluginAttributeVisitor.java | 29 ++++++++++++----------
.../visitors/PluginBuilderAttributeVisitor.java | 26 ++++++++++++-------
.../plugins/visitors/PluginElementVisitor.java | 13 +++++-----
.../config/plugins/visitors/PluginNodeVisitor.java | 11 +++++---
.../plugins/visitors/PluginValueVisitor.java | 4 +--
.../plugins/bind/AbstractConfigurationBinder.java | 12 ++++++---
.../log4j/plugins/bind/ConfigurationBinder.java | 22 ++++++++++++++--
.../log4j/plugins/bind/FactoryMethodBinder.java | 3 +--
.../plugins/bind/FieldConfigurationBinder.java | 23 ++++++++---------
.../plugins/bind/MethodConfigurationBinder.java | 7 +++---
.../plugins/inject/ConfigurationInjector.java | 10 +++++++-
.../plugins/inject/PluginAttributeInjector.java | 29 ++++++++++++----------
.../inject/PluginBuilderAttributeInjector.java | 26 ++++++++++++-------
.../plugins/inject/PluginElementInjector.java | 13 +++++-----
.../log4j/plugins/inject/PluginNodeInjector.java | 5 ++--
.../log4j/plugins/inject/PluginValueInjector.java | 4 +--
17 files changed, 149 insertions(+), 93 deletions(-)
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/inject/PluginConfigurationInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/inject/PluginConfigurationInjector.java
index e16f998..f7bbf34 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/inject/PluginConfigurationInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/inject/PluginConfigurationInjector.java
@@ -24,17 +24,16 @@ import org.apache.logging.log4j.plugins.inject.AbstractConfigurationInjector;
public class PluginConfigurationInjector extends AbstractConfigurationInjector<PluginConfiguration, Configuration> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
if (TypeUtil.isAssignable(conversionType, configuration.getClass())) {
debugLog.append("Configuration");
if (configuration.getName() != null) {
debugLog.append('(').append(configuration.getName()).append(')');
}
- return configurationBinder.bindObject(target, configuration);
+ configurationBinder.bindObject(factory, configuration);
} else {
LOGGER.warn("Element with type {} annotated with @PluginConfiguration is not compatible with type {}.",
conversionType, configuration.getClass());
- return target;
}
}
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java
index 538ab74..76e9c31 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.java
@@ -26,6 +26,7 @@ import org.apache.logging.log4j.util.Strings;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
@@ -60,26 +61,28 @@ public class PluginAttributeVisitor extends AbstractConfigurationInjector<Plugin
}
@Override
- public Object inject(final Object target) {
- return findAndRemoveNodeAttribute()
- .map(stringSubstitutionStrategy)
- .map(value -> configurationBinder.bindString(target, value))
- .orElseGet(() -> injectDefaultValue(target));
+ public void inject(final Object factory) {
+ final Optional<String> value = findAndRemoveNodeAttribute().map(stringSubstitutionStrategy);
+ if (value.isPresent()) {
+ configurationBinder.bindString(factory, value.get());
+ } else {
+ injectDefaultValue(factory);
+ }
}
- private Object injectDefaultValue(final Object target) {
+ private void injectDefaultValue(final Object factory) {
final Function<PluginAttribute, Object> extractor = DEFAULT_VALUE_EXTRACTORS.get(conversionType);
if (extractor != null) {
final Object value = extractor.apply(annotation);
debugLog(value);
- return configurationBinder.bindObject(target, value);
- }
- final String value = stringSubstitutionStrategy.apply(annotation.defaultString());
- if (Strings.isNotBlank(value)) {
- debugLog(value);
- return configurationBinder.bindString(target, value);
+ configurationBinder.bindObject(factory, value);
+ } else {
+ final String value = stringSubstitutionStrategy.apply(annotation.defaultString());
+ if (Strings.isNotBlank(value)) {
+ debugLog(value);
+ configurationBinder.bindString(factory, value);
+ }
}
- return target;
}
private void debugLog(final Object value) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java
index 533745c..dc3aa06 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.java
@@ -23,20 +23,28 @@ import org.apache.logging.log4j.plugins.inject.AbstractConfigurationInjector;
import org.apache.logging.log4j.util.NameUtil;
import org.apache.logging.log4j.util.StringBuilders;
+import java.util.Optional;
+
/**
* @deprecated Provided for support for PluginBuilderAttribute.
*/
// copy of PluginBuilderAttributeInjector
public class PluginBuilderAttributeVisitor extends AbstractConfigurationInjector<PluginBuilderAttribute, Configuration> {
@Override
- public Object inject(final Object target) {
- return findAndRemoveNodeAttribute()
- .map(stringSubstitutionStrategy)
- .map(value -> {
- String debugValue = annotation.sensitive() ? NameUtil.md5(value + getClass().getName()) : value;
- StringBuilders.appendKeyDqValue(debugLog, name, debugValue);
- return configurationBinder.bindString(target, value);
- })
- .orElseGet(() -> configurationBinder.bindObject(target, null));
+ public void inject(final Object factory) {
+ final Optional<String> value = findAndRemoveNodeAttribute().map(stringSubstitutionStrategy);
+ if (value.isPresent()) {
+ final String str = value.get();
+ debugLog(str);
+ configurationBinder.bindString(factory, str);
+ } else {
+ debugLog.append(name).append("=null");
+ configurationBinder.bindObject(factory, null);
+ }
+ }
+
+ private void debugLog(final Object value) {
+ final Object debugValue = annotation.sensitive() ? NameUtil.md5(value + getClass().getName()) : value;
+ StringBuilders.appendKeyDqValue(debugLog, name, debugValue);
}
}
\ No newline at end of file
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
index 8e8d2ef..90dc00e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
@@ -38,7 +38,7 @@ import java.util.Optional;
// copy of PluginElementInjector
public class PluginElementVisitor extends AbstractConfigurationInjector<PluginElement, Configuration> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
final Optional<Class<?>> componentType = getComponentType(conversionType);
if (componentType.isPresent()) {
final Class<?> compType = componentType.get();
@@ -61,7 +61,8 @@ public class PluginElementVisitor extends AbstractConfigurationInjector<PluginEl
Object[] children = (Object[]) childObject;
debugLog.append(Arrays.toString(children)).append('}');
node.getChildren().removeAll(used);
- return configurationBinder.bindObject(target, children);
+ configurationBinder.bindObject(factory, children);
+ return;
} else {
debugLog.append(child.toString());
values.add(childObject);
@@ -71,7 +72,7 @@ public class PluginElementVisitor extends AbstractConfigurationInjector<PluginEl
debugLog.append('}');
if (!values.isEmpty() && !TypeUtil.isAssignable(compType, values.get(0).getClass())) {
LOGGER.error("Cannot assign element {} a list of {} as it is incompatible with {}", name, values.get(0).getClass(), compType);
- return null;
+ return;
}
node.getChildren().removeAll(used);
// using List::toArray here would cause type mismatch later on
@@ -79,17 +80,17 @@ public class PluginElementVisitor extends AbstractConfigurationInjector<PluginEl
for (int i = 0; i < vals.length; i++) {
vals[i] = values.get(i);
}
- return configurationBinder.bindObject(target, vals);
+ configurationBinder.bindObject(factory, vals);
} else {
final Optional<Node> matchingChild = node.getChildren().stream().filter(this::isRequestedNode).findAny();
if (matchingChild.isPresent()) {
final Node child = matchingChild.get();
debugLog.append(child.getName()).append('(').append(child.toString()).append(')');
node.getChildren().remove(child);
- return configurationBinder.bindObject(target, child.getObject());
+ configurationBinder.bindObject(factory, child.getObject());
} else {
debugLog.append(name).append("=null");
- return configurationBinder.bindObject(target, null);
+ configurationBinder.bindObject(factory, null);
}
}
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java
index 3bfb7ce..f2f25f0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.java
@@ -20,6 +20,7 @@ package org.apache.logging.log4j.core.config.plugins.visitors;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.PluginNode;
import org.apache.logging.log4j.plugins.inject.AbstractConfigurationInjector;
+import org.apache.logging.log4j.plugins.util.TypeUtil;
/**
* @deprecated Provided to support legacy plugins.
@@ -27,8 +28,12 @@ import org.apache.logging.log4j.plugins.inject.AbstractConfigurationInjector;
// copy of PluginNodeInjector
public class PluginNodeVisitor extends AbstractConfigurationInjector<PluginNode, Configuration> {
@Override
- public Object inject(final Object target) {
- debugLog.append("Node=").append(node.getName());
- return configurationBinder.bindObject(target, node);
+ public void inject(final Object factory) {
+ if (TypeUtil.isAssignable(conversionType, node.getClass())) {
+ debugLog.append("Node=").append(node.getName());
+ configurationBinder.bindObject(factory, node);
+ } else {
+ LOGGER.error("Element with type {} annotated with @PluginNode not compatible with type {}.", conversionType, node.getClass());
+ }
}
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java
index bd7dad9..c2ba2ab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.util.Strings;
// copy of PluginValueInjector
public class PluginValueVisitor extends AbstractConfigurationInjector<PluginValue, Configuration> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
final String elementValue = node.getValue();
final String attributeValue = node.getAttributes().get(name);
String rawValue = null; // if neither is specified, return null (LOG4J2-1313)
@@ -45,6 +45,6 @@ public class PluginValueVisitor extends AbstractConfigurationInjector<PluginValu
}
final String value = stringSubstitutionStrategy.apply(rawValue);
StringBuilders.appendKeyDqValue(debugLog, name, value);
- return configurationBinder.bindString(target, value);
+ configurationBinder.bindString(factory, value);
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/AbstractConfigurationBinder.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/AbstractConfigurationBinder.java
index ff0f9b7..e2a9cfc 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/AbstractConfigurationBinder.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/AbstractConfigurationBinder.java
@@ -31,6 +31,12 @@ import java.util.Collection;
import java.util.Objects;
import java.util.function.Function;
+/**
+ * Generic configuration binder for an {@link AnnotatedElement}. This provides automatic
+ * {@linkplain TypeConverter string conversion} and {@linkplain ConstraintValidator constraint validation} support.
+ *
+ * @param <E> element type being bound
+ */
public abstract class AbstractConfigurationBinder<E extends AnnotatedElement> implements ConfigurationBinder {
protected static final Logger LOGGER = StatusLogger.getLogger();
@@ -48,17 +54,17 @@ public abstract class AbstractConfigurationBinder<E extends AnnotatedElement> im
}
@Override
- public Object bindString(final Object target, final String value) {
+ public void bindString(final Object factory, final String value) {
Object convertedValue = null;
if (value != null) {
final TypeConverter<?> converter = TypeConverterRegistry.getInstance().findCompatibleConverter(injectionType);
try {
convertedValue = converter.convert(value);
} catch (final Exception e) {
- LOGGER.error("Cannot convert string '{}' to type {} in option named {}. {}", value, injectionType, name, e);
+ throw new ConfigurationBindingException(name, value, e);
}
}
- return bindObject(target, convertedValue);
+ bindObject(factory, convertedValue);
}
void validate(final Object value) {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/ConfigurationBinder.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/ConfigurationBinder.java
index bf2165d..d97075c 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/ConfigurationBinder.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/ConfigurationBinder.java
@@ -17,8 +17,26 @@
package org.apache.logging.log4j.plugins.bind;
+/**
+ * Strategy to bind and validate an {@linkplain org.apache.logging.log4j.plugins.inject.ConfigurationInjector injected
+ * configuration value} to a {@linkplain org.apache.logging.log4j.plugins.PluginFactory plugin factory}.
+ */
public interface ConfigurationBinder {
- Object bindString(final Object target, final String value);
+ /**
+ * Binds an unparsed string value to the given factory.
+ *
+ * @param factory injection factory to bind value to
+ * @param value string representation of configuration value
+ * @throws ConfigurationBindingException if the given value is invalid
+ */
+ void bindString(final Object factory, final String value);
- Object bindObject(final Object target, final Object value);
+ /**
+ * Binds an object to the given factory.
+ *
+ * @param factory injection factory to bind value to
+ * @param value configuration value to bind
+ * @throws ConfigurationBindingException if the given value is invalid
+ */
+ void bindObject(final Object factory, final Object value);
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FactoryMethodBinder.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FactoryMethodBinder.java
index b4ff49a..7548871 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FactoryMethodBinder.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FactoryMethodBinder.java
@@ -64,12 +64,11 @@ public class FactoryMethodBinder {
}
@Override
- public Object bindObject(final Object target, final Object value) {
+ public void bindObject(final Object factory, final Object value) {
validate(value);
if (value != null) {
boundParameters.put(element, value);
}
- return target;
}
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FieldConfigurationBinder.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FieldConfigurationBinder.java
index bd260cc..112d759 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FieldConfigurationBinder.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/FieldConfigurationBinder.java
@@ -27,26 +27,25 @@ public class FieldConfigurationBinder extends AbstractConfigurationBinder<Field>
}
@Override
- public Object bindObject(final Object target, final Object value) {
- Objects.requireNonNull(target);
+ public void bindObject(final Object factory, final Object value) {
+ Objects.requireNonNull(factory);
// FIXME: if we specify a default field value, @PluginAttribute's defaultType will override that
if (value == null) {
try {
- Object defaultValue = element.get(target);
+ Object defaultValue = element.get(factory);
validate(defaultValue);
LOGGER.trace("Using default value {} for option {}", defaultValue, name);
} catch (final IllegalAccessException e) {
throw new ConfigurationBindingException("Unable to validate option " + name, e);
}
- return target;
- }
- validate(value);
- try {
- element.set(target, value);
- LOGGER.trace("Using value {} for option {}", value, name);
- return target;
- } catch (final IllegalAccessException e) {
- throw new ConfigurationBindingException(name, value, e);
+ } else {
+ validate(value);
+ try {
+ element.set(factory, value);
+ LOGGER.trace("Using value {} for option {}", value, name);
+ } catch (final IllegalAccessException e) {
+ throw new ConfigurationBindingException(name, value, e);
+ }
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/MethodConfigurationBinder.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/MethodConfigurationBinder.java
index 0c3d609..0ef7f0f 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/MethodConfigurationBinder.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/bind/MethodConfigurationBinder.java
@@ -28,16 +28,15 @@ public class MethodConfigurationBinder extends AbstractConfigurationBinder<Metho
}
@Override
- public Object bindObject(final Object target, final Object value) {
- Objects.requireNonNull(target);
+ public void bindObject(final Object factory, final Object value) {
+ Objects.requireNonNull(factory);
validate(value);
try {
- element.invoke(target, value);
+ element.invoke(factory, value);
} catch (final IllegalAccessException e) {
throw new ConfigurationBindingException(name, value, e);
} catch (final InvocationTargetException e) {
throw new ConfigurationBindingException(name, value, e.getCause());
}
- return target;
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/ConfigurationInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/ConfigurationInjector.java
index 53daef5..f0db24d 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/ConfigurationInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/ConfigurationInjector.java
@@ -27,6 +27,14 @@ import java.lang.reflect.Type;
import java.util.Optional;
import java.util.function.Function;
+/**
+ * Strategy builder for injecting configuration data into an {@link AnnotatedElement}. Configuration injection consists
+ * of {@linkplain ConfigurationBinder binding} a {@link Node} and configuration to an annotated element of a
+ * {@linkplain org.apache.logging.log4j.plugins.PluginFactory plugin factory}.
+ *
+ * @param <Ann> plugin annotation this injector uses
+ * @param <Cfg> configuration class
+ */
public interface ConfigurationInjector<Ann extends Annotation, Cfg> {
static <Cfg> Optional<ConfigurationInjector<Annotation, Cfg>> forAnnotatedElement(final AnnotatedElement element) {
@@ -61,5 +69,5 @@ public interface ConfigurationInjector<Ann extends Annotation, Cfg> {
ConfigurationInjector<Ann, Cfg> withNode(final Node node);
- Object inject(final Object target);
+ void inject(final Object factory);
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginAttributeInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginAttributeInjector.java
index 55bcb75..af1144f 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginAttributeInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginAttributeInjector.java
@@ -25,6 +25,7 @@ import org.apache.logging.log4j.util.Strings;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
@@ -55,26 +56,28 @@ public class PluginAttributeInjector extends AbstractConfigurationInjector<Plugi
}
@Override
- public Object inject(final Object target) {
- return findAndRemoveNodeAttribute()
- .map(stringSubstitutionStrategy)
- .map(value -> configurationBinder.bindString(target, value))
- .orElseGet(() -> injectDefaultValue(target));
+ public void inject(final Object factory) {
+ final Optional<String> value = findAndRemoveNodeAttribute().map(stringSubstitutionStrategy);
+ if (value.isPresent()) {
+ configurationBinder.bindString(factory, value.get());
+ } else {
+ injectDefaultValue(factory);
+ }
}
- private Object injectDefaultValue(final Object target) {
+ private void injectDefaultValue(final Object factory) {
final Function<PluginAttribute, Object> extractor = DEFAULT_VALUE_EXTRACTORS.get(conversionType);
if (extractor != null) {
final Object value = extractor.apply(annotation);
debugLog(value);
- return configurationBinder.bindObject(target, value);
- }
- final String value = stringSubstitutionStrategy.apply(annotation.defaultString());
- if (Strings.isNotBlank(value)) {
- debugLog(value);
- return configurationBinder.bindString(target, value);
+ configurationBinder.bindObject(factory, value);
+ } else {
+ final String value = stringSubstitutionStrategy.apply(annotation.defaultString());
+ if (Strings.isNotBlank(value)) {
+ debugLog(value);
+ configurationBinder.bindString(factory, value);
+ }
}
- return target;
}
private void debugLog(final Object value) {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginBuilderAttributeInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginBuilderAttributeInjector.java
index 229f07d..f1d734d 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginBuilderAttributeInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginBuilderAttributeInjector.java
@@ -21,16 +21,24 @@ import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.util.NameUtil;
import org.apache.logging.log4j.util.StringBuilders;
+import java.util.Optional;
+
public class PluginBuilderAttributeInjector extends AbstractConfigurationInjector<PluginBuilderAttribute, Object> {
@Override
- public Object inject(final Object target) {
- return findAndRemoveNodeAttribute()
- .map(stringSubstitutionStrategy)
- .map(value -> {
- String debugValue = annotation.sensitive() ? NameUtil.md5(value + getClass().getName()) : value;
- StringBuilders.appendKeyDqValue(debugLog, name, debugValue);
- return configurationBinder.bindString(target, value);
- })
- .orElseGet(() -> configurationBinder.bindObject(target, null));
+ public void inject(final Object factory) {
+ final Optional<String> value = findAndRemoveNodeAttribute().map(stringSubstitutionStrategy);
+ if (value.isPresent()) {
+ final String str = value.get();
+ debugLog(str);
+ configurationBinder.bindString(factory, str);
+ } else {
+ debugLog.append(name).append("=null");
+ configurationBinder.bindObject(factory, null);
+ }
+ }
+
+ private void debugLog(final Object value) {
+ final Object debugValue = annotation.sensitive() ? NameUtil.md5(value + getClass().getName()) : value;
+ StringBuilders.appendKeyDqValue(debugLog, name, debugValue);
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginElementInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginElementInjector.java
index 7ad17b0..21c74be 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginElementInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginElementInjector.java
@@ -32,7 +32,7 @@ import java.util.Optional;
public class PluginElementInjector extends AbstractConfigurationInjector<PluginElement, Object> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
final Optional<Class<?>> componentType = getComponentType(conversionType);
if (componentType.isPresent()) {
final Class<?> compType = componentType.get();
@@ -55,7 +55,8 @@ public class PluginElementInjector extends AbstractConfigurationInjector<PluginE
Object[] children = (Object[]) childObject;
debugLog.append(Arrays.toString(children)).append('}');
node.getChildren().removeAll(used);
- return configurationBinder.bindObject(target, children);
+ configurationBinder.bindObject(factory, children);
+ return;
} else {
debugLog.append(child.toString());
values.add(childObject);
@@ -65,7 +66,7 @@ public class PluginElementInjector extends AbstractConfigurationInjector<PluginE
debugLog.append('}');
if (!values.isEmpty() && !TypeUtil.isAssignable(compType, values.get(0).getClass())) {
LOGGER.error("Cannot assign element {} a list of {} as it is incompatible with {}", name, values.get(0).getClass(), compType);
- return null;
+ return;
}
node.getChildren().removeAll(used);
// using List::toArray here would cause type mismatch later on
@@ -73,17 +74,17 @@ public class PluginElementInjector extends AbstractConfigurationInjector<PluginE
for (int i = 0; i < vals.length; i++) {
vals[i] = values.get(i);
}
- return configurationBinder.bindObject(target, vals);
+ configurationBinder.bindObject(factory, vals);
} else {
final Optional<Node> matchingChild = node.getChildren().stream().filter(this::isRequestedNode).findAny();
if (matchingChild.isPresent()) {
final Node child = matchingChild.get();
debugLog.append(child.getName()).append('(').append(child.toString()).append(')');
node.getChildren().remove(child);
- return configurationBinder.bindObject(target, child.getObject());
+ configurationBinder.bindObject(factory, child.getObject());
} else {
debugLog.append(name).append("=null");
- return configurationBinder.bindObject(target, null);
+ configurationBinder.bindObject(factory, null);
}
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginNodeInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginNodeInjector.java
index b18949e..23d19ff 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginNodeInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginNodeInjector.java
@@ -22,13 +22,12 @@ import org.apache.logging.log4j.plugins.util.TypeUtil;
public class PluginNodeInjector extends AbstractConfigurationInjector<PluginNode, Object> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
if (TypeUtil.isAssignable(conversionType, node.getClass())) {
debugLog.append("Node=").append(node.getName());
- return configurationBinder.bindObject(target, node);
+ configurationBinder.bindObject(factory, node);
} else {
LOGGER.error("Element with type {} annotated with @PluginNode not compatible with type {}.", conversionType, node.getClass());
- return target;
}
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginValueInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginValueInjector.java
index 31d89c0..8d4cade 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginValueInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/inject/PluginValueInjector.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.util.Strings;
public class PluginValueInjector extends AbstractConfigurationInjector<PluginValue, Object> {
@Override
- public Object inject(final Object target) {
+ public void inject(final Object factory) {
final String elementValue = node.getValue();
final String attributeValue = node.getAttributes().get(name);
String rawValue = null; // if neither is specified, return null (LOG4J2-1313)
@@ -39,6 +39,6 @@ public class PluginValueInjector extends AbstractConfigurationInjector<PluginVal
}
final String value = stringSubstitutionStrategy.apply(rawValue);
StringBuilders.appendKeyDqValue(debugLog, name, value);
- return configurationBinder.bindString(target, value);
+ configurationBinder.bindString(factory, value);
}
}