You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/10/21 09:39:44 UTC

[camel] 02/04: CAMEL-20024: camel-core-model - Add description for new bean DSL

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch model-apps
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6e71c0ba4e599664a14a6dcfc2bc5377eca3a18c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Oct 21 11:18:05 2023 +0200

    CAMEL-20024: camel-core-model - Add description for new bean DSL
---
 .../org/apache/camel/catalog/models-app.properties |  7 ++++
 .../org/apache/camel/catalog/models-app/bean.json  | 26 ++++++++++++
 .../catalog/{models => models-app}/beans.json      |  0
 .../catalog/{models => models-app}/camel.json      |  0
 .../camel/catalog/models-app/constructor.json      | 18 ++++++++
 .../camel/catalog/models-app/constructors.json     | 17 ++++++++
 .../camel/catalog/models-app/properties.json       | 17 ++++++++
 .../apache/camel/catalog/models-app/property.json  | 19 +++++++++
 .../org/apache/camel/catalog/models.properties     |  2 -
 .../services/org/apache/camel/model.properties     |  2 -
 .../resources/org/apache/camel/model/app/bean.json | 26 ++++++++++++
 .../org/apache/camel/model/app/constructor.json    | 18 ++++++++
 .../org/apache/camel/model/app/constructors.json   | 17 ++++++++
 .../org/apache/camel/model/app/properties.json     | 17 ++++++++
 .../org/apache/camel/model/app/property.json       | 19 +++++++++
 .../apache/camel/maven/packaging/GenerateMojo.java |  2 +-
 .../camel/maven/packaging/PackageModelMojo.java    |  2 +
 .../camel/maven/packaging/PrepareCatalogMojo.java  | 42 +++++++++++++++++++
 .../camel/maven/packaging/SchemaGeneratorMojo.java | 49 +++++++++++++++++++---
 19 files changed, 290 insertions(+), 10 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties
new file mode 100644
index 00000000000..2a3a0b1b286
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app.properties
@@ -0,0 +1,7 @@
+bean
+beans
+camel
+constructor
+constructors
+properties
+property
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json
new file mode 100644
index 00000000000..ffb007e78e4
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/bean.json
@@ -0,0 +1,26 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "bean",
+    "title": "Bean",
+    "description": "Define custom beans that can be used in your Camel routes and in general.",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.RegistryBeanDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "name": { "index": 0, "kind": "attribute", "displayName": "Name", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the bean (bean id)" },
+    "type": { "index": 1, "kind": "attribute", "displayName": "Type", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class name (fully qualified) of the bean" },
+    "initMethod": { "index": 2, "kind": "attribute", "displayName": "Init Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception." },
+    "destroyMethod": { "index": 3, "kind": "attribute", "displayName": "Destroy Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must have no arguments, but may throw any exception." },
+    "factoryMethod": { "index": 4, "kind": "attribute", "displayName": "Factory Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of method to invoke when creating the bean via a factory bean." },
+    "factoryBean": { "index": 5, "kind": "attribute", "displayName": "Factory Bean", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of factory bean (bean id) to use for creating the bean." },
+    "scriptLanguage": { "index": 6, "kind": "attribute", "displayName": "Script Language", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc." },
+    "constructors": { "index": 7, "kind": "element", "displayName": "Constructors", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.Integer, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument list, starting from zero." },
+    "properties": { "index": 8, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional properties to set on the created bean." },
+    "script": { "index": 9, "kind": "element", "displayName": "Script", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com\/foo\/myscript.groovy, resource:file:\/var\/myscript.groovy, then its loaded from the external resource." }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/beans.json
similarity index 100%
rename from catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json
rename to catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/beans.json
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/camel.json
similarity index 100%
rename from catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel.json
rename to catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/camel.json
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json
new file mode 100644
index 00000000000..8f81bfdb5ec
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructor.json
@@ -0,0 +1,18 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "constructor",
+    "title": "Constructor",
+    "description": "Bean constructor argument",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanConstructorDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "index": { "index": 0, "kind": "attribute", "displayName": "Index", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor argument index. The first argument must use index 0." },
+    "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The argument value for the constructor." }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json
new file mode 100644
index 00000000000..2d1bc3fd03b
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/constructors.json
@@ -0,0 +1,17 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "constructors",
+    "title": "Constructors",
+    "description": "Bean constructor arguments",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanConstructorsDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "constructor": { "index": 0, "kind": "element", "displayName": "Constructor", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanConstructorDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor arguments" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json
new file mode 100644
index 00000000000..c271a00ba25
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/properties.json
@@ -0,0 +1,17 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "properties",
+    "title": "Properties",
+    "description": "Bean properties",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "property": { "index": 0, "kind": "element", "displayName": "Property", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanPropertyDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Bean properties" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json
new file mode 100644
index 00000000000..b3ca7e564c8
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models-app/property.json
@@ -0,0 +1,19 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "property",
+    "title": "Property",
+    "description": "Bean property",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanPropertyDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "key": { "index": 0, "kind": "attribute", "displayName": "Key", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the property" },
+    "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The property value" },
+    "properties": { "index": 2, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Optional nested properties." }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
index 33d1fd59b17..20ed1838a66 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
@@ -7,12 +7,10 @@ base64
 basicAuth
 batch-config
 bean
-beans
 bearerToken
 bindy
 blacklistServiceFilter
 cachingServiceDiscovery
-camel
 cbor
 choice
 circuitBreaker
diff --git a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
index 3dcbb97fe86..970b6fa8b3a 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
+++ b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
@@ -8,12 +8,10 @@ base64
 basicAuth
 batch-config
 bean
-beans
 bearerToken
 bindy
 blacklistServiceFilter
 cachingServiceDiscovery
-camel
 cbor
 choice
 circuitBreaker
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json
new file mode 100644
index 00000000000..ffb007e78e4
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/bean.json
@@ -0,0 +1,26 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "bean",
+    "title": "Bean",
+    "description": "Define custom beans that can be used in your Camel routes and in general.",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.RegistryBeanDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "name": { "index": 0, "kind": "attribute", "displayName": "Name", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the bean (bean id)" },
+    "type": { "index": 1, "kind": "attribute", "displayName": "Type", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class name (fully qualified) of the bean" },
+    "initMethod": { "index": 2, "kind": "attribute", "displayName": "Init Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments, but may throw any exception." },
+    "destroyMethod": { "index": 3, "kind": "attribute", "displayName": "Destroy Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must have no arguments, but may throw any exception." },
+    "factoryMethod": { "index": 4, "kind": "attribute", "displayName": "Factory Method", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of method to invoke when creating the bean via a factory bean." },
+    "factoryBean": { "index": 5, "kind": "attribute", "displayName": "Factory Bean", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of factory bean (bean id) to use for creating the bean." },
+    "scriptLanguage": { "index": 6, "kind": "attribute", "displayName": "Script Language", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc." },
+    "constructors": { "index": 7, "kind": "element", "displayName": "Constructors", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.Integer, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument list, starting from zero." },
+    "properties": { "index": 8, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "Optional properties to set on the created bean." },
+    "script": { "index": 9, "kind": "element", "displayName": "Script", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com\/foo\/myscript.groovy, resource:file:\/var\/myscript.groovy, then its loaded from the external resource." }
+  }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json
new file mode 100644
index 00000000000..8f81bfdb5ec
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructor.json
@@ -0,0 +1,18 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "constructor",
+    "title": "Constructor",
+    "description": "Bean constructor argument",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanConstructorDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "index": { "index": 0, "kind": "attribute", "displayName": "Index", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor argument index. The first argument must use index 0." },
+    "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The argument value for the constructor." }
+  }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json
new file mode 100644
index 00000000000..2d1bc3fd03b
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/constructors.json
@@ -0,0 +1,17 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "constructors",
+    "title": "Constructors",
+    "description": "Bean constructor arguments",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanConstructorsDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "constructor": { "index": 0, "kind": "element", "displayName": "Constructor", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanConstructorDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Constructor arguments" }
+  }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json
new file mode 100644
index 00000000000..c271a00ba25
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/properties.json
@@ -0,0 +1,17 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "properties",
+    "title": "Properties",
+    "description": "Bean properties",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "property": { "index": 0, "kind": "element", "displayName": "Property", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.BeanPropertyDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Bean properties" }
+  }
+}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json
new file mode 100644
index 00000000000..b3ca7e564c8
--- /dev/null
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/app/property.json
@@ -0,0 +1,19 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "property",
+    "title": "Property",
+    "description": "Bean property",
+    "deprecated": false,
+    "label": "configuration",
+    "javaType": "org.apache.camel.model.app.BeanPropertyDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "key": { "index": 0, "kind": "attribute", "displayName": "Key", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the property" },
+    "value": { "index": 1, "kind": "attribute", "displayName": "Value", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The property value" },
+    "properties": { "index": 2, "kind": "element", "displayName": "Properties", "required": false, "type": "object", "javaType": "org.apache.camel.model.app.BeanPropertiesDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Optional nested properties." }
+  }
+}
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
index 880ded01115..bb4cc531bec 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
@@ -32,7 +32,7 @@ public class GenerateMojo extends AbstractGenerateMojo {
     protected void doExecute() throws MojoFailureException, MojoExecutionException {
         // jandex
         invoke(PackageJandexMojo.class);
-        // generate-schema
+        // generate model json schema
         invoke(SchemaGeneratorMojo.class);
         // generate-type-converter-loader
         invoke(TypeConverterLoaderGeneratorMojo.class);
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
index 9001985d3d3..89800bba8e1 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java
@@ -68,6 +68,8 @@ public class PackageModelMojo extends AbstractGeneratorMojo {
         try (Stream<Path> jsonFiles
                 = PackageHelper.findJsonFiles(buildDir.toPath().resolve("classes/org/apache/camel/model"))) {
             models = jsonFiles
+                    // special for app should not be in the summary
+                    .filter(p -> !p.getParent().getFileName().toString().endsWith("app"))
                     .map(p -> p.getFileName().toString())
                     // strip out .json from the name
                     .map(s -> s.substring(0, s.length() - PackageHelper.JSON_SUFIX.length()))
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
index 5b9581db001..b47c7da7c0d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
@@ -120,6 +120,12 @@ public class PrepareCatalogMojo extends AbstractMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/models")
     protected File modelsOutDir;
 
+    /**
+     * The output directory for models-app catalog
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/models-app")
+    protected File modelsAppOutDir;
+
     /**
      * The output directory for XML schemas catalog
      */
@@ -352,6 +358,7 @@ public class PrepareCatalogMojo extends AbstractMojo {
             }
 
             executeModel();
+            executeModelApps();
             Set<String> components = executeComponents();
             Set<String> dataformats = executeDataFormats();
             Set<String> languages = executeLanguages();
@@ -381,8 +388,10 @@ public class PrepareCatalogMojo extends AbstractMojo {
 
         // find all json files in camel-core
         Path coreDirTarget = modelDir.resolve("target/classes/org/apache/camel/model");
+        Path coreModelAppDirTarget = modelDir.resolve("target/classes/org/apache/camel/model/app");
         jsonFiles = allJsonFiles.stream()
                 .filter(p -> p.startsWith(coreDirTarget))
+                .filter(p -> !p.startsWith(coreModelAppDirTarget))
                 .collect(Collectors.toCollection(TreeSet::new));
         getLog().info("Found " + jsonFiles.size() + " model json files");
 
@@ -432,6 +441,39 @@ public class PrepareCatalogMojo extends AbstractMojo {
         printModelsReport(jsonFiles, duplicateJsonFiles, missingLabels, usedLabels, missingJavaDoc);
     }
 
+    protected void executeModelApps() throws Exception {
+        Path modelDir = this.modelDir.toPath();
+        Path modelsOutDir = this.modelsAppOutDir.toPath();
+
+        getLog().info("================================================================================");
+        getLog().info("Copying all Camel model-app json descriptors");
+
+        // lets use sorted set/maps
+        Set<Path> jsonFiles;
+
+        // find all json files in camel-core
+        Path coreDirTarget = modelDir.resolve("target/classes/org/apache/camel/model/app");
+        jsonFiles = allJsonFiles.stream()
+                .filter(p -> p.startsWith(coreDirTarget))
+                .collect(Collectors.toCollection(TreeSet::new));
+        getLog().info("Found " + jsonFiles.size() + " model-app json files");
+
+        // make sure to create out dir
+        Files.createDirectories(modelsOutDir);
+
+        // Copy all descriptors
+        Map<Path, Path> newJsons = map(jsonFiles, p -> p, p -> modelsOutDir.resolve(p.getFileName()));
+        try (Stream<Path> stream = list(modelsOutDir).filter(p -> !newJsons.containsValue(p))) {
+            stream.forEach(this::delete);
+        }
+        newJsons.forEach(this::copy);
+
+        Path all = modelsOutDir.resolve("../models-app.properties");
+        Set<String> modelNames
+                = jsonFiles.stream().map(PrepareCatalogMojo::asComponentName).collect(Collectors.toCollection(TreeSet::new));
+        FileUtil.updateFile(all, String.join("\n", modelNames) + "\n");
+    }
+
     protected Set<String> executeComponents() throws Exception {
         Path componentsOutDir = this.componentsOutDir.toPath();
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
index bf1935e2c6f..14443a39c1e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
@@ -81,6 +81,15 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
     public static final DotName XML_ROOT_ELEMENT = DotName.createSimple(XmlRootElement.class.getName());
     public static final DotName XML_TYPE = DotName.createSimple(XmlType.class.getName());
 
+    // special for app package
+    private static final DotName APP_PACKAGE = DotName.createSimple("org.apache.camel.model.app");
+    private static final Map<String, String> APP_NAME_MAPPINGS = Map.of(
+            "BeanConstructorDefinition", "constructor",
+            "BeanConstructorsDefinition", "constructors",
+            "BeanPropertiesDefinition", "properties",
+            "BeanPropertyDefinition", "property",
+            "RegistryBeanDefinition", "bean");
+
     // special when using expression/predicates in the model
     private static final String ONE_OF_TYPE_NAME = "org.apache.camel.model.ExpressionSubElementDefinition";
     private static final String[] ONE_OF_LANGUAGES = new String[] {
@@ -150,12 +159,27 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
                 .filter(cpa -> cpa.target().asClass().name().toString().startsWith("org.apache.camel.model."))
                 .map(cpa -> cpa.target().asClass())
                 .collect(Collectors.toSet());
+
         if (!coreElements.isEmpty()) {
             getLog().info(String.format("Found %d core elements", coreElements.size()));
         }
 
+        // add special for bean DSL in app package
+        Set<ClassInfo> appElements = index.getClassesInPackage(APP_PACKAGE).stream()
+                .filter(cpa -> cpa.hasAnnotation(XML_TYPE))
+                .filter(cpa -> cpa.kind() == Kind.CLASS)
+                .collect(Collectors.toSet());
+
+        if (!coreElements.isEmpty()) {
+            getLog().info(String.format("Found %d app elements", appElements.size()));
+        }
+
+        Set<ClassInfo> classes = new TreeSet<>(Comparator.comparing(ClassInfo::name));
+        classes.addAll(coreElements);
+        classes.addAll(appElements);
+
         // we want them to be sorted
-        for (ClassInfo element : coreElements) {
+        for (ClassInfo element : classes) {
             processModelClass(element);
         }
 
@@ -189,10 +213,26 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
             return;
         }
 
-        AnnotationValue annotationValue = element.classAnnotation(XML_ROOT_ELEMENT).value("name");
-        String aName = annotationValue != null ? annotationValue.asString() : null;
+        String aName = null;
+        if (element.hasAnnotation(XML_ROOT_ELEMENT)) {
+            AnnotationValue av = element.declaredAnnotation(XML_ROOT_ELEMENT).value("name");
+            aName = av != null ? av.asString() : null;
+        }
         if (Strings.isNullOrEmpty(aName) || "##default".equals(aName)) {
-            aName = element.classAnnotation(XML_TYPE).value("name").asString();
+            if (element.hasAnnotation(XML_TYPE)) {
+                AnnotationValue av = element.declaredAnnotation(XML_TYPE).value("name");
+                aName = av != null ? av.asString() : null;
+            }
+        }
+        if (aName == null) {
+            // special for app package
+            String sn = element.name().withoutPackagePrefix();
+            aName = APP_NAME_MAPPINGS.get(sn);
+        }
+        if (aName == null) {
+            getLog().warn(
+                    "Class is not annotated with @XmlRootElement or @XmlType. Skipping class: " + element.name().toString());
+            return;
         }
         final String name = aName;
 
@@ -238,7 +278,6 @@ public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
                 resourcesOutputDir.toPath(),
                 packageName.replace('.', '/') + "/" + fileName,
                 json);
-
     }
 
     private IndexView getIndex() {