You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/08/21 11:55:52 UTC
[camel] 13/14: CAMEL-19765: camel-core - SPI for DumpRouteStrategy.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch ds
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 36cab8c118c50e46cbe406a20f8bb2a64e037ec4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 21 13:47:43 2023 +0200
CAMEL-19765: camel-core - SPI for DumpRouteStrategy.
---
.../org/apache/camel/spi/DumpRoutesStrategy.java | 24 ++++++++++++------
.../impl/DefaultDumpRoutesStrategyConfigurer.java | 6 +++++
.../camel/impl/DefaultDumpRoutesStrategy.java | 29 ++++++++++++++--------
.../MainConfigurationPropertiesConfigurer.java | 6 +++++
.../camel-main-configuration-metadata.json | 1 +
core/camel-main/src/main/docs/main.adoc | 3 ++-
.../camel/main/DefaultConfigurationConfigurer.java | 1 +
.../camel/main/DefaultConfigurationProperties.java | 22 ++++++++++++++++
.../mbean/ManagedDumpRoutesStrategyMBean.java | 6 +++++
.../management/mbean/ManagedDumpRouteStrategy.java | 9 +++++++
.../management/ManagedRouteDumpStrategyTest.java | 3 +++
11 files changed, 91 insertions(+), 19 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java
index 74c129aad22..f67808437b5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DumpRoutesStrategy.java
@@ -44,6 +44,22 @@ public interface DumpRoutesStrategy extends StaticService {
*/
void setInclude(String include);
+ boolean isResolvePlaceholders();
+
+ /**
+ * Whether to resolve property placeholders in the dumped output.
+ * Default is true.
+ */
+ void setResolvePlaceholders(boolean resolvePlaceholders);
+
+ boolean isUriAsParameters();
+
+ /**
+ * When dumping to YAML format, then this option controls whether endpoint URIs should be expanded into a key/value
+ * parameters.
+ */
+ void setUriAsParameters(boolean uriAsParameters);
+
boolean isLog();
/**
@@ -59,12 +75,4 @@ public interface DumpRoutesStrategy extends StaticService {
*/
void setDirectory(String directory);
- boolean isUriAsParameters();
-
- /**
- * When dumping to YAML format, then this option controls whether endpoint URIs should be expanded into a key/value
- * parameters.
- */
- void setUriAsParameters(boolean uriAsParameters);
-
}
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategyConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategyConfigurer.java
index f79a61f15ae..69ed6aad744 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategyConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/DefaultDumpRoutesStrategyConfigurer.java
@@ -29,6 +29,8 @@ public class DefaultDumpRoutesStrategyConfigurer extends org.apache.camel.suppor
case "Include": target.setInclude(property(camelContext, java.lang.String.class, value)); return true;
case "log":
case "Log": target.setLog(property(camelContext, boolean.class, value)); return true;
+ case "resolveplaceholders":
+ case "ResolvePlaceholders": target.setResolvePlaceholders(property(camelContext, boolean.class, value)); return true;
case "uriasparameters":
case "UriAsParameters": target.setUriAsParameters(property(camelContext, boolean.class, value)); return true;
default: return false;
@@ -46,6 +48,8 @@ public class DefaultDumpRoutesStrategyConfigurer extends org.apache.camel.suppor
case "Include": return java.lang.String.class;
case "log":
case "Log": return boolean.class;
+ case "resolveplaceholders":
+ case "ResolvePlaceholders": return boolean.class;
case "uriasparameters":
case "UriAsParameters": return boolean.class;
default: return null;
@@ -64,6 +68,8 @@ public class DefaultDumpRoutesStrategyConfigurer extends org.apache.camel.suppor
case "Include": return target.getInclude();
case "log":
case "Log": return target.isLog();
+ case "resolveplaceholders":
+ case "ResolvePlaceholders": return target.isResolvePlaceholders();
case "uriasparameters":
case "UriAsParameters": return target.isUriAsParameters();
default: return null;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
index c18ff5c52f5..b5e2035b7eb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
@@ -62,6 +62,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
private CamelContext camelContext;
private String include = "routes";
+ private boolean resolvePlaceholders = true;
private boolean uriAsParameters;
private boolean log = true;
private String directory;
@@ -84,6 +85,14 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
this.include = include;
}
+ public boolean isResolvePlaceholders() {
+ return resolvePlaceholders;
+ }
+
+ public void setResolvePlaceholders(boolean resolvePlaceholders) {
+ this.resolvePlaceholders = resolvePlaceholders;
+ }
+
public boolean isLog() {
return log;
}
@@ -142,7 +151,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
StringBuilder sbLocal = new StringBuilder();
doDumpYaml(camelContext, def, resource == dummy ? null : resource, dumper, "routes", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "routes", "yaml");
+ doDumpToDirectory(resource, sbLocal, "routes", "yaml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} routes as YAML", size);
@@ -171,7 +180,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
StringBuilder sbLocal = new StringBuilder();
doDumpYaml(camelContext, def, resource == dummy ? null : resource, dumper, "rests", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "rests", "yaml");
+ doDumpToDirectory(resource, sbLocal, "rests", "yaml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} rests as YAML", size);
@@ -201,7 +210,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
StringBuilder sbLocal = new StringBuilder();
doDumpYaml(camelContext, def, resource == dummy ? null : resource, dumper, "route-templates", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "route-templates", "yaml");
+ doDumpToDirectory(resource, sbLocal, "route-templates", "yaml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} route-templates as YAML", size);
@@ -215,7 +224,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
CamelContext camelContext, NamedNode def, Resource resource,
ModelToYAMLDumper dumper, String kind, StringBuilder sbLocal, StringBuilder sbLog) {
try {
- String dump = dumper.dumpModelAsYaml(camelContext, def, true, uriAsParameters);
+ String dump = dumper.dumpModelAsYaml(camelContext, def, resolvePlaceholders, uriAsParameters);
sbLocal.append(dump);
appendLogDump(resource, dump, sbLog);
} catch (Exception e) {
@@ -248,7 +257,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
StringBuilder sbLocal = new StringBuilder();
doDumpXml(camelContext, def, resource == dummy ? null : resource, dumper, "route", "routes", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "routes", "xml");
+ doDumpToDirectory(resource, sbLocal, "routes", "xml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} routes as XML", size);
@@ -277,7 +286,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
StringBuilder sbLocal = new StringBuilder();
doDumpXml(camelContext, def, resource == dummy ? null : resource, dumper, "rest", "rests", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "rests", "xml");
+ doDumpToDirectory(resource, sbLocal, "rests", "xml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} rests as XML", size);
@@ -308,7 +317,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
doDumpXml(camelContext, def, resource == dummy ? null : resource, dumper, "routeTemplate",
"route-templates", sbLocal, sbLog);
// dump each resource into its own file
- doDumpTiDisk(resource, sbLocal, "route-templates", "xml");
+ doDumpToDirectory(resource, sbLocal, "route-templates", "xml");
}
if (!sbLog.isEmpty() && log) {
LOG.info("Dumping {} route-templates as XML", size);
@@ -322,7 +331,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
CamelContext camelContext, NamedNode def, Resource resource,
ModelToXMLDumper dumper, String replace, String kind, StringBuilder sbLocal, StringBuilder sbLog) {
try {
- String xml = dumper.dumpModelAsXml(camelContext, def, true);
+ String xml = dumper.dumpModelAsXml(camelContext, def, resolvePlaceholders);
// lets separate with empty line
xml = StringHelper.replaceFirst(xml, "xmlns=\"http://camel.apache.org/schema/spring\">",
"xmlns=\"http://camel.apache.org/schema/spring\">\n");
@@ -334,7 +343,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
}
}
- protected void doDumpTiDisk(Resource resource, StringBuilder sbLocal, String kind, String ext) {
+ protected void doDumpToDirectory(Resource resource, StringBuilder sbLocal, String kind, String ext) {
if (directory != null && !sbLocal.isEmpty()) {
// make sure directory exists
File dir = new File(directory);
@@ -352,7 +361,7 @@ public class DefaultDumpRoutesStrategy extends ServiceSupport implements DumpRou
File target = new File(directory, name);
try {
IOHelper.writeText(sbLocal.toString(), target);
- LOG.debug("Dumped {} to file: {}", target, name);
+ LOG.info("Dumped {} to file: {}", kind, target);
} catch (IOException e) {
throw new RuntimeException("Error dumping " + kind + " to file: " + target, e);
}
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
index 4f8b3b4931d..288a99df147 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
@@ -79,6 +79,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
case "DumpRoutesInclude": target.setDumpRoutesInclude(property(camelContext, java.lang.String.class, value)); return true;
case "dumprouteslog":
case "DumpRoutesLog": target.setDumpRoutesLog(property(camelContext, boolean.class, value)); return true;
+ case "dumproutesresolveplaceholders":
+ case "DumpRoutesResolvePlaceholders": target.setDumpRoutesResolvePlaceholders(property(camelContext, boolean.class, value)); return true;
case "dumproutesuriasparameters":
case "DumpRoutesUriAsParameters": target.setDumpRoutesUriAsParameters(property(camelContext, boolean.class, value)); return true;
case "durationhitexitcode":
@@ -334,6 +336,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
case "DumpRoutesInclude": return java.lang.String.class;
case "dumprouteslog":
case "DumpRoutesLog": return boolean.class;
+ case "dumproutesresolveplaceholders":
+ case "DumpRoutesResolvePlaceholders": return boolean.class;
case "dumproutesuriasparameters":
case "DumpRoutesUriAsParameters": return boolean.class;
case "durationhitexitcode":
@@ -590,6 +594,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
case "DumpRoutesInclude": return target.getDumpRoutesInclude();
case "dumprouteslog":
case "DumpRoutesLog": return target.isDumpRoutesLog();
+ case "dumproutesresolveplaceholders":
+ case "DumpRoutesResolvePlaceholders": return target.isDumpRoutesResolvePlaceholders();
case "dumproutesuriasparameters":
case "DumpRoutesUriAsParameters": return target.isDumpRoutesUriAsParameters();
case "durationhitexitcode":
diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 29c023fde81..e49a846be05 100644
--- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -42,6 +42,7 @@
{ "name": "camel.main.dumpRoutesDirectory", "description": "Whether to save route dumps to files in the given directory. The name of the files are based on original loaded resource, or an autogenerated name.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "string", "javaType": "java.lang.String" },
{ "name": "camel.main.dumpRoutesInclude", "description": "Controls what to include in output for route dumping. Possible values: routes, rests, routeTemplates. Multiple values can be separated by comma. Default is routes.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "routes" },
{ "name": "camel.main.dumpRoutesLog", "description": "Whether to log route dumps to Logger", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true },
+ { "name": "camel.main.dumpRoutesResolvePlaceholders", "description": "Whether to resolve property placeholders in the dumped output. Default is true.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true },
{ "name": "camel.main.dumpRoutesUriAsParameters", "description": "When dumping routes to YAML format, then this option controls whether endpoint URIs should be expanded into a key\/value parameters.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
{ "name": "camel.main.durationHitExitCode", "description": "Sets the exit code for the application if duration was hit", "sourceType": "org.apache.camel.main.MainConfigurationProperties", "type": "integer", "javaType": "int" },
{ "name": "camel.main.durationMaxAction", "description": "Controls whether the Camel application should shutdown the JVM, or stop all routes, when duration max is triggered.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "shutdown", "enum": [ "shutdown", "stop" ] },
diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc
index da33b6e96c2..1764d645f0d 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -19,7 +19,7 @@ The following tables lists all the options:
// main options: START
=== Camel Main configurations
-The camel.main supports 124 options, which are listed below.
+The camel.main supports 125 options, which are listed below.
[width="100%",cols="2,5,^1,2",options="header"]
|===
@@ -53,6 +53,7 @@ The camel.main supports 124 options, which are listed below.
| *camel.main.dumpRoutesDirectory* | Whether to save route dumps to files in the given directory. The name of the files are based on original loaded resource, or an autogenerated name. | | String
| *camel.main.dumpRoutesInclude* | Controls what to include in output for route dumping. Possible values: routes, rests, routeTemplates. Multiple values can be separated by comma. Default is routes. | routes | String
| *camel.main.dumpRoutesLog* | Whether to log route dumps to Logger | true | boolean
+| *camel.main.dumpRoutesResolve{zwsp}Placeholders* | Whether to resolve property placeholders in the dumped output. Default is true. | true | boolean
| *camel.main.dumpRoutesUriAs{zwsp}Parameters* | When dumping routes to YAML format, then this option controls whether endpoint URIs should be expanded into a key/value parameters. | false | boolean
| *camel.main.durationHitExitCode* | Sets the exit code for the application if duration was hit | | int
| *camel.main.durationMaxAction* | Controls whether the Camel application should shutdown the JVM, or stop all routes, when duration max is triggered. | shutdown | String
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 410e5e9272b..f55b933bc1a 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -264,6 +264,7 @@ public final class DefaultConfigurationConfigurer {
drs.setInclude(config.getDumpRoutesInclude());
drs.setLog(config.isDumpRoutesLog());
drs.setUriAsParameters(config.isDumpRoutesUriAsParameters());
+ drs.setResolvePlaceholders(config.isDumpRoutesResolvePlaceholders());
drs.setDirectory(config.getDumpRoutesDirectory());
}
if (config.isContextReloadEnabled() && camelContext.hasService(ContextReloadStrategy.class) == null) {
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
index 481d960bec3..f6a79b4b0ba 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
@@ -133,6 +133,7 @@ public abstract class DefaultConfigurationProperties<T> {
private String dumpRoutes;
private String dumpRoutesInclude = "routes";
private boolean dumpRoutesLog = true;
+ private boolean dumpRoutesResolvePlaceholders = true;
private boolean dumpRoutesUriAsParameters;
private String dumpRoutesDirectory;
private Map<String, String> globalOptions;
@@ -1414,6 +1415,18 @@ public abstract class DefaultConfigurationProperties<T> {
this.dumpRoutesLog = dumpRoutesLog;
}
+ public boolean isDumpRoutesResolvePlaceholders() {
+ return dumpRoutesResolvePlaceholders;
+ }
+
+ /**
+ * Whether to resolve property placeholders in the dumped output.
+ * Default is true.
+ */
+ public void setDumpRoutesResolvePlaceholders(boolean dumpRoutesResolvePlaceholders) {
+ this.dumpRoutesResolvePlaceholders = dumpRoutesResolvePlaceholders;
+ }
+
public boolean isDumpRoutesUriAsParameters() {
return dumpRoutesUriAsParameters;
}
@@ -2648,6 +2661,15 @@ public abstract class DefaultConfigurationProperties<T> {
return (T) this;
}
+ /**
+ * Whether to resolve property placeholders in the dumped output.
+ * Default is true.
+ */
+ public T withDumpRoutesResolvePlaceholders(boolean dumpRoutesResolvePlaceholders) {
+ this.dumpRoutesResolvePlaceholders = dumpRoutesResolvePlaceholders;
+ return (T) this;
+ }
+
/**
* When dumping routes to YAML format, then this option controls whether endpoint URIs should be expanded into a
* key/value parameters.
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedDumpRoutesStrategyMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedDumpRoutesStrategyMBean.java
index 69f76a9f632..94e9aafd6c3 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedDumpRoutesStrategyMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedDumpRoutesStrategyMBean.java
@@ -54,4 +54,10 @@ public interface ManagedDumpRoutesStrategyMBean {
@ManagedAttribute(description = "When dumping to YAML format, then this option controls whether endpoint URIs should be expanded into a key/value parameters")
void setUriAsParameters(boolean uriAsParameters);
+ @ManagedAttribute(description = "")
+ boolean isResolvePlaceholders();
+
+ @ManagedAttribute(description = "Whether to resolve property placeholders in the dumped output. Default is true.")
+ void setResolvePlaceholders(boolean resolvePlaceholders);
+
}
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedDumpRouteStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedDumpRouteStrategy.java
index 51e311c6404..8cf89153560 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedDumpRouteStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedDumpRouteStrategy.java
@@ -100,4 +100,13 @@ public class ManagedDumpRouteStrategy implements ManagedDumpRoutesStrategyMBean
dumpRoutesStrategy.setUriAsParameters(uriAsParameters);
}
+ @Override
+ public boolean isResolvePlaceholders() {
+ return dumpRoutesStrategy.isResolvePlaceholders();
+ }
+
+ @Override
+ public void setResolvePlaceholders(boolean resolvePlaceholders) {
+ dumpRoutesStrategy.setResolvePlaceholders(resolvePlaceholders);
+ }
}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteDumpStrategyTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteDumpStrategyTest.java
index 0e398db0c6c..6ed5443f28a 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteDumpStrategyTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteDumpStrategyTest.java
@@ -49,6 +49,7 @@ public class ManagedRouteDumpStrategyTest extends ManagementTestSupport {
drd.setInclude("all");
drd.setLog(false);
drd.setDirectory(dir);
+ drd.setResolvePlaceholders(false);
context.addService(drd);
return context;
@@ -77,6 +78,8 @@ public class ManagedRouteDumpStrategyTest extends ManagementTestSupport {
assertEquals("all", include);
Boolean log = (Boolean) mbeanServer.getAttribute(on, "Log");
assertFalse(log);
+ Boolean rp = (Boolean) mbeanServer.getAttribute(on, "ResolvePlaceholders");
+ assertFalse(rp);
// dump should pre-exist
File dir = testDirectory().toFile();