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 2022/12/30 17:12:00 UTC
[camel] branch main updated: CAMEL-18850: camel-core-model - @XmlAttributes should be String or Enum type only
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 e0669037499 CAMEL-18850: camel-core-model - @XmlAttributes should be String or Enum type only
e0669037499 is described below
commit e06690374992b807ebf5b9d4c2747df0988b26d8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Dec 30 18:11:46 2022 +0100
CAMEL-18850: camel-core-model - @XmlAttributes should be String or Enum type only
---
.../jsonapi/JsonApiDataFormatConfigurer.java | 4 +-
.../apache/camel/component/jsonapi/jsonApi.json | 4 +-
.../camel/component/jsonapi/JsonApiDataFormat.java | 109 ++++++++++++++++----
.../component/jsonapi/JsonApiDataFormatTest.java | 4 +-
.../org/apache/camel/model/dataformat/jsonApi.json | 4 +-
.../camel/model/dataformat/JsonApiDataFormat.java | 72 ++++++++++---
.../model/rest/RestConfigurationDefinition.java | 114 ++++++++++++++++-----
.../dataformat/JsonApiDataFormatReifier.java | 2 +
.../java/org/apache/camel/xml/in/ModelParser.java | 16 +--
.../dsl/yaml/deserializers/ModelDeserializers.java | 17 +--
.../generated/resources/schema/camel-yaml-dsl.json | 3 +
.../generated/resources/schema/camelYamlDsl.json | 3 +
12 files changed, 268 insertions(+), 84 deletions(-)
diff --git a/components/camel-jsonapi/src/generated/java/org/apache/camel/component/jsonapi/JsonApiDataFormatConfigurer.java b/components/camel-jsonapi/src/generated/java/org/apache/camel/component/jsonapi/JsonApiDataFormatConfigurer.java
index c7fc580ce12..433ac0fd2be 100644
--- a/components/camel-jsonapi/src/generated/java/org/apache/camel/component/jsonapi/JsonApiDataFormatConfigurer.java
+++ b/components/camel-jsonapi/src/generated/java/org/apache/camel/component/jsonapi/JsonApiDataFormatConfigurer.java
@@ -19,9 +19,9 @@ public class JsonApiDataFormatConfigurer extends PropertyConfigurerSupport imple
JsonApiDataFormat dataformat = (JsonApiDataFormat) target;
switch (ignoreCase ? name.toLowerCase() : name) {
case "dataformattypes":
- case "dataFormatTypes": dataformat.setDataFormatTypes(property(camelContext, java.lang.Class[].class, value)); return true;
+ case "dataFormatTypes": dataformat.setDataFormatTypes(property(camelContext, java.lang.String.class, value)); return true;
case "mainformattype":
- case "mainFormatType": dataformat.setMainFormatType(property(camelContext, java.lang.Class.class, value)); return true;
+ case "mainFormatType": dataformat.setMainFormatType(property(camelContext, java.lang.String.class, value)); return true;
default: return false;
}
}
diff --git a/components/camel-jsonapi/src/generated/resources/org/apache/camel/component/jsonapi/jsonApi.json b/components/camel-jsonapi/src/generated/resources/org/apache/camel/component/jsonapi/jsonApi.json
index 88be1d947d7..aab5b82aea8 100644
--- a/components/camel-jsonapi/src/generated/resources/org/apache/camel/component/jsonapi/jsonApi.json
+++ b/components/camel-jsonapi/src/generated/resources/org/apache/camel/component/jsonapi/jsonApi.json
@@ -16,8 +16,8 @@
"modelJavaType": "org.apache.camel.model.dataformat.JsonApiDataFormat"
},
"properties": {
- "dataFormatTypes": { "kind": "attribute", "displayName": "Data Format Types", "required": false, "type": "string", "javaType": "java.lang.Class<java.lang.Object>[]", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account for the marshalling" },
- "mainFormatType": { "kind": "attribute", "displayName": "Main Format Type", "required": false, "type": "string", "javaType": "java.lang.Class<java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account while unmarshalling" },
+ "dataFormatTypes": { "kind": "attribute", "displayName": "Data Format Types", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account for the marshalling. Multiple classes can be separated by comma." },
+ "mainFormatType": { "kind": "attribute", "displayName": "Main Format Type", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class to take into account while unmarshalling." },
"id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
}
}
diff --git a/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java b/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
index 523239f75ef..30aba088557 100644
--- a/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
+++ b/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
@@ -18,9 +18,13 @@ package org.apache.camel.component.jsonapi;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
import com.github.jasminb.jsonapi.JSONAPIDocument;
import com.github.jasminb.jsonapi.ResourceConverter;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.DataFormatName;
@@ -31,21 +35,35 @@ import org.apache.camel.support.service.ServiceSupport;
* JSonApi data format for marshal/unmarshal
*/
@Dataformat("jsonApi")
-public class JsonApiDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
+public class JsonApiDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
- private Class<?>[] dataFormatTypes;
- private Class<?> mainFormatType;
+ private CamelContext camelContext;
+
+ private String dataFormatTypes;
+ private Class<?>[] dataFormatTypeClasses;
+ private String mainFormatType;
+ private Class<?> mainFormatTypeClass;
public JsonApiDataFormat() {
}
- public JsonApiDataFormat(Class<?>[] dataFormatTypes) {
- this.dataFormatTypes = dataFormatTypes;
+ public JsonApiDataFormat(Class<?>[] dataFormatTypesClasses) {
+ this.dataFormatTypeClasses = dataFormatTypesClasses;
}
- public JsonApiDataFormat(Class<?> mainFormatType, Class<?>[] dataFormatTypes) {
- this.mainFormatType = mainFormatType;
- this.dataFormatTypes = dataFormatTypes;
+ public JsonApiDataFormat(Class<?> mainFormatTypeClass, Class<?>[] dataFormatTypes) {
+ this.mainFormatTypeClass = mainFormatTypeClass;
+ this.dataFormatTypeClasses = dataFormatTypes;
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ @Override
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
}
@Override
@@ -55,39 +73,86 @@ public class JsonApiDataFormat extends ServiceSupport implements DataFormat, Dat
@Override
public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
- ResourceConverter converter = new ResourceConverter(dataFormatTypes);
+ ResourceConverter converter = new ResourceConverter(dataFormatTypeClasses);
byte[] objectAsBytes = converter.writeDocument(new JSONAPIDocument<>(graph));
stream.write(objectAsBytes);
}
@Override
public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
- ResourceConverter converter = new ResourceConverter(dataFormatTypes);
- JSONAPIDocument<?> jsonApiDocument = converter.readDocument(stream, mainFormatType);
+ ResourceConverter converter = new ResourceConverter(dataFormatTypeClasses);
+ JSONAPIDocument<?> jsonApiDocument = converter.readDocument(stream, mainFormatTypeClass);
return jsonApiDocument.get();
}
- @Override
- protected void doStart() throws Exception {
- // noop
+ public String getDataFormatTypes() {
+ return dataFormatTypes;
}
- @Override
- protected void doStop() throws Exception {
- // noop
+ /**
+ * The classes (FQN name) to take into account for the marshalling.
+ * Multiple class names can be separated by comma.
+ */
+ public void setDataFormatTypes(String dataFormatTypes) {
+ this.dataFormatTypes = dataFormatTypes;
+ }
+
+ public Class<?>[] getDataFormatTypeClasses() {
+ return dataFormatTypeClasses;
}
/**
- * The classes to take into account while marshalling
+ * The classes to take into account for the marshalling.
*/
- public void setDataFormatTypes(Class<?>[] dataFormatTypes) {
- this.dataFormatTypes = dataFormatTypes;
+ public void setDataFormatTypeClasses(Class<?>[] dataFormatTypeClasses) {
+ this.dataFormatTypeClasses = dataFormatTypeClasses;
+ }
+
+ public String getMainFormatType() {
+ return mainFormatType;
}
/**
- * The classes to take into account while unmarshalling
+ * The class (FQN name) to take into account while unmarshalling
*/
- public void setMainFormatType(Class<?> mainFormatType) {
+ public void setMainFormatType(String mainFormatType) {
this.mainFormatType = mainFormatType;
}
+
+ public Class<?> getMainFormatTypeClass() {
+ return mainFormatTypeClass;
+ }
+
+ /**
+ * The class to take into account while unmarshalling
+ */
+ public void setMainFormatTypeClass(Class<?> mainFormatTypeClass) {
+ this.mainFormatTypeClass = mainFormatTypeClass;
+ }
+
+ @Override
+ protected void doBuild() throws Exception {
+ if (dataFormatTypeClasses == null && dataFormatTypes != null) {
+ List<Class<?>> classes = new ArrayList<>();
+ for (String name : dataFormatTypes.split(",")) {
+ Class<?> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(name);
+ classes.add(clazz);
+ }
+ dataFormatTypeClasses = classes.toArray(new Class<?>[0]);
+ }
+ if (mainFormatTypeClass == null && mainFormatType != null) {
+ mainFormatTypeClass = getCamelContext().getClassResolver().resolveMandatoryClass(mainFormatType);
+ }
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ // noop
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ // noop
+ }
+
}
diff --git a/components/camel-jsonapi/src/test/java/org/apache/camel/component/jsonapi/JsonApiDataFormatTest.java b/components/camel-jsonapi/src/test/java/org/apache/camel/component/jsonapi/JsonApiDataFormatTest.java
index ecad0a5bf17..f24ff5f3103 100644
--- a/components/camel-jsonapi/src/test/java/org/apache/camel/component/jsonapi/JsonApiDataFormatTest.java
+++ b/components/camel-jsonapi/src/test/java/org/apache/camel/component/jsonapi/JsonApiDataFormatTest.java
@@ -92,8 +92,8 @@ public class JsonApiDataFormatTest extends CamelTestSupport {
public void testJsonApiUnmarshalWrongType() {
Class<?>[] formats = { MyBook.class, MyAuthor.class };
JsonApiDataFormat jsonApiDataFormat = new JsonApiDataFormat();
- jsonApiDataFormat.setDataFormatTypes(formats);
- jsonApiDataFormat.setMainFormatType(MyBook.class);
+ jsonApiDataFormat.setDataFormatTypeClasses(formats);
+ jsonApiDataFormat.setMainFormatTypeClass(MyBook.class);
String jsonApiInput = "{\"data\":{\"type\":\"animal\",\"id\":\"camel\",\"attributes\":{\"humps\":\"2\"}}}";
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/dataformat/jsonApi.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/dataformat/jsonApi.json
index c654b024c42..781d1dba500 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/dataformat/jsonApi.json
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/dataformat/jsonApi.json
@@ -13,8 +13,8 @@
"output": false
},
"properties": {
- "dataFormatTypes": { "kind": "attribute", "displayName": "Data Format Types", "required": false, "type": "string", "javaType": "java.lang.Class<java.lang.Object>[]", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account for the marshalling" },
- "mainFormatType": { "kind": "attribute", "displayName": "Main Format Type", "required": false, "type": "string", "javaType": "java.lang.Class<java.lang.Object>", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account while unmarshalling" },
+ "dataFormatTypes": { "kind": "attribute", "displayName": "Data Format Types", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The classes to take into account for the marshalling. Multiple classes can be separated by comma." },
+ "mainFormatType": { "kind": "attribute", "displayName": "Main Format Type", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The class to take into account while unmarshalling." },
"id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
}
}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
index 5337c692943..e5dc64c047f 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
@@ -36,9 +36,13 @@ import org.apache.camel.spi.Metadata;
public class JsonApiDataFormat extends DataFormatDefinition {
@XmlAttribute
- private Class<?>[] dataFormatTypes;
+ private String dataFormatTypes;
+ @XmlTransient
+ private Class<?>[] dataFormatTypeClasses;
@XmlAttribute
- private Class<?> mainFormatType;
+ private String mainFormatType;
+ @XmlTransient
+ private Class<?> mainFormatTypeClass;
public JsonApiDataFormat() {
super("jsonApi");
@@ -47,52 +51,96 @@ public class JsonApiDataFormat extends DataFormatDefinition {
private JsonApiDataFormat(Builder builder) {
this();
this.dataFormatTypes = builder.dataFormatTypes;
+ this.dataFormatTypeClasses = builder.dataFormatTypeClasses;
this.mainFormatType = builder.mainFormatType;
+ this.mainFormatTypeClass = builder.mainFormatTypeClass;
}
- public Class<?>[] getDataFormatTypes() {
+ public String getDataFormatTypes() {
return dataFormatTypes;
}
/**
- * The classes to take into account for the marshalling
+ * The classes to take into account for the marshalling.
+ * Multiple classes can be separated by comma.
*/
- public void setDataFormatTypes(Class<?>[] dataFormatTypes) {
+ public void setDataFormatTypes(String dataFormatTypes) {
this.dataFormatTypes = dataFormatTypes;
}
- public Class<?> getMainFormatType() {
+ public Class<?>[] getDataFormatTypeClasses() {
+ return dataFormatTypeClasses;
+ }
+
+ /**
+ * The classes to take into account for the marshalling.
+ */
+ public void setDataFormatTypeClasses(Class<?>[] dataFormatTypeClasses) {
+ this.dataFormatTypeClasses = dataFormatTypeClasses;
+ }
+
+ public String getMainFormatType() {
return mainFormatType;
}
/**
- * The classes to take into account while unmarshalling
+ * The class to take into account while unmarshalling.
*/
- public void setMainFormatType(Class<?> mainFormatType) {
+ public void setMainFormatType(String mainFormatType) {
this.mainFormatType = mainFormatType;
}
+ public Class<?> getMainFormatTypeClass() {
+ return mainFormatTypeClass;
+ }
+
+ /**
+ * The classes to take into account while unmarshalling.
+ */
+ public void setMainFormatTypeClass(Class<?> mainFormatTypeClass) {
+ this.mainFormatTypeClass = mainFormatTypeClass;
+ }
+
/**
* {@code Builder} is a specific builder for {@link JsonApiDataFormat}.
*/
@XmlTransient
public static class Builder implements DataFormatBuilder<JsonApiDataFormat> {
- private Class<?>[] dataFormatTypes;
- private Class<?> mainFormatType;
+ private String dataFormatTypes;
+ private Class<?>[] dataFormatTypeClasses;
+ private String mainFormatType;
+ private Class<?> mainFormatTypeClass;
/**
- * The classes to take into account for the marshalling
+ * The classes to take into account for the marshalling,
*/
public Builder dataFormatTypes(Class<?>[] dataFormatTypes) {
+ this.dataFormatTypeClasses = dataFormatTypes;
+ return this;
+ }
+
+ /**
+ * The classes (FQN name) to take into account for the marshalling.
+ * Multiple class names can be separated by comma.
+ */
+ public Builder dataFormatTypes(String dataFormatTypes) {
this.dataFormatTypes = dataFormatTypes;
return this;
}
/**
- * The classes to take into account while unmarshalling
+ * The classes to take into account while unmarshalling,
*/
public Builder mainFormatType(Class<?> mainFormatType) {
+ this.mainFormatTypeClass = mainFormatType;
+ return this;
+ }
+
+ /**
+ * The class (FQN name) to take into account while unmarshalling,
+ */
+ public Builder mainFormatType(String mainFormatType) {
this.mainFormatType = mainFormatType;
return this;
}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
index 519c48c828e..58478f61aee 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
@@ -59,8 +59,8 @@ public class RestConfigurationDefinition {
@Metadata(label = "consumer,advanced")
private String apiHost;
@XmlAttribute
- @Metadata(label = "consumer,advanced", defaultValue = "true")
- private Boolean useXForwardHeaders;
+ @Metadata(label = "consumer,advanced", javaType = "java.lang.Boolean", defaultValue = "true")
+ private String useXForwardHeaders;
@XmlAttribute
@Metadata(label = "producer,advanced")
private String producerApiDoc;
@@ -75,7 +75,7 @@ public class RestConfigurationDefinition {
private String apiContextRouteId;
@XmlAttribute
@Metadata(label = "consumer,advanced", javaType = "java.lang.Boolean", defaultValue = "false")
- private Boolean apiVendorExtension;
+ private String apiVendorExtension;
@XmlAttribute
@Metadata(label = "consumer,advanced", defaultValue = "allLocalIp")
private RestHostNameResolver hostNameResolver;
@@ -84,16 +84,16 @@ public class RestConfigurationDefinition {
private RestBindingMode bindingMode;
@XmlAttribute
@Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue = "false")
- private Boolean skipBindingOnErrorCode;
+ private String skipBindingOnErrorCode;
@XmlAttribute
@Metadata(label = "consumer,advanced", javaType = "java.lang.Boolean", defaultValue = "false")
- private Boolean clientRequestValidation;
+ private String clientRequestValidation;
@XmlAttribute
@Metadata(label = "consumer,advanced", javaType = "java.lang.Boolean", defaultValue = "false")
- private Boolean enableCORS;
+ private String enableCORS;
@XmlAttribute
@Metadata(label = "consumer", javaType = "java.lang.Boolean", defaultValue = "false")
- private Boolean inlineRoutes;
+ private String inlineRoutes;
@XmlAttribute
@Metadata(label = "advanced")
private String jsonDataFormat;
@@ -272,7 +272,7 @@ public class RestConfigurationDefinition {
this.apiContextRouteId = apiContextRouteId;
}
- public Boolean getApiVendorExtension() {
+ public String getApiVendorExtension() {
return apiVendorExtension;
}
@@ -281,7 +281,7 @@ public class RestConfigurationDefinition {
* as vendor extension (eg keys starting with x-) such as route ids, class names etc. Not all 3rd party API gateways
* and tools supports vendor-extensions when importing your API docs.
*/
- public void setApiVendorExtension(Boolean apiVendorExtension) {
+ public void setApiVendorExtension(String apiVendorExtension) {
this.apiVendorExtension = apiVendorExtension;
}
@@ -310,7 +310,7 @@ public class RestConfigurationDefinition {
this.bindingMode = bindingMode;
}
- public Boolean getSkipBindingOnErrorCode() {
+ public String getSkipBindingOnErrorCode() {
return skipBindingOnErrorCode;
}
@@ -318,11 +318,11 @@ public class RestConfigurationDefinition {
* Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error
* messages that do not bind to json / xml etc, as success messages otherwise will do.
*/
- public void setSkipBindingOnErrorCode(Boolean skipBindingOnErrorCode) {
+ public void setSkipBindingOnErrorCode(String skipBindingOnErrorCode) {
this.skipBindingOnErrorCode = skipBindingOnErrorCode;
}
- public Boolean getClientRequestValidation() {
+ public String getClientRequestValidation() {
return clientRequestValidation;
}
@@ -334,11 +334,11 @@ public class RestConfigurationDefinition {
* (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the
* message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.
*/
- public void setClientRequestValidation(Boolean clientRequestValidation) {
+ public void setClientRequestValidation(String clientRequestValidation) {
this.clientRequestValidation = clientRequestValidation;
}
- public Boolean getEnableCORS() {
+ public String getEnableCORS() {
return enableCORS;
}
@@ -347,11 +347,11 @@ public class RestConfigurationDefinition {
* <p/>
* The default value is false.
*/
- public void setEnableCORS(Boolean enableCORS) {
+ public void setEnableCORS(String enableCORS) {
this.enableCORS = enableCORS;
}
- public Boolean getInlineRoutes() {
+ public String getInlineRoutes() {
return inlineRoutes;
}
@@ -364,7 +364,7 @@ public class RestConfigurationDefinition {
*
* This option is default <tt>false</tt>.
*/
- public void setInlineRoutes(Boolean inlineRoutes) {
+ public void setInlineRoutes(String inlineRoutes) {
this.inlineRoutes = inlineRoutes;
}
@@ -469,7 +469,7 @@ public class RestConfigurationDefinition {
this.corsHeaders = corsHeaders;
}
- public Boolean getUseXForwardHeaders() {
+ public String getUseXForwardHeaders() {
return useXForwardHeaders;
}
@@ -478,7 +478,7 @@ public class RestConfigurationDefinition {
* <p/>
* The default value is true.
*/
- public void setUseXForwardHeaders(Boolean useXForwardHeaders) {
+ public void setUseXForwardHeaders(String useXForwardHeaders) {
this.useXForwardHeaders = useXForwardHeaders;
}
@@ -590,6 +590,16 @@ public class RestConfigurationDefinition {
* support vendor extensions and this option can then be turned off.
*/
public RestConfigurationDefinition apiVendorExtension(boolean vendorExtension) {
+ setApiVendorExtension(vendorExtension ? "true" : "false");
+ return this;
+ }
+
+ /**
+ * Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information
+ * as vendor extension (eg keys starting with x-) such as route ids, class names etc. Some API tooling may not
+ * support vendor extensions and this option can then be turned off.
+ */
+ public RestConfigurationDefinition apiVendorExtension(String vendorExtension) {
setApiVendorExtension(vendorExtension);
return this;
}
@@ -633,6 +643,14 @@ public class RestConfigurationDefinition {
* To specify whether to skip binding output if there is a custom HTTP error code
*/
public RestConfigurationDefinition skipBindingOnErrorCode(boolean skipBindingOnErrorCode) {
+ setSkipBindingOnErrorCode(skipBindingOnErrorCode ? "true" : "false");
+ return this;
+ }
+
+ /**
+ * To specify whether to skip binding output if there is a custom HTTP error code
+ */
+ public RestConfigurationDefinition skipBindingOnErrorCode(String skipBindingOnErrorCode) {
setSkipBindingOnErrorCode(skipBindingOnErrorCode);
return this;
}
@@ -646,6 +664,19 @@ public class RestConfigurationDefinition {
* message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.
*/
public RestConfigurationDefinition clientRequestValidation(boolean clientRequestValidation) {
+ setClientRequestValidation(clientRequestValidation ? "true" : "false");
+ return this;
+ }
+
+ /**
+ * Whether to enable validation of the client request to check:
+ *
+ * 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept
+ * header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data
+ * (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the
+ * message body (JSon, XML or Auto binding mode must be enabled); returns HTTP Status 400 if validation error.
+ */
+ public RestConfigurationDefinition clientRequestValidation(String clientRequestValidation) {
setClientRequestValidation(clientRequestValidation);
return this;
}
@@ -655,6 +686,15 @@ public class RestConfigurationDefinition {
* response.
*/
public RestConfigurationDefinition enableCORS(boolean enableCORS) {
+ setEnableCORS(enableCORS ? "true" : "false");
+ return this;
+ }
+
+ /**
+ * To specify whether to enable CORS which means Camel will automatic include CORS in the HTTP headers in the
+ * response.
+ */
+ public RestConfigurationDefinition enableCORS(String enableCORS) {
setEnableCORS(enableCORS);
return this;
}
@@ -668,11 +708,25 @@ public class RestConfigurationDefinition {
*
* This option is default <tt>false</tt>.
*/
- public RestConfigurationDefinition inlineRoutes(boolean inlineRoutes) {
+ public RestConfigurationDefinition inlineRoutes(String inlineRoutes) {
setInlineRoutes(inlineRoutes);
return this;
}
+ /**
+ * Inline routes in rest-dsl which are linked using direct endpoints.
+ *
+ * By default, each service in Rest DSL is an individual route, meaning that you would have at least two routes per
+ * service (rest-dsl, and the route linked from rest-dsl). Enabling this allows Camel to optimize and inline this as
+ * a single route, however this requires to use direct endpoints, which must be unique per service.
+ *
+ * This option is default <tt>false</tt>.
+ */
+ public RestConfigurationDefinition inlineRoutes(boolean inlineRoutes) {
+ setInlineRoutes(inlineRoutes ? "true" : "false");
+ return this;
+ }
+
/**
* To use a specific json data format
* <p/>
@@ -786,6 +840,14 @@ public class RestConfigurationDefinition {
* To specify whether to use X-Forward headers for Host and related setting
*/
public RestConfigurationDefinition useXForwardHeaders(boolean useXForwardHeaders) {
+ setUseXForwardHeaders(useXForwardHeaders ? "true" : "false");
+ return this;
+ }
+
+ /**
+ * To specify whether to use X-Forward headers for Host and related setting
+ */
+ public RestConfigurationDefinition useXForwardHeaders(String useXForwardHeaders) {
setUseXForwardHeaders(useXForwardHeaders);
return this;
}
@@ -818,7 +880,7 @@ public class RestConfigurationDefinition {
target.setHost(CamelContextHelper.parseText(context, host));
}
if (useXForwardHeaders != null) {
- target.setUseXForwardHeaders(useXForwardHeaders);
+ target.setUseXForwardHeaders(CamelContextHelper.parseBoolean(context, useXForwardHeaders));
}
if (apiHost != null) {
target.setApiHost(CamelContextHelper.parseText(context, apiHost));
@@ -836,7 +898,7 @@ public class RestConfigurationDefinition {
target.setApiContextRouteId(CamelContextHelper.parseText(context, apiContextRouteId));
}
if (apiVendorExtension != null) {
- target.setApiVendorExtension(apiVendorExtension);
+ target.setApiVendorExtension(CamelContextHelper.parseBoolean(context, apiVendorExtension));
}
if (contextPath != null) {
target.setContextPath(CamelContextHelper.parseText(context, contextPath));
@@ -848,16 +910,16 @@ public class RestConfigurationDefinition {
target.setBindingMode(bindingMode.name());
}
if (skipBindingOnErrorCode != null) {
- target.setSkipBindingOnErrorCode(skipBindingOnErrorCode);
+ target.setSkipBindingOnErrorCode(CamelContextHelper.parseBoolean(context, skipBindingOnErrorCode));
}
if (clientRequestValidation != null) {
- target.setClientRequestValidation(clientRequestValidation);
+ target.setClientRequestValidation(CamelContextHelper.parseBoolean(context, clientRequestValidation));
}
if (enableCORS != null) {
- target.setEnableCORS(enableCORS);
+ target.setEnableCORS(CamelContextHelper.parseBoolean(context, enableCORS));
}
if (inlineRoutes != null) {
- target.setInlineRoutes(inlineRoutes);
+ target.setInlineRoutes(CamelContextHelper.parseBoolean(context, inlineRoutes));
}
if (jsonDataFormat != null) {
target.setJsonDataFormat(jsonDataFormat);
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonApiDataFormatReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonApiDataFormatReifier.java
index 038ae59dc61..067f4ec52bb 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonApiDataFormatReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonApiDataFormatReifier.java
@@ -31,6 +31,8 @@ public class JsonApiDataFormatReifier extends DataFormatReifier<JsonApiDataForma
@Override
protected void prepareDataFormatConfig(Map<String, Object> properties) {
properties.put("mainFormatType", definition.getMainFormatType());
+ properties.put("mainFormatTypeClass", definition.getMainFormatTypeClass());
properties.put("dataFormatTypes", definition.getDataFormatTypes());
+ properties.put("dataFormatTypesClasses", definition.getDataFormatTypeClasses());
}
}
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index 90234c24a23..e99487f71a3 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -2190,8 +2190,8 @@ public class ModelParser extends BaseParser {
protected JsonApiDataFormat doParseJsonApiDataFormat() throws IOException, XmlPullParserException {
return doParse(new JsonApiDataFormat(), (def, key, val) -> {
switch (key) {
- case "dataFormatTypes": def.setDataFormatTypes(asClassArray(val)); break;
- case "mainFormatType": def.setMainFormatType(asClass(val)); break;
+ case "dataFormatTypes": def.setDataFormatTypes(val); break;
+ case "mainFormatType": def.setMainFormatType(val); break;
default: return identifiedTypeAttributeHandler().accept(def, key, val);
}
return true;
@@ -3094,22 +3094,22 @@ public class ModelParser extends BaseParser {
case "apiContextPath": def.setApiContextPath(val); break;
case "apiContextRouteId": def.setApiContextRouteId(val); break;
case "apiHost": def.setApiHost(val); break;
- case "apiVendorExtension": def.setApiVendorExtension(Boolean.valueOf(val)); break;
+ case "apiVendorExtension": def.setApiVendorExtension(val); break;
case "bindingMode": def.setBindingMode(RestBindingMode.valueOf(val)); break;
- case "clientRequestValidation": def.setClientRequestValidation(Boolean.valueOf(val)); break;
+ case "clientRequestValidation": def.setClientRequestValidation(val); break;
case "component": def.setComponent(val); break;
case "contextPath": def.setContextPath(val); break;
- case "enableCORS": def.setEnableCORS(Boolean.valueOf(val)); break;
+ case "enableCORS": def.setEnableCORS(val); break;
case "host": def.setHost(val); break;
case "hostNameResolver": def.setHostNameResolver(RestHostNameResolver.valueOf(val)); break;
- case "inlineRoutes": def.setInlineRoutes(Boolean.valueOf(val)); break;
+ case "inlineRoutes": def.setInlineRoutes(val); break;
case "jsonDataFormat": def.setJsonDataFormat(val); break;
case "port": def.setPort(val); break;
case "producerApiDoc": def.setProducerApiDoc(val); break;
case "producerComponent": def.setProducerComponent(val); break;
case "scheme": def.setScheme(val); break;
- case "skipBindingOnErrorCode": def.setSkipBindingOnErrorCode(Boolean.valueOf(val)); break;
- case "useXForwardHeaders": def.setUseXForwardHeaders(Boolean.valueOf(val)); break;
+ case "skipBindingOnErrorCode": def.setSkipBindingOnErrorCode(val); break;
+ case "useXForwardHeaders": def.setUseXForwardHeaders(val); break;
case "xmlDataFormat": def.setXmlDataFormat(val); break;
default: return false;
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 2f3d50a7c7e..db14344a92a 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -7333,6 +7333,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
types = org.apache.camel.model.dataformat.JsonApiDataFormat.class,
order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
properties = {
+ @YamlProperty(name = "data-format-types", type = "string"),
@YamlProperty(name = "id", type = "string"),
@YamlProperty(name = "main-format-type", type = "string")
}
@@ -7352,7 +7353,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
String propertyName, Node node) {
switch(propertyKey) {
case "data-format-types": {
- java.lang.Class<?>[] val = asClassArray(node);
+ String val = asText(node);
target.setDataFormatTypes(val);
break;
}
@@ -7362,7 +7363,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
break;
}
case "main-format-type": {
- java.lang.Class<?> val = asClass(node);
+ String val = asText(node);
target.setMainFormatType(val);
break;
}
@@ -12529,7 +12530,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
}
case "api-vendor-extension": {
String val = asText(node);
- target.setApiVendorExtension(java.lang.Boolean.valueOf(val));
+ target.setApiVendorExtension(val);
break;
}
case "binding-mode": {
@@ -12538,7 +12539,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
}
case "client-request-validation": {
String val = asText(node);
- target.setClientRequestValidation(java.lang.Boolean.valueOf(val));
+ target.setClientRequestValidation(val);
break;
}
case "component": {
@@ -12573,7 +12574,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
}
case "enable-cors": {
String val = asText(node);
- target.setEnableCORS(java.lang.Boolean.valueOf(val));
+ target.setEnableCORS(val);
break;
}
case "endpoint-property": {
@@ -12592,7 +12593,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
}
case "inline-routes": {
String val = asText(node);
- target.setInlineRoutes(java.lang.Boolean.valueOf(val));
+ target.setInlineRoutes(val);
break;
}
case "json-data-format": {
@@ -12622,12 +12623,12 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
}
case "skip-binding-on-error-code": {
String val = asText(node);
- target.setSkipBindingOnErrorCode(java.lang.Boolean.valueOf(val));
+ target.setSkipBindingOnErrorCode(val);
break;
}
case "use-x-forward-headers": {
String val = asText(node);
- target.setUseXForwardHeaders(java.lang.Boolean.valueOf(val));
+ target.setUseXForwardHeaders(val);
break;
}
case "xml-data-format": {
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
index e06f02e4c2f..9d1a4716c9b 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
@@ -5212,6 +5212,9 @@
"org.apache.camel.model.dataformat.JsonApiDataFormat" : {
"type" : "object",
"properties" : {
+ "data-format-types" : {
+ "type" : "string"
+ },
"id" : {
"type" : "string"
},
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 7d8fe91ef75..466d0c44902 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -5116,6 +5116,9 @@
"org.apache.camel.model.dataformat.JsonApiDataFormat" : {
"type" : "object",
"properties" : {
+ "dataFormatTypes" : {
+ "type" : "string"
+ },
"id" : {
"type" : "string"
},