You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2015/10/14 17:49:33 UTC
[2/2] camel git commit: CAMEL-9223 - fix IllegalArgumentException
when reverting fields using property placeholders
CAMEL-9223 - fix IllegalArgumentException when reverting fields using property placeholders
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b09b1a61
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b09b1a61
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b09b1a61
Branch: refs/heads/camel-2.16.x
Commit: b09b1a6121d8ab6e607112f6c54e1bb157252c9d
Parents: d444e86
Author: Jonathan Anstey <ja...@gmail.com>
Authored: Wed Oct 14 13:16:18 2015 -0230
Committer: Jonathan Anstey <ja...@gmail.com>
Committed: Wed Oct 14 13:16:46 2015 -0230
----------------------------------------------------------------------
.../camel/model/ProcessorDefinitionHelper.java | 8 +++--
.../apache/camel/util/IntrospectionSupport.java | 36 ++++++++++++++++++--
2 files changed, 39 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b09b1a61/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index 9eea4a8..50b777c 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -613,6 +613,10 @@ public final class ProcessorDefinitionHelper {
}
private static void addRestoreAction(final Object target, final Map<String, Object> properties) {
+ addRestoreAction(null, target, properties);
+ }
+
+ private static void addRestoreAction(final CamelContext context, final Object target, final Map<String, Object> properties) {
if (properties.isEmpty()) {
return;
}
@@ -626,7 +630,7 @@ public final class ProcessorDefinitionHelper {
@Override
public void run() {
try {
- IntrospectionSupport.setProperties(null, target, properties);
+ IntrospectionSupport.setProperties(context, null, target, properties);
} catch (Exception e) {
LOG.warn("Could not restore definition properties", e);
}
@@ -742,7 +746,7 @@ public final class ProcessorDefinitionHelper {
}
}
}
- addRestoreAction(definition, changedProperties);
+ addRestoreAction(camelContext, definition, changedProperties);
}
/**
http://git-wip-us.apache.org/repos/asf/camel/blob/b09b1a61/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
index 13ceba9..f34ce11 100755
--- a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
@@ -38,8 +38,11 @@ import java.util.Set;
import java.util.regex.Pattern;
import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.TypeConversionException;
import org.apache.camel.TypeConverter;
+import org.apache.camel.component.properties.PropertiesComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -446,14 +449,14 @@ public final class IntrospectionSupport {
return rc;
}
- public static boolean setProperties(TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception {
+ public static boolean setProperties(CamelContext context, TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception {
ObjectHelper.notNull(target, "target");
ObjectHelper.notNull(properties, "properties");
boolean rc = false;
for (Iterator<Map.Entry<String, Object>> iter = properties.entrySet().iterator(); iter.hasNext();) {
Map.Entry<String, Object> entry = iter.next();
- if (setProperty(typeConverter, target, entry.getKey(), entry.getValue())) {
+ if (setProperty(context, typeConverter, target, entry.getKey(), entry.getValue())) {
iter.remove();
rc = true;
}
@@ -461,6 +464,10 @@ public final class IntrospectionSupport {
return rc;
}
+
+ public static boolean setProperties(TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception {
+ return setProperties(null, typeConverter, target, properties);
+ }
public static boolean setProperties(Object target, Map<String, Object> properties) throws Exception {
return setProperties(null, target, properties);
@@ -561,7 +568,7 @@ public final class IntrospectionSupport {
}
}
- if (typeConversionFailed != null) {
+ if (typeConversionFailed != null && !isPropertyPlaceholder(context, value)) {
// we did not find a setter method to use, and if we did try to use a type converter then throw
// this kind of exception as the caused by will hint this error
throw new IllegalArgumentException("Could not find a suitable setter for property: " + name
@@ -572,6 +579,29 @@ public final class IntrospectionSupport {
}
}
+ private static boolean isPropertyPlaceholder(CamelContext context, Object value) {
+ if (context != null) {
+ Component component = context.hasComponent("properties");
+ if (component != null) {
+ PropertiesComponent pc;
+ try {
+ pc = context.getTypeConverter().mandatoryConvertTo(PropertiesComponent.class, component);
+ } catch (Exception e) {
+ return false;
+ }
+ if (value.toString().contains(pc.getPrefixToken()) && value.toString().contains(pc.getSuffixToken())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public static boolean setProperty(CamelContext context, TypeConverter typeConverter, Object target, String name, Object value) throws Exception {
+ // allow build pattern as a setter as well
+ return setProperty(context, typeConverter, target, name, value, null, true);
+ }
+
public static boolean setProperty(TypeConverter typeConverter, Object target, String name, Object value) throws Exception {
// allow build pattern as a setter as well
return setProperty(null, typeConverter, target, name, value, null, true);