This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 53112be421e5 CAMEL-24514: camel-console - Use GET instead of POST for
read-only dev consoles in OpenAPI spec (#25883)
53112be421e5 is described below
commit 53112be421e5f09140f53f468f14209cd0603130
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Aug 29 13:41:58 2026 +0200
CAMEL-24514: camel-console - Use GET instead of POST for read-only dev
consoles in OpenAPI spec (#25883)
* CAMEL-24514: camel-console - Generate GET instead of POST for read-only
dev consoles in OpenAPI spec
ApiDevConsole previously advertised every dev console as a POST operation,
even
though /q/dev was originally GET-only and most consoles are safe, read-only
introspection endpoints. Add a DevConsole.isReadOnly() SPI method (default
true)
so each console declares whether it mutates runtime state; ApiDevConsole now
generates a GET operation with query parameters for read-only consoles, and
keeps POST with a JSON requestBody only for the consoles that need an
arbitrary
body (eval-language, send, sql-query) or that mutate state (route,
route-group,
processor, trace, jfr-memory-leak, receive, debug, heap-dump, reload, and
camel-jfr's jfr console).
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-24514: camel-console - Surface readOnly flag in DevConsole catalog
metadata
Move the read-only/mutating classification from a per-class isReadOnly()
override onto a new @DevConsole(readOnly=...) annotation attribute, so it is
available both at runtime (AbstractDevConsole reads it reflectively) and at
build time. GenerateDevConsoleMojo now emits "readOnly" into each console's
generated dev-console/*.json, so the static catalog metadata already carries
the safe/mutating classification ahead of a future release-time static
OpenAPI doc generator, without needing a running CamelContext.
Regenerated the dev-console JSON for every module with a @DevConsole class
(core, camel-jfr, and ~24 component/dsl/catalog modules) to pick up the new
field; no Java behavior changes outside camel-console and camel-jfr.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
---------
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Claude Sonnet 5 <[email protected]>
---
.../org/apache/camel/dev-console/catalog.json | 1 +
.../org/apache/camel/dev-console/aws-secrets.json | 1 +
.../org/apache/camel/dev-console/aws2-s3.json | 1 +
.../apache/camel/dev-console/azure-secrets.json | 1 +
.../apache/camel/dev-console/route-diagram.json | 1 +
.../org/apache/camel/dev-console/sftp.json | 1 +
.../org/apache/camel/dev-console/gcp-secrets.json | 1 +
.../org/apache/camel/dev-console/groovy.json | 1 +
.../camel/dev-console/hashicorp-secrets.json | 1 +
.../org/apache/camel/dev-console/ibm-secrets.json | 1 +
.../META-INF/org/apache/camel/dev-console/jfr.json | 1 +
.../camel/runtime/jfr/CamelJfrDevConsole.java | 2 +-
.../camel/runtime/jfr/CamelJfrDevConsoleTest.java | 6 +
.../org/apache/camel/dev-console/kafka.json | 1 +
.../camel/dev-console/kubernetes-configmaps.json | 1 +
.../camel/dev-console/kubernetes-secrets.json | 1 +
.../org/apache/camel/dev-console/micrometer.json | 1 +
.../apache/camel/dev-console/fault-tolerance.json | 1 +
.../apache/camel/dev-console/opentelemetry.json | 1 +
.../apache/camel/dev-console/main-http-server.json | 1 +
.../apache/camel/dev-console/platform-http.json | 1 +
.../org/apache/camel/dev-console/quartz.json | 1 +
.../org/apache/camel/dev-console/resilience4j.json | 1 +
.../org/apache/camel/dev-console/stub.json | 1 +
.../apache/camel/dev-console/vertx-websocket.json | 1 +
.../apache/camel/spi/annotations/DevConsole.java | 8 +
.../java/org/apache/camel/console/DevConsole.java | 13 ++
.../org/apache/camel/dev-console/activity.json | 1 +
.../META-INF/org/apache/camel/dev-console/api.json | 1 +
.../org/apache/camel/dev-console/bean.json | 1 +
.../org/apache/camel/dev-console/blocked.json | 1 +
.../org/apache/camel/dev-console/browse.json | 1 +
.../apache/camel/dev-console/circuit-breaker.json | 1 +
.../org/apache/camel/dev-console/consumer.json | 1 +
.../org/apache/camel/dev-console/context.json | 1 +
.../org/apache/camel/dev-console/datasource.json | 1 +
.../org/apache/camel/dev-console/debug.json | 1 +
.../org/apache/camel/dev-console/endpoint.json | 1 +
.../org/apache/camel/dev-console/errors.json | 1 +
.../apache/camel/dev-console/eval-language.json | 1 +
.../org/apache/camel/dev-console/event.json | 1 +
.../META-INF/org/apache/camel/dev-console/gc.json | 1 +
.../org/apache/camel/dev-console/health.json | 1 +
.../org/apache/camel/dev-console/heap-dump.json | 1 +
.../apache/camel/dev-console/heap-histogram.json | 1 +
.../org/apache/camel/dev-console/inflight.json | 1 +
.../apache/camel/dev-console/internal-tasks.json | 1 +
.../apache/camel/dev-console/java-security.json | 1 +
.../apache/camel/dev-console/jfr-memory-leak.json | 1 +
.../META-INF/org/apache/camel/dev-console/jvm.json | 1 +
.../META-INF/org/apache/camel/dev-console/log.json | 1 +
.../org/apache/camel/dev-console/memory.json | 1 +
.../apache/camel/dev-console/message-history.json | 1 +
.../apache/camel/dev-console/processor-detail.json | 1 +
.../org/apache/camel/dev-console/processor.json | 1 +
.../org/apache/camel/dev-console/producer.json | 1 +
.../org/apache/camel/dev-console/properties.json | 1 +
.../org/apache/camel/dev-console/receive.json | 1 +
.../org/apache/camel/dev-console/reload.json | 1 +
.../org/apache/camel/dev-console/rest-spec.json | 1 +
.../org/apache/camel/dev-console/rest.json | 1 +
.../apache/camel/dev-console/route-controller.json | 1 +
.../org/apache/camel/dev-console/route-dump.json | 1 +
.../org/apache/camel/dev-console/route-group.json | 1 +
.../apache/camel/dev-console/route-structure.json | 1 +
.../apache/camel/dev-console/route-topology.json | 1 +
.../org/apache/camel/dev-console/route.json | 1 +
.../org/apache/camel/dev-console/send.json | 1 +
.../org/apache/camel/dev-console/service.json | 1 +
.../apache/camel/dev-console/simple-language.json | 1 +
.../org/apache/camel/dev-console/source.json | 1 +
.../org/apache/camel/dev-console/sql-query.json | 1 +
.../org/apache/camel/dev-console/sql-trace.json | 1 +
.../apache/camel/dev-console/startup-recorder.json | 1 +
.../camel/dev-console/system-properties.json | 1 +
.../org/apache/camel/dev-console/thread.json | 1 +
.../META-INF/org/apache/camel/dev-console/top.json | 1 +
.../org/apache/camel/dev-console/trace.json | 1 +
.../org/apache/camel/dev-console/transformers.json | 1 +
.../apache/camel/dev-console/type-converters.json | 1 +
.../org/apache/camel/dev-console/variables.json | 1 +
.../apache/camel/impl/console/ApiDevConsole.java | 172 ++++++++++++++-------
.../apache/camel/impl/console/DebugDevConsole.java | 2 +-
.../camel/impl/console/EvalLanguageDevConsole.java | 3 +-
.../camel/impl/console/HeapDumpDevConsole.java | 2 +-
.../impl/console/JfrMemoryLeakDevConsole.java | 2 +-
.../camel/impl/console/ProcessorDevConsole.java | 2 +-
.../camel/impl/console/ReceiveDevConsole.java | 3 +-
.../camel/impl/console/ReloadDevConsole.java | 2 +-
.../apache/camel/impl/console/RouteDevConsole.java | 2 +-
.../camel/impl/console/RouteGroupDevConsole.java | 2 +-
.../apache/camel/impl/console/SendDevConsole.java | 2 +-
.../camel/impl/console/SqlQueryDevConsole.java | 3 +-
.../apache/camel/impl/console/TraceDevConsole.java | 2 +-
.../camel/impl/console/ApiDevConsoleTest.java | 69 +++++++++
.../org/apache/camel/dev-console/bean-model.json | 1 +
.../camel/dev-console/main-configuration.json | 1 +
.../camel/support/console/AbstractDevConsole.java | 7 +
.../org/apache/camel/dev-console/jbang.json | 1 +
.../org/apache/camel/dev-console/source-dir.json | 1 +
.../camel/dev-console/dependency-downloader.json | 1 +
.../maven/packaging/GenerateDevConsoleMojo.java | 11 ++
.../apache/camel/spi/annotations/DevConsole.java | 8 +
103 files changed, 338 insertions(+), 67 deletions(-)
diff --git
a/catalog/camel-catalog-console/src/generated/resources/META-INF/org/apache/camel/dev-console/catalog.json
b/catalog/camel-catalog-console/src/generated/resources/META-INF/org/apache/camel/dev-console/catalog.json
index e3831053d358..cf9b99383714 100644
---
a/catalog/camel-catalog-console/src/generated/resources/META-INF/org/apache/camel/dev-console/catalog.json
+++
b/catalog/camel-catalog-console/src/generated/resources/META-INF/org/apache/camel/dev-console/catalog.json
@@ -6,6 +6,7 @@
"title": "Catalog",
"description": "Information about used Camel artifacts",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.catalog.console.CatalogConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-catalog-console",
diff --git
a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/aws-secrets.json
b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/aws-secrets.json
index b97e902cc923..d0f70871f2a5 100644
---
a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/aws-secrets.json
+++
b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/aws-secrets.json
@@ -6,6 +6,7 @@
"title": "AWS Secrets",
"description": "AWS Secrets Manager",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.aws.secretsmanager.SecretsDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-aws-secrets-manager",
diff --git
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/dev-console/aws2-s3.json
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/dev-console/aws2-s3.json
index e9be83caf8a8..ce0e95b664b0 100644
---
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/dev-console/aws2-s3.json
+++
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/dev-console/aws2-s3.json
@@ -6,6 +6,7 @@
"title": "AWS S3",
"description": "AWS S3 Consumer",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.aws2.s3.AWS2S3Console",
"groupId": "org.apache.camel",
"artifactId": "camel-aws2-s3",
diff --git
a/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/azure-secrets.json
b/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/azure-secrets.json
index 628682ac5f97..a5054e19e5c4 100644
---
a/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/azure-secrets.json
+++
b/components/camel-azure/camel-azure-key-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/azure-secrets.json
@@ -6,6 +6,7 @@
"title": "Azure Key Vault Secrets",
"description": "Azure Key Vault Secret Manager",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.azure.key.vault.AzureKeyVaultManagerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-azure-key-vault",
diff --git
a/components/camel-diagram/src/generated/resources/META-INF/org/apache/camel/dev-console/route-diagram.json
b/components/camel-diagram/src/generated/resources/META-INF/org/apache/camel/dev-console/route-diagram.json
index 8b826a92455e..ead0c381c918 100644
---
a/components/camel-diagram/src/generated/resources/META-INF/org/apache/camel/dev-console/route-diagram.json
+++
b/components/camel-diagram/src/generated/resources/META-INF/org/apache/camel/dev-console/route-diagram.json
@@ -6,6 +6,7 @@
"title": "Route Diagram",
"description": "Visual route diagrams",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.diagram.DiagramDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-diagram",
diff --git
a/components/camel-ftp/src/generated/resources/META-INF/org/apache/camel/dev-console/sftp.json
b/components/camel-ftp/src/generated/resources/META-INF/org/apache/camel/dev-console/sftp.json
index cba9575de6f1..655a877681b5 100644
---
a/components/camel-ftp/src/generated/resources/META-INF/org/apache/camel/dev-console/sftp.json
+++
b/components/camel-ftp/src/generated/resources/META-INF/org/apache/camel/dev-console/sftp.json
@@ -6,6 +6,7 @@
"title": "SFTP",
"description": "Secure FTP using JSCH",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.file.remote.SftpDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-ftp",
diff --git
a/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/gcp-secrets.json
b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/gcp-secrets.json
index 2db63f44d2db..6c705b200b9d 100644
---
a/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/gcp-secrets.json
+++
b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/gcp-secrets.json
@@ -6,6 +6,7 @@
"title": "GCP Secrets",
"description": "GCP Secret Manager",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-google-secret-manager",
diff --git
a/components/camel-groovy/src/generated/resources/META-INF/org/apache/camel/dev-console/groovy.json
b/components/camel-groovy/src/generated/resources/META-INF/org/apache/camel/dev-console/groovy.json
index 513ef16d49cc..078f567341ee 100644
---
a/components/camel-groovy/src/generated/resources/META-INF/org/apache/camel/dev-console/groovy.json
+++
b/components/camel-groovy/src/generated/resources/META-INF/org/apache/camel/dev-console/groovy.json
@@ -6,6 +6,7 @@
"title": "Groovy",
"description": "Groovy Language",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.language.groovy.GroovyDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-groovy",
diff --git
a/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/hashicorp-secrets.json
b/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/hashicorp-secrets.json
index 47e2800607a0..bc159fc67b39 100644
---
a/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/hashicorp-secrets.json
+++
b/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/dev-console/hashicorp-secrets.json
@@ -6,6 +6,7 @@
"title": "HashiCorp Secrets",
"description": "HashiCorp Vault Secrets",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.hashicorp.vault.SecretsDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-hashicorp-vault",
diff --git
a/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/ibm-secrets.json
b/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/ibm-secrets.json
index 33a3d8558138..5235512e6bbf 100644
---
a/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/ibm-secrets.json
+++
b/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/dev-console/ibm-secrets.json
@@ -6,6 +6,7 @@
"title": "IBM Secrets",
"description": "IBM Secrets Manager",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.ibm.secrets.manager.SecretsDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-ibm-secrets-manager",
diff --git
a/components/camel-jfr/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr.json
b/components/camel-jfr/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr.json
index 8fc43cff3864..fddf05f6a74b 100644
---
a/components/camel-jfr/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr.json
+++
b/components/camel-jfr/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr.json
@@ -6,6 +6,7 @@
"title": "JFR Runtime Instrumentation",
"description": "Status and live control of camel-jfr runtime
instrumentation",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.runtime.jfr.CamelJfrDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-jfr",
diff --git
a/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
b/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
index 3aeff394ee6c..8dff129be7a7 100644
---
a/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
+++
b/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
@@ -49,7 +49,7 @@ import org.apache.camel.util.json.JsonObject;
* @since 4.22
*/
@DevConsole(name = "jfr", displayName = "JFR Runtime Instrumentation",
- description = "Status and live control of camel-jfr runtime
instrumentation")
+ description = "Status and live control of camel-jfr runtime
instrumentation", readOnly = false)
public class CamelJfrDevConsole extends AbstractDevConsole {
@Metadata(label = "query", description = "Command to perform", javaType =
"java.lang.String",
diff --git
a/components/camel-jfr/src/test/java/org/apache/camel/runtime/jfr/CamelJfrDevConsoleTest.java
b/components/camel-jfr/src/test/java/org/apache/camel/runtime/jfr/CamelJfrDevConsoleTest.java
index cabb6dbe087e..ce49030870aa 100644
---
a/components/camel-jfr/src/test/java/org/apache/camel/runtime/jfr/CamelJfrDevConsoleTest.java
+++
b/components/camel-jfr/src/test/java/org/apache/camel/runtime/jfr/CamelJfrDevConsoleTest.java
@@ -62,6 +62,12 @@ class CamelJfrDevConsoleTest extends CamelTestSupport {
return recording;
}
+ @Test
+ void isNotReadOnly() {
+ // the console can enable/disable JFR events and trigger snapshots, so
it must not be advertised as safe
+ assertThat(resolveConsole(context).isReadOnly()).isFalse();
+ }
+
@Test
void statusReportsNotRegisteredByDefault() {
// camel-jfr is on the classpath, but its runtime instrumentation is
opt-in, so merely having the
diff --git
a/components/camel-kafka/src/generated/resources/META-INF/org/apache/camel/dev-console/kafka.json
b/components/camel-kafka/src/generated/resources/META-INF/org/apache/camel/dev-console/kafka.json
index d00ed37bbd02..a62ec0cceef8 100644
---
a/components/camel-kafka/src/generated/resources/META-INF/org/apache/camel/dev-console/kafka.json
+++
b/components/camel-kafka/src/generated/resources/META-INF/org/apache/camel/dev-console/kafka.json
@@ -6,6 +6,7 @@
"title": "Kafka",
"description": "Apache Kafka",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.kafka.KafkaDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-kafka",
diff --git
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
index a6aad11d4626..56d3db2e6a1d 100644
---
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
+++
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
@@ -6,6 +6,7 @@
"title": "Kubernetes Config Maps",
"description": "Kubernetes Cluster Config Maps",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.kubernetes.config_maps.vault.ConfigmapsDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-kubernetes",
diff --git
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-secrets.json
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-secrets.json
index 6c054feee0c0..9bffab3a5997 100644
---
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-secrets.json
+++
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-secrets.json
@@ -6,6 +6,7 @@
"title": "Kubernetes Secrets",
"description": "Kubernetes Cluster Secrets",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.kubernetes.secrets.vault.SecretsDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-kubernetes",
diff --git
a/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/dev-console/micrometer.json
b/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/dev-console/micrometer.json
index cf7ccb455e6c..1b7f0790f5a9 100644
---
a/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/dev-console/micrometer.json
+++
b/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/dev-console/micrometer.json
@@ -6,6 +6,7 @@
"title": "Micrometer",
"description": "Display runtime metrics",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.micrometer.MicrometerConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-micrometer",
diff --git
a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/generated/resources/META-INF/org/apache/camel/dev-console/fault-tolerance.json
b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/generated/resources/META-INF/org/apache/camel/dev-console/fault-tolerance.json
index a0f18c4e1045..86d20f11be29 100644
---
a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/generated/resources/META-INF/org/apache/camel/dev-console/fault-tolerance.json
+++
b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/generated/resources/META-INF/org/apache/camel/dev-console/fault-tolerance.json
@@ -6,6 +6,7 @@
"title": "MicroProfile Circuit Breaker",
"description": "Display circuit breaker information",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.microprofile.faulttolerance.FaultToleranceConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-microprofile-fault-tolerance",
diff --git
a/components/camel-opentelemetry2/src/generated/resources/META-INF/org/apache/camel/dev-console/opentelemetry.json
b/components/camel-opentelemetry2/src/generated/resources/META-INF/org/apache/camel/dev-console/opentelemetry.json
index 2ad91bca36e1..f1825f1e26a8 100644
---
a/components/camel-opentelemetry2/src/generated/resources/META-INF/org/apache/camel/dev-console/opentelemetry.json
+++
b/components/camel-opentelemetry2/src/generated/resources/META-INF/org/apache/camel/dev-console/opentelemetry.json
@@ -6,6 +6,7 @@
"title": "OpenTelemetry Spans",
"description": "OpenTelemetry span data captured in dev mode",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.opentelemetry2.OpenTelemetryDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-opentelemetry2",
diff --git
a/components/camel-platform-http-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-http-server.json
b/components/camel-platform-http-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-http-server.json
index c472ad472389..2a601f4e1a6e 100644
---
a/components/camel-platform-http-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-http-server.json
+++
b/components/camel-platform-http-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-http-server.json
@@ -6,6 +6,7 @@
"title": "Main HTTP Server",
"description": "Camel Main HTTP Server",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.platform.http.main.MainHttpServerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-platform-http-main",
diff --git
a/components/camel-platform-http/src/generated/resources/META-INF/org/apache/camel/dev-console/platform-http.json
b/components/camel-platform-http/src/generated/resources/META-INF/org/apache/camel/dev-console/platform-http.json
index d07aecc32730..373be8a7e29b 100644
---
a/components/camel-platform-http/src/generated/resources/META-INF/org/apache/camel/dev-console/platform-http.json
+++
b/components/camel-platform-http/src/generated/resources/META-INF/org/apache/camel/dev-console/platform-http.json
@@ -6,6 +6,7 @@
"title": "Platform HTTP",
"description": "Embedded HTTP Server",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.platform.http.PlatformHttpConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-platform-http",
diff --git
a/components/camel-quartz/src/generated/resources/META-INF/org/apache/camel/dev-console/quartz.json
b/components/camel-quartz/src/generated/resources/META-INF/org/apache/camel/dev-console/quartz.json
index f97ae20916f6..d2d4c1561783 100644
---
a/components/camel-quartz/src/generated/resources/META-INF/org/apache/camel/dev-console/quartz.json
+++
b/components/camel-quartz/src/generated/resources/META-INF/org/apache/camel/dev-console/quartz.json
@@ -6,6 +6,7 @@
"title": "Quartz",
"description": "Quartz Scheduler",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.quartz.QuartzConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-quartz",
diff --git
a/components/camel-resilience4j/src/generated/resources/META-INF/org/apache/camel/dev-console/resilience4j.json
b/components/camel-resilience4j/src/generated/resources/META-INF/org/apache/camel/dev-console/resilience4j.json
index 5ed2e3cccfb2..e0abe6cb770d 100644
---
a/components/camel-resilience4j/src/generated/resources/META-INF/org/apache/camel/dev-console/resilience4j.json
+++
b/components/camel-resilience4j/src/generated/resources/META-INF/org/apache/camel/dev-console/resilience4j.json
@@ -6,6 +6,7 @@
"title": "Resilience Circuit Breaker",
"description": "Display circuit breaker information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.resilience4j.ResilienceConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-resilience4j",
diff --git
a/components/camel-stub/src/generated/resources/META-INF/org/apache/camel/dev-console/stub.json
b/components/camel-stub/src/generated/resources/META-INF/org/apache/camel/dev-console/stub.json
index 549225c95dcd..82a20938adb1 100644
---
a/components/camel-stub/src/generated/resources/META-INF/org/apache/camel/dev-console/stub.json
+++
b/components/camel-stub/src/generated/resources/META-INF/org/apache/camel/dev-console/stub.json
@@ -6,6 +6,7 @@
"title": "Stub",
"description": "Browse messages on stub endpoints",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.component.stub.StubConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-stub",
diff --git
a/components/camel-vertx/camel-vertx-websocket/src/generated/resources/META-INF/org/apache/camel/dev-console/vertx-websocket.json
b/components/camel-vertx/camel-vertx-websocket/src/generated/resources/META-INF/org/apache/camel/dev-console/vertx-websocket.json
index a204e5a42b15..aab4753de9d6 100644
---
a/components/camel-vertx/camel-vertx-websocket/src/generated/resources/META-INF/org/apache/camel/dev-console/vertx-websocket.json
+++
b/components/camel-vertx/camel-vertx-websocket/src/generated/resources/META-INF/org/apache/camel/dev-console/vertx-websocket.json
@@ -6,6 +6,7 @@
"title": "Vert.x WebSocket",
"description": "Vert.x WebSocket consumer details",
"deprecated": false,
+ "readOnly": true,
"javaType":
"org.apache.camel.component.vertx.websocket.VertxWebsocketDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-vertx-websocket",
diff --git
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/DevConsole.java
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/DevConsole.java
index 337360203da4..1f93908cac86 100644
---
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/DevConsole.java
+++
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/DevConsole.java
@@ -51,4 +51,12 @@ public @interface DevConsole {
*/
String description();
+ /**
+ * Whether this console is read-only (safe, and does not change any
runtime state).
+ * <p/>
+ * Consoles that mutate state (such as starting/stopping a route, sending
a message, or triggering a heap dump) must
+ * set this to {@code false}.
+ */
+ boolean readOnly() default true;
+
}
diff --git
a/core/camel-api/src/main/java/org/apache/camel/console/DevConsole.java
b/core/camel-api/src/main/java/org/apache/camel/console/DevConsole.java
index 087fd269a6b7..ccda24bac038 100644
--- a/core/camel-api/src/main/java/org/apache/camel/console/DevConsole.java
+++ b/core/camel-api/src/main/java/org/apache/camel/console/DevConsole.java
@@ -62,6 +62,19 @@ public interface DevConsole {
*/
boolean supportMediaType(MediaType mediaType);
+ /**
+ * Whether this console is read-only (safe, and does not change any
runtime state).
+ * <p/>
+ * Consoles that mutate state (such as starting/stopping a route, sending
a message, or triggering a heap dump) must
+ * override this method to return {@code false}.
+ *
+ * @return true if read-only (the default), false if invoking this console
changes runtime state.
+ * @since 4.23
+ */
+ default boolean isReadOnly() {
+ return true;
+ }
+
/**
* Invokes and gets the output from this console.
*/
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/activity.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/activity.json
index fd0b049476fd..7139adb66b3e 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/activity.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/activity.json
@@ -6,6 +6,7 @@
"title": "Camel Activity",
"description": "Recent completed exchange activity",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ActivityDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/api.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/api.json
index 815d84495893..9fa8ce489e4f 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/api.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/api.json
@@ -6,6 +6,7 @@
"title": "API",
"description": "OpenAPI specification for the dev console API",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ApiDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/bean.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/bean.json
index f281d19180be..379d778fcd71 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/bean.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/bean.json
@@ -6,6 +6,7 @@
"title": "Bean",
"description": "Displays Java beans from the registry",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.BeanDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/blocked.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/blocked.json
index 47e637c0bc53..da11ffd63cae 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/blocked.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/blocked.json
@@ -6,6 +6,7 @@
"title": "Blocked Exchanges",
"description": "Display blocked exchanges",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.BlockedConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/browse.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/browse.json
index 35d4431083cd..1baf361f8071 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/browse.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/browse.json
@@ -6,6 +6,7 @@
"title": "Browse",
"description": "Browse pending messages on Camel components",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.BrowseDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/circuit-breaker.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/circuit-breaker.json
index 2c735d14513a..5426d9653234 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/circuit-breaker.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/circuit-breaker.json
@@ -6,6 +6,7 @@
"title": "Circuit Breaker",
"description": "Display circuit breaker information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.CircuitBreakerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/consumer.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/consumer.json
index e5aa0f91d75c..b846c934a55f 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/consumer.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/consumer.json
@@ -6,6 +6,7 @@
"title": "Consumers",
"description": "Display information about Camel consumers",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ConsumerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/context.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/context.json
index b55bdbc2c90e..aa9c21003630 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/context.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/context.json
@@ -6,6 +6,7 @@
"title": "CamelContext",
"description": "Overall information about the CamelContext",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ContextDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/datasource.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/datasource.json
index ac0e5983d0ea..2ac439d18181 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/datasource.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/datasource.json
@@ -6,6 +6,7 @@
"title": "DataSource",
"description": "Displays DataSource connection pool metrics",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.DataSourceDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/debug.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/debug.json
index 92eab4e852a8..04b95b63dd64 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/debug.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/debug.json
@@ -6,6 +6,7 @@
"title": "Debug",
"description": "Camel route debugger",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.DebugDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/endpoint.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/endpoint.json
index 4e2f6e662a06..a8b4fb61bd92 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/endpoint.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/endpoint.json
@@ -6,6 +6,7 @@
"title": "Endpoints",
"description": "Endpoint Registry information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.EndpointDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/errors.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/errors.json
index 38d6d50322f6..1522e583d3ea 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/errors.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/errors.json
@@ -6,6 +6,7 @@
"title": "Error Registry",
"description": "Display captured routing errors",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ErrorRegistryConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/eval-language.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/eval-language.json
index 4f32f0a2c412..0086f1b21082 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/eval-language.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/eval-language.json
@@ -6,6 +6,7 @@
"title": "Evaluate Language",
"description": "Evaluate Language and display result",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.EvalLanguageDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/event.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/event.json
index 28836520fd22..1fc4fbdce8eb 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/event.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/event.json
@@ -6,6 +6,7 @@
"title": "Camel Events",
"description": "The most recent Camel events",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.EventConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/gc.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/gc.json
index 83df44fdfa99..66e21ec22064 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/gc.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/gc.json
@@ -6,6 +6,7 @@
"title": "Garbage Collector",
"description": "Displays Garbage Collector information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.GarbageCollectorDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/health.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/health.json
index 32bbfc1c5c04..e5083a15e3e5 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/health.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/health.json
@@ -6,6 +6,7 @@
"title": "Health Check",
"description": "Health Check Status",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.HealthDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-dump.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-dump.json
index a430cc1420ee..781c565a9d80 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-dump.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-dump.json
@@ -6,6 +6,7 @@
"title": "Heap Dump",
"description": "Write a heap dump (.hprof) file for deep memory analysis",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.HeapDumpDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-histogram.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-histogram.json
index 2353f33b9456..69148a67e464 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-histogram.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/heap-histogram.json
@@ -6,6 +6,7 @@
"title": "Heap Histogram",
"description": "Displays class-level heap memory usage",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.HeapHistogramDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/inflight.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/inflight.json
index d40ea6b4a80e..b758445cf916 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/inflight.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/inflight.json
@@ -6,6 +6,7 @@
"title": "Inflight Exchanges",
"description": "Display inflight exchanges",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.InflightConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/internal-tasks.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/internal-tasks.json
index 869038a890d6..0fb582f03c1e 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/internal-tasks.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/internal-tasks.json
@@ -6,6 +6,7 @@
"title": "Internal Tasks",
"description": "Display information about internal tasks",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.TaskRegistryDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/java-security.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/java-security.json
index a26a922dfa11..c5877f34274c 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/java-security.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/java-security.json
@@ -6,6 +6,7 @@
"title": "Java Security",
"description": "Displays Java Security (JSSE) information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.JavaSecurityDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr-memory-leak.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr-memory-leak.json
index 9060eac5e162..d6dd0387587f 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr-memory-leak.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jfr-memory-leak.json
@@ -6,6 +6,7 @@
"title": "JFR Memory Leak",
"description": "JFR-based old object sampling for memory leak diagnosis",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.JfrMemoryLeakDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jvm.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jvm.json
index 4d8cd2789763..c4d5d32567db 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jvm.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jvm.json
@@ -6,6 +6,7 @@
"title": "JVM",
"description": "Displays JVM information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.JvmDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/log.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/log.json
index 15bd74e81283..30f93775f196 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/log.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/log.json
@@ -6,6 +6,7 @@
"title": "Log",
"description": "Logging framework",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.LogDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/memory.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/memory.json
index 9f7d8b403df7..0bd7215dde80 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/memory.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/memory.json
@@ -6,6 +6,7 @@
"title": "JVM Memory",
"description": "Displays JVM memory information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.MemoryDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/message-history.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/message-history.json
index e950b50cd95c..cb4f9e2a0fb6 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/message-history.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/message-history.json
@@ -6,6 +6,7 @@
"title": "Message History",
"description": "History of latest completed exchange",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.MessageHistoryDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor-detail.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor-detail.json
index 8e22af1c1968..ebf8ce65ad2d 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor-detail.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor-detail.json
@@ -6,6 +6,7 @@
"title": "Processor Detail",
"description": "Show configured options for all processors in a route",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ProcessorDetailDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor.json
index c92c77296a08..4187206fd03d 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/processor.json
@@ -6,6 +6,7 @@
"title": "Processor",
"description": "Processor information",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.ProcessorDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/producer.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/producer.json
index dbac98c57280..865f49fa969e 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/producer.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/producer.json
@@ -6,6 +6,7 @@
"title": "Producers",
"description": "Display information about Camel producers",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ProducerDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/properties.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/properties.json
index 8c661d342d80..8a70c7b3e1f6 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/properties.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/properties.json
@@ -6,6 +6,7 @@
"title": "Properties",
"description": "Displays the properties loaded by Camel",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.PropertiesDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/receive.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/receive.json
index faa96aca845f..d6eef0033fb7 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/receive.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/receive.json
@@ -6,6 +6,7 @@
"title": "Camel Receive",
"description": "Consume messages from endpoints",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.ReceiveDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/reload.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/reload.json
index 48b8737e0b16..9a9ac8798415 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/reload.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/reload.json
@@ -6,6 +6,7 @@
"title": "Reload",
"description": "Console for reloading running Camel",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.ReloadDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest-spec.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest-spec.json
index 46ddad46dcc1..e9f5e8eaa235 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest-spec.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest-spec.json
@@ -6,6 +6,7 @@
"title": "Rest Spec",
"description": "OpenAPI specification content for contract-first REST
services",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RestSpecDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest.json
index 7d237debce0c..865442fdcdea 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/rest.json
@@ -6,6 +6,7 @@
"title": "Rest",
"description": "Rest DSL Registry information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RestDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-controller.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-controller.json
index 986252e5ca52..2e26709b7178 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-controller.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-controller.json
@@ -6,6 +6,7 @@
"title": "Route Controller",
"description": "Route controller information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RouteControllerConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-dump.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-dump.json
index 3795188ace1a..b456dd2bcfa1 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-dump.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-dump.json
@@ -6,6 +6,7 @@
"title": "Route Dump",
"description": "Dump route in XML, YAML, or Java DSL format",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RouteDumpDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-group.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-group.json
index c2fd5b8c8502..385cdd8cd957 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-group.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-group.json
@@ -6,6 +6,7 @@
"title": "Route Group",
"description": "Route Group information",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.RouteGroupDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-structure.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-structure.json
index cad3cda9403f..ea33d5983a20 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-structure.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-structure.json
@@ -6,6 +6,7 @@
"title": "Route Structure",
"description": "Dump route structure",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RouteStructureDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-topology.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-topology.json
index 2a5a27807324..7986ba7bddbf 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-topology.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-topology.json
@@ -6,6 +6,7 @@
"title": "Route Topology",
"description": "Route topology showing inter-route connections",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.RouteTopologyDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route.json
index 36f75cd52f6d..555a1a0dd5c1 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route.json
@@ -6,6 +6,7 @@
"title": "Route",
"description": "Route information",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.RouteDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/send.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/send.json
index a15a608be3f5..0900fa44626c 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/send.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/send.json
@@ -6,6 +6,7 @@
"title": "Camel Send",
"description": "Send messages to endpoints",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.SendDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/service.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/service.json
index 33138f8dd4c9..b56cf0641d0c 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/service.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/service.json
@@ -6,6 +6,7 @@
"title": "Services",
"description": "Services used for network communication with clients",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ServiceDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/simple-language.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/simple-language.json
index 07ebd2626447..3c84e7ff2202 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/simple-language.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/simple-language.json
@@ -6,6 +6,7 @@
"title": "Simple Language",
"description": "Display simple language details",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.SimpleLanguageDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source.json
index b641917712e6..824a1f09535b 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source.json
@@ -6,6 +6,7 @@
"title": "Source",
"description": "Dump route source code",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.SourceDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-query.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-query.json
index bde872c3cde3..131e314fd5b8 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-query.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-query.json
@@ -6,6 +6,7 @@
"title": "SQL Query",
"description": "Execute SQL queries on DataSource beans",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.SqlQueryDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-trace.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-trace.json
index 43ee6575ec41..1b2c4a040bfd 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-trace.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/sql-trace.json
@@ -6,6 +6,7 @@
"title": "SQL Trace",
"description": "Trace SQL query executions",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.SqlTraceDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/startup-recorder.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/startup-recorder.json
index 83bbb40681e9..b258f1962d36 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/startup-recorder.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/startup-recorder.json
@@ -6,6 +6,7 @@
"title": "Startup Recorder",
"description": "Starting recording information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.StartupRecorderDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/system-properties.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/system-properties.json
index 972f953ae340..d8f996856e7e 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/system-properties.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/system-properties.json
@@ -6,6 +6,7 @@
"title": "System Properties",
"description": "Displays Java System Properties",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.SystemPropertiesDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/thread.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/thread.json
index 4b9008704da5..7ef081e60cf5 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/thread.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/thread.json
@@ -6,6 +6,7 @@
"title": "Thread",
"description": "Displays JVM Threads information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.ThreadDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/top.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/top.json
index f6d95b92dd95..58e79ae88399 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/top.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/top.json
@@ -6,6 +6,7 @@
"title": "Top Routes",
"description": "Display the top routes",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.TopDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/trace.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/trace.json
index e9814d31eb7a..9edb3eca5601 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/trace.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/trace.json
@@ -6,6 +6,7 @@
"title": "Camel Tracing",
"description": "Trace routed messages",
"deprecated": false,
+ "readOnly": false,
"javaType": "org.apache.camel.impl.console.TraceDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/transformers.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/transformers.json
index fae346548208..e5490278b2fe 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/transformers.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/transformers.json
@@ -6,6 +6,7 @@
"title": "Data Type Transformers",
"description": "Data-type transformer information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.TransformerConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/type-converters.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/type-converters.json
index fbc09620bc17..45f5ea1da158 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/type-converters.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/type-converters.json
@@ -6,6 +6,7 @@
"title": "Type Converters",
"description": "Camel Type Converter information",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.TypeConverterConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/variables.json
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/variables.json
index d73b94b813c7..0f2c9c059fa8 100644
---
a/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/variables.json
+++
b/core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/variables.json
@@ -6,6 +6,7 @@
"title": "Variables",
"description": "Displays variables",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.impl.console.VariablesDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-console",
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ApiDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ApiDevConsole.java
index f3963069a2c6..2fe27561dda6 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ApiDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ApiDevConsole.java
@@ -82,15 +82,24 @@ public class ApiDevConsole extends AbstractDevConsole {
for (org.apache.camel.console.DevConsole console : consoles) {
String id = console.getId();
+ boolean readOnly = console.isReadOnly();
+
JsonObject pathItem = new JsonObject();
- JsonObject post = new JsonObject();
- post.put("summary", console.getDisplayName());
- post.put("description", console.getDescription());
- post.put("operationId", id);
-
- JsonObject requestBody = buildConsoleRequestBody(id);
- if (requestBody != null) {
- post.put("requestBody", requestBody);
+ JsonObject operation = new JsonObject();
+ operation.put("summary", console.getDisplayName());
+ operation.put("description", console.getDescription());
+ operation.put("operationId", id);
+
+ if (readOnly) {
+ JsonArray parameters = buildConsoleParameters(id);
+ if (parameters != null) {
+ operation.put("parameters", parameters);
+ }
+ } else {
+ JsonObject requestBody = buildConsoleRequestBody(id);
+ if (requestBody != null) {
+ operation.put("requestBody", requestBody);
+ }
}
JsonObject responses = new JsonObject();
@@ -100,9 +109,9 @@ public class ApiDevConsole extends AbstractDevConsole {
responseContent.put("application/json", new JsonObject());
ok.put("content", responseContent);
responses.put("200", ok);
- post.put("responses", responses);
+ operation.put("responses", responses);
- pathItem.put("post", post);
+ pathItem.put(readOnly ? "get" : "post", operation);
paths.put("/q/dev/" + id, pathItem);
}
}
@@ -111,7 +120,12 @@ public class ApiDevConsole extends AbstractDevConsole {
return Jsoner.prettyPrint(root.toJson());
}
- private JsonObject buildConsoleRequestBody(String consoleId) {
+ /**
+ * Loads and parses the option schema for the given console.
+ *
+ * @return the parsed options, or null if the console has no options or
the schema could not be loaded
+ */
+ private JsonObject loadConsoleOptions(String consoleId) {
try {
String json = ((CatalogCamelContext) getCamelContext())
.getDevConsoleParameterJsonSchema(consoleId);
@@ -126,56 +140,106 @@ public class ApiDevConsole extends AbstractDevConsole {
if (!(optionsObj instanceof JsonObject opts) || opts.isEmpty()) {
return null;
}
+ return opts;
+ } catch (Exception e) {
+ // ignore
+ return null;
+ }
+ }
- JsonObject properties = new JsonObject();
- JsonArray required = new JsonArray();
- for (Map.Entry<String, Object> entry : opts.entrySet()) {
- String name = entry.getKey();
- if (!(entry.getValue() instanceof JsonObject opt)) {
- continue;
- }
- JsonObject prop = new JsonObject();
- String type = opt.getString("type");
- if (type != null) {
- prop.put("type", type);
- }
- String description = opt.getString("description");
- if (description != null) {
- prop.put("description", description);
- }
- Object defaultValue = opt.get("defaultValue");
- if (defaultValue != null) {
- prop.put("default", defaultValue);
- }
- Object enumValues = opt.get("enum");
- if (enumValues instanceof JsonArray ea && !ea.isEmpty()) {
- prop.put("enum", enumValues);
- }
- properties.put(name, prop);
+ private JsonObject buildConsoleRequestBody(String consoleId) {
+ JsonObject opts = loadConsoleOptions(consoleId);
+ if (opts == null) {
+ return null;
+ }
- Boolean req = opt.getBoolean("required");
- if (req != null && req) {
- required.add(name);
- }
+ JsonObject properties = new JsonObject();
+ JsonArray required = new JsonArray();
+ for (Map.Entry<String, Object> entry : opts.entrySet()) {
+ String name = entry.getKey();
+ if (!(entry.getValue() instanceof JsonObject opt)) {
+ continue;
+ }
+ JsonObject prop = new JsonObject();
+ String type = opt.getString("type");
+ if (type != null) {
+ prop.put("type", type);
+ }
+ String description = opt.getString("description");
+ if (description != null) {
+ prop.put("description", description);
+ }
+ Object defaultValue = opt.get("defaultValue");
+ if (defaultValue != null) {
+ prop.put("default", defaultValue);
}
+ Object enumValues = opt.get("enum");
+ if (enumValues instanceof JsonArray ea && !ea.isEmpty()) {
+ prop.put("enum", enumValues);
+ }
+ properties.put(name, prop);
- JsonObject schema = new JsonObject();
- schema.put("type", "object");
- schema.put("properties", properties);
- if (!required.isEmpty()) {
- schema.put("required", required);
+ Boolean req = opt.getBoolean("required");
+ if (req != null && req) {
+ required.add(name);
}
+ }
- JsonObject mediaType = new JsonObject();
- mediaType.put("schema", schema);
- JsonObject content = new JsonObject();
- content.put("application/json", mediaType);
- JsonObject requestBody = new JsonObject();
- requestBody.put("content", content);
- return requestBody;
- } catch (Exception e) {
- // ignore
+ JsonObject schema = new JsonObject();
+ schema.put("type", "object");
+ schema.put("properties", properties);
+ if (!required.isEmpty()) {
+ schema.put("required", required);
+ }
+
+ JsonObject mediaType = new JsonObject();
+ mediaType.put("schema", schema);
+ JsonObject content = new JsonObject();
+ content.put("application/json", mediaType);
+ JsonObject requestBody = new JsonObject();
+ requestBody.put("content", content);
+ return requestBody;
+ }
+
+ private JsonArray buildConsoleParameters(String consoleId) {
+ JsonObject opts = loadConsoleOptions(consoleId);
+ if (opts == null) {
return null;
}
+
+ JsonArray parameters = new JsonArray();
+ for (Map.Entry<String, Object> entry : opts.entrySet()) {
+ String name = entry.getKey();
+ if (!(entry.getValue() instanceof JsonObject opt)) {
+ continue;
+ }
+ JsonObject param = new JsonObject();
+ param.put("name", name);
+ param.put("in", "query");
+ String description = opt.getString("description");
+ if (description != null) {
+ param.put("description", description);
+ }
+ Boolean req = opt.getBoolean("required");
+ param.put("required", req != null && req);
+
+ JsonObject schema = new JsonObject();
+ String type = opt.getString("type");
+ if (type != null) {
+ schema.put("type", type);
+ }
+ Object defaultValue = opt.get("defaultValue");
+ if (defaultValue != null) {
+ schema.put("default", defaultValue);
+ }
+ Object enumValues = opt.get("enum");
+ if (enumValues instanceof JsonArray ea && !ea.isEmpty()) {
+ schema.put("enum", enumValues);
+ }
+ param.put("schema", schema);
+
+ parameters.add(param);
+ }
+ return parameters.isEmpty() ? null : parameters;
}
}
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
index 211598e215ed..1d726e7d911f 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
@@ -41,7 +41,7 @@ import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
-@DevConsole(name = "debug", description = "Camel route debugger")
+@DevConsole(name = "debug", description = "Camel route debugger", readOnly =
false)
public class DebugDevConsole extends AbstractDevConsole {
@Metadata(label = "query", description = "Action command to execute on the
debugger", javaType = "java.lang.String")
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java
index 2eeea51acd74..0dd14f26f844 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java
@@ -28,7 +28,8 @@ import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.json.JsonObject;
-@DevConsole(name = "eval-language", displayName = "Evaluate Language",
description = "Evaluate Language and display result")
+@DevConsole(name = "eval-language", displayName = "Evaluate Language",
description = "Evaluate Language and display result",
+ readOnly = false)
public class EvalLanguageDevConsole extends AbstractDevConsole {
@Metadata(label = "query", description = "The language to use", javaType =
"java.lang.String", defaultValue = "simple")
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/HeapDumpDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/HeapDumpDevConsole.java
index 9351218b149a..9280c7a397a3 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/HeapDumpDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/HeapDumpDevConsole.java
@@ -33,7 +33,7 @@ import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.json.JsonObject;
@DevConsole(name = "heap-dump", displayName = "Heap Dump",
- description = "Write a heap dump (.hprof) file for deep memory
analysis")
+ description = "Write a heap dump (.hprof) file for deep memory
analysis", readOnly = false)
@Configurer(extended = true)
public class HeapDumpDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/JfrMemoryLeakDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/JfrMemoryLeakDevConsole.java
index 705b375790de..0c8ffc94c33a 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/JfrMemoryLeakDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/JfrMemoryLeakDevConsole.java
@@ -52,7 +52,7 @@ import org.slf4j.LoggerFactory;
* chains back to GC roots, enabling memory leak diagnosis.
*/
@DevConsole(name = "jfr-memory-leak", displayName = "JFR Memory Leak",
- description = "JFR-based old object sampling for memory leak
diagnosis")
+ description = "JFR-based old object sampling for memory leak
diagnosis", readOnly = false)
@Configurer(extended = true)
public class JfrMemoryLeakDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
index a1c0b8baf57a..f65f956013eb 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ProcessorDevConsole.java
@@ -42,7 +42,7 @@ import org.apache.camel.util.json.Jsoner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@DevConsole(name = "processor", description = "Processor information")
+@DevConsole(name = "processor", description = "Processor information",
readOnly = false)
public class ProcessorDevConsole extends AbstractDevConsole {
private static final Logger LOG =
LoggerFactory.getLogger(ProcessorDevConsole.class);
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReceiveDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReceiveDevConsole.java
index 71e8da82d952..776f836041ab 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReceiveDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReceiveDevConsole.java
@@ -47,7 +47,8 @@ import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
-@DevConsole(name = "receive", displayName = "Camel Receive", description =
"Consume messages from endpoints")
+@DevConsole(name = "receive", displayName = "Camel Receive", description =
"Consume messages from endpoints",
+ readOnly = false)
@Configurer(extended = true)
public class ReceiveDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
index 1507da680973..995226c32eb1 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
@@ -31,7 +31,7 @@ import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
-@DevConsole(name = "reload", description = "Console for reloading running
Camel")
+@DevConsole(name = "reload", description = "Console for reloading running
Camel", readOnly = false)
public class ReloadDevConsole extends AbstractDevConsole {
@Metadata(label = "query", description = "Option to trigger reloading",
javaType = "java.lang.Boolean",
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
index 5e77d6f69f5f..62fe9db3d0fc 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
@@ -45,7 +45,7 @@ import org.apache.camel.util.json.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@DevConsole(name = "route", description = "Route information")
+@DevConsole(name = "route", description = "Route information", readOnly =
false)
public class RouteDevConsole extends AbstractDevConsole {
private static final Logger LOG =
LoggerFactory.getLogger(RouteDevConsole.class);
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteGroupDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteGroupDevConsole.java
index 80984b9fd8a5..5c0180d9ce34 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteGroupDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteGroupDevConsole.java
@@ -43,7 +43,7 @@ import org.apache.camel.util.json.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@DevConsole(name = "route-group", description = "Route Group information")
+@DevConsole(name = "route-group", description = "Route Group information",
readOnly = false)
public class RouteGroupDevConsole extends AbstractDevConsole {
private static final Logger LOG =
LoggerFactory.getLogger(RouteGroupDevConsole.class);
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/SendDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/SendDevConsole.java
index 8fd1c5e39034..d9aeeaa1ffce 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/SendDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/SendDevConsole.java
@@ -43,7 +43,7 @@ import org.apache.camel.util.StopWatch;
import org.apache.camel.util.TimeUtils;
import org.apache.camel.util.json.JsonObject;
-@DevConsole(name = "send", displayName = "Camel Send", description = "Send
messages to endpoints")
+@DevConsole(name = "send", displayName = "Camel Send", description = "Send
messages to endpoints", readOnly = false)
@Configurer(extended = true)
public class SendDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/SqlQueryDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/SqlQueryDevConsole.java
index 914d1de0a948..1a6ba861c709 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/SqlQueryDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/SqlQueryDevConsole.java
@@ -40,7 +40,8 @@ import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
-@DevConsole(name = "sql-query", displayName = "SQL Query", description =
"Execute SQL queries on DataSource beans")
+@DevConsole(name = "sql-query", displayName = "SQL Query", description =
"Execute SQL queries on DataSource beans",
+ readOnly = false)
@Configurer(extended = true)
public class SqlQueryDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
index d1aeda3d3d48..eb59c10534d3 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
@@ -29,7 +29,7 @@ import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
-@DevConsole(name = "trace", displayName = "Camel Tracing", description =
"Trace routed messages")
+@DevConsole(name = "trace", displayName = "Camel Tracing", description =
"Trace routed messages", readOnly = false)
@Configurer(extended = true)
public class TraceDevConsole extends AbstractDevConsole {
diff --git
a/core/camel-console/src/test/java/org/apache/camel/impl/console/ApiDevConsoleTest.java
b/core/camel-console/src/test/java/org/apache/camel/impl/console/ApiDevConsoleTest.java
new file mode 100644
index 000000000000..0fbab572ad9b
--- /dev/null
+++
b/core/camel-console/src/test/java/org/apache/camel/impl/console/ApiDevConsoleTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.console;
+
+import org.apache.camel.console.DevConsole;
+import org.apache.camel.console.DevConsoleRegistry;
+import org.apache.camel.util.json.JsonObject;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ApiDevConsoleTest extends AbstractDevConsoleTest {
+
+ private JsonObject openApiPaths() {
+ DevConsoleRegistry dcr =
context.getCamelContextExtension().getContextPlugin(DevConsoleRegistry.class);
+ dcr.loadDevConsoles();
+
+ DevConsole con = assertConsoleExists("api", "camel");
+ JsonObject root = callJson(con);
+ JsonObject paths = root.getJsonObject("paths");
+ assertThat(paths).isNotNull();
+ return paths;
+ }
+
+ @Test
+ public void testReadOnlyConsoleUsesGet() {
+ JsonObject paths = openApiPaths();
+
+ JsonObject contextPath = paths.getJsonObject("/q/dev/context");
+ assertThat(contextPath).as("context console path should
exist").isNotNull();
+ assertThat(contextPath.getJsonObject("get")).as("context console
should be declared as GET").isNotNull();
+ assertThat(contextPath.getJsonObject("post")).as("context console
should not be declared as POST").isNull();
+ }
+
+ @Test
+ public void testMutatingConsoleUsesPost() {
+ JsonObject paths = openApiPaths();
+
+ JsonObject routePath = paths.getJsonObject("/q/dev/route");
+ assertThat(routePath).as("route console path should
exist").isNotNull();
+ assertThat(routePath.getJsonObject("get")).as("route console should
not be declared as GET").isNull();
+
+ JsonObject post = routePath.getJsonObject("post");
+ assertThat(post).as("route console should be declared as
POST").isNotNull();
+ assertThat(post.get("requestBody")).as("route console POST should
carry a requestBody").isNotNull();
+ }
+
+ @Test
+ public void testIsReadOnlyDefaults() {
+ assertThat(new ContextDevConsole().isReadOnly()).isTrue();
+ assertThat(new RouteDevConsole().isReadOnly()).isFalse();
+ assertThat(new EvalLanguageDevConsole().isReadOnly()).isFalse();
+ assertThat(new SendDevConsole().isReadOnly()).isFalse();
+ }
+}
diff --git
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/dev-console/bean-model.json
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/dev-console/bean-model.json
index 23840a6e83e8..6ee5e78ec5f2 100644
---
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/dev-console/bean-model.json
+++
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/dev-console/bean-model.json
@@ -6,6 +6,7 @@
"title": "Bean Model",
"description": "Displays beans from the DSL model",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.model.console.BeanModelDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-core-model",
diff --git
a/core/camel-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-configuration.json
b/core/camel-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-configuration.json
index bcdda430dafb..35d1fc8dc0d1 100644
---
a/core/camel-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-configuration.json
+++
b/core/camel-main/src/generated/resources/META-INF/org/apache/camel/dev-console/main-configuration.json
@@ -6,6 +6,7 @@
"title": "Main Configuration",
"description": "Display Camel startup configuration",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.main.MainConfigurationDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-main",
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/console/AbstractDevConsole.java
b/core/camel-support/src/main/java/org/apache/camel/support/console/AbstractDevConsole.java
index bfe752d92475..ce888aa9e7b0 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/console/AbstractDevConsole.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/console/AbstractDevConsole.java
@@ -61,6 +61,13 @@ public abstract class AbstractDevConsole extends
ServiceSupport implements DevCo
return true;
}
+ @Override
+ public boolean isReadOnly() {
+ org.apache.camel.spi.annotations.DevConsole ann
+ =
getClass().getAnnotation(org.apache.camel.spi.annotations.DevConsole.class);
+ return ann == null || ann.readOnly();
+ }
+
@Override
public String getGroup() {
return group;
diff --git
a/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jbang.json
b/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jbang.json
index baaca0aeee09..616c7d091054 100644
---
a/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jbang.json
+++
b/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/jbang.json
@@ -6,6 +6,7 @@
"title": "Camel CLI",
"description": "Information about Camel CLI",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.jbang.console.JBangDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-jbang-console",
diff --git
a/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source-dir.json
b/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source-dir.json
index 492f7d07826b..f7e60cfb3684 100644
---
a/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source-dir.json
+++
b/dsl/camel-jbang/camel-jbang-console/src/generated/resources/META-INF/org/apache/camel/dev-console/source-dir.json
@@ -6,6 +6,7 @@
"title": "Source Directory",
"description": "Information about Camel CLI source files",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.jbang.console.SourceDirDevConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-jbang-console",
diff --git
a/dsl/camel-kamelet-main/src/generated/resources/META-INF/org/apache/camel/dev-console/dependency-downloader.json
b/dsl/camel-kamelet-main/src/generated/resources/META-INF/org/apache/camel/dev-console/dependency-downloader.json
index b3ed8a6458e0..a9e68394e0d6 100644
---
a/dsl/camel-kamelet-main/src/generated/resources/META-INF/org/apache/camel/dev-console/dependency-downloader.json
+++
b/dsl/camel-kamelet-main/src/generated/resources/META-INF/org/apache/camel/dev-console/dependency-downloader.json
@@ -6,6 +6,7 @@
"title": "Maven Dependency Downloader",
"description": "Displays information about dependencies downloaded at
runtime",
"deprecated": false,
+ "readOnly": true,
"javaType": "org.apache.camel.main.console.DependencyDownloaderConsole",
"groupId": "org.apache.camel",
"artifactId": "camel-kamelet-main",
diff --git
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
index 8c3fa3d24bbf..2f2c0976b70b 100644
---
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
+++
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
@@ -83,6 +83,7 @@ public class GenerateDevConsoleMojo extends
AbstractGeneratorMojo {
private String displayName;
private String description;
private boolean deprecated;
+ private boolean readOnly = true;
private final List<DevConsoleOptionModel> options = new ArrayList<>();
public String getClassName() {
@@ -133,6 +134,14 @@ public class GenerateDevConsoleMojo extends
AbstractGeneratorMojo {
this.deprecated = deprecated;
}
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
+ public void setReadOnly(boolean readOnly) {
+ this.readOnly = readOnly;
+ }
+
public List<DevConsoleOptionModel> getOptions() {
return options;
}
@@ -169,6 +178,7 @@ public class GenerateDevConsoleMojo extends
AbstractGeneratorMojo {
model.setName(annotationValue(a, "name"));
model.setDisplayName(annotationValue(a, "displayName"));
model.setDescription(annotationValue(a, "description"));
+ model.setReadOnly(!"false".equals(annotationValue(a, "readOnly")));
// skip default registry
boolean skip = "default-registry".equals(model.getName());
if (!skip) {
@@ -228,6 +238,7 @@ public class GenerateDevConsoleMojo extends
AbstractGeneratorMojo {
}
jo.put("description", model.getDescription());
jo.put("deprecated", model.isDeprecated());
+ jo.put("readOnly", model.isReadOnly());
jo.put("javaType", model.getClassName());
jo.put("groupId", project.getGroupId());
jo.put("artifactId", project.getArtifactId());
diff --git
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/DevConsole.java
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/DevConsole.java
index 337360203da4..1f93908cac86 100644
---
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/DevConsole.java
+++
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/DevConsole.java
@@ -51,4 +51,12 @@ public @interface DevConsole {
*/
String description();
+ /**
+ * Whether this console is read-only (safe, and does not change any
runtime state).
+ * <p/>
+ * Consoles that mutate state (such as starting/stopping a route, sending
a message, or triggering a heap dump) must
+ * set this to {@code false}.
+ */
+ boolean readOnly() default true;
+
}