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 2019/06/12 09:33:03 UTC

[camel] 01/03: CAMEL-13634: Camel main - Allow to configure rest dsl configuration

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

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

commit f2672e5d1728cef1f81bbcdeb35bc85957cdbf3c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 12 10:40:46 2019 +0200

    CAMEL-13634: Camel main - Allow to configure rest dsl configuration
---
 .../camel/main/MainConfigurationProperties.java    |  22 +-
 .../java/org/apache/camel/main/MainSupport.java    |  20 +-
 .../camel/main/RestConfigurationProperties.java    | 596 +++++++++++++++++++++
 3 files changed, 633 insertions(+), 5 deletions(-)

diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java
index eb1d255..ba00f22 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java
@@ -30,6 +30,24 @@ public class MainConfigurationProperties extends DefaultConfigurationProperties<
 
     // extended configuration
     private final HystrixConfigurationProperties hystrixConfigurationProperties = new HystrixConfigurationProperties(this);
+    private final RestConfigurationProperties restConfigurationProperties = new RestConfigurationProperties(this);
+
+    // extended
+    // --------------------------------------------------------------
+
+    /**
+     * To configure Hystrix EIP
+     */
+    public HystrixConfigurationProperties hystrix() {
+        return hystrixConfigurationProperties;
+    }
+
+    /**
+     * To configure Rest DSL
+     */
+    public RestConfigurationProperties rest() {
+        return restConfigurationProperties;
+    }
 
     // getter and setters
     // --------------------------------------------------------------
@@ -201,8 +219,4 @@ public class MainConfigurationProperties extends DefaultConfigurationProperties<
         return this;
     }
 
-    public HystrixConfigurationProperties hystrix() {
-        return hystrixConfigurationProperties;
-    }
-
 }
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
index d8e1e8a..459a95a 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
@@ -41,11 +41,13 @@ import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
+import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.support.LifecycleStrategySupport;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.service.ServiceHelper;
@@ -795,10 +797,11 @@ public abstract class MainSupport extends ServiceSupport {
         // lookup and configure SPI beans
         DefaultConfigurationConfigurer.afterPropertiesSet(camelContext);
 
-        // now configure context with additional properties
+        // now configure context/hystrix/rest with additional properties
         Properties prop = camelContext.getPropertiesComponent().loadProperties();
         Map<String, Object> properties = new LinkedHashMap<>();
         Map<String, Object> hystrixProperties = new LinkedHashMap<>();
+        Map<String, Object> restProperties = new LinkedHashMap<>();
         for (String key : prop.stringPropertyNames()) {
             if (key.startsWith("camel.context.")) {
                 // grab the value
@@ -810,6 +813,11 @@ public abstract class MainSupport extends ServiceSupport {
                 String value = prop.getProperty(key);
                 String option = key.substring(14);
                 hystrixProperties.put(option, value);
+            } else if (key.startsWith("camel.rest.")) {
+                // grab the value
+                String value = prop.getProperty(key);
+                String option = key.substring(11);
+                restProperties.put(option, value);
             }
         }
         if (!properties.isEmpty()) {
@@ -826,6 +834,16 @@ public abstract class MainSupport extends ServiceSupport {
             }
             setCamelProperties(camelContext, hystrix, hystrixProperties, true);
         }
+        if (!restProperties.isEmpty()) {
+            LOG.info("Auto configuring Rest DSL from loaded properties: {}", restProperties.size());
+            ModelCamelContext model = camelContext.adapt(ModelCamelContext.class);
+            RestConfiguration rest = model.getRestConfiguration();
+            if (rest == null) {
+                rest = new RestConfiguration();
+                model.setRestConfiguration(rest);
+            }
+            setCamelProperties(camelContext, rest, restProperties, true);
+        }
     }
 
     protected void autoConfigurationPropertiesComponent(CamelContext camelContext) throws Exception {
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/RestConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/RestConfigurationProperties.java
new file mode 100644
index 0000000..6e1237a
--- /dev/null
+++ b/core/camel-main/src/main/java/org/apache/camel/main/RestConfigurationProperties.java
@@ -0,0 +1,596 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.main;
+
+import org.apache.camel.support.PatternHelper;
+
+/**
+ * Global configuration for Rest DSL.
+ */
+public class RestConfigurationProperties {
+
+    private final MainConfigurationProperties parent;
+
+    private String component;
+    private String apiComponent;
+    private String producerComponent;
+    private String scheme;
+    private String host;
+    private String apiHost;
+    private Boolean useXForwardHeaders;
+    private String port;
+    private String producerApiDoc;
+    private String contextPath;
+    private String apiContextPath;
+    private String apiContextRouteId;
+    private String apiContextIdPattern;
+    private Boolean apiContextListing;
+    private Boolean apiVendorExtension;
+    private String hostNameResolver;
+    private String bindingMode;
+    private Boolean skipBindingOnErrorCode;
+    private Boolean clientRequestValidation;
+    private Boolean enableCORS;
+    private String jsonDataFormat;
+    private String xmlDataFormat;
+
+    // TODO: Do these later
+//    private List<RestPropertyDefinition> componentProperties = new ArrayList<>();
+//    private List<RestPropertyDefinition> endpointProperties = new ArrayList<>();
+//    private List<RestPropertyDefinition> consumerProperties = new ArrayList<>();
+//    private List<RestPropertyDefinition> dataFormatProperties = new ArrayList<>();
+//    private List<RestPropertyDefinition> apiProperties = new ArrayList<>();
+//    private List<RestPropertyDefinition> corsHeaders = new ArrayList<>();
+
+    public RestConfigurationProperties(MainConfigurationProperties parent) {
+        this.parent = parent;
+    }
+
+    public MainConfigurationProperties end() {
+        return parent;
+    }
+
+    // getter and setters
+    // --------------------------------------------------------------
+
+    public String getComponent() {
+        return component;
+    }
+
+    /**
+     * The Camel Rest component to use for the REST transport (consumer), such as restlet, spark-rest.
+     * If no component has been explicit configured, then Camel will lookup if there is a Camel component
+     * that integrates with the Rest DSL, or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry.
+     * If either one is found, then that is being used.
+     */
+    public void setComponent(String component) {
+        this.component = component;
+    }
+
+    public String getApiComponent() {
+        return apiComponent;
+    }
+
+    /**
+     * The name of the Camel component to use as the REST API (such as swagger)
+     */
+    public void setApiComponent(String apiComponent) {
+        this.apiComponent = apiComponent;
+    }
+
+    public String getProducerComponent() {
+        return producerComponent;
+    }
+
+    /**
+     * Sets the name of the Camel component to use as the REST producer
+     */
+    public void setProducerComponent(String producerComponent) {
+        this.producerComponent = producerComponent;
+    }
+
+    public String getScheme() {
+        return scheme;
+    }
+
+    /**
+     * The scheme to use for exposing the REST service. Usually http or https is supported.
+     * <p/>
+     * The default value is http
+     */
+    public void setScheme(String scheme) {
+        this.scheme = scheme;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    /**
+     * The hostname to use for exposing the REST service.
+     */
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getApiHost() {
+        return apiHost;
+    }
+
+    /**
+     * To use an specific hostname for the API documentation (eg swagger)
+     * <p/>
+     * This can be used to override the generated host with this configured hostname
+     */
+    public void setApiHost(String apiHost) {
+        this.apiHost = apiHost;
+    }
+
+    public Boolean getUseXForwardHeaders() {
+        return useXForwardHeaders;
+    }
+
+    /**
+     * Whether to use X-Forward headers for Host and related setting.
+     * <p/>
+     * The default value is true.
+     */
+    public void setUseXForwardHeaders(Boolean useXForwardHeaders) {
+        this.useXForwardHeaders = useXForwardHeaders;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    /**
+     * The port number to use for exposing the REST service.
+     * Notice if you use servlet component then the port number configured here does not apply,
+     * as the port number in use is the actual port number the servlet component is using.
+     * eg if using Apache Tomcat its the tomcat http port, if using Apache Karaf its the HTTP service in Karaf
+     * that uses port 8181 by default etc. Though in those situations setting the port number here,
+     * allows tooling and JMX to know the port number, so its recommended to set the port number
+     * to the number that the servlet engine uses.
+     */
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getProducerApiDoc() {
+        return producerApiDoc;
+    }
+
+    /**
+     * Sets the location of the api document (swagger api) the REST producer will use
+     * to validate the REST uri and query parameters are valid accordingly to the api document.
+     * This requires adding camel-swagger-java to the classpath, and any miss configuration
+     * will let Camel fail on startup and report the error(s).
+     * <p/>
+     * The location of the api document is loaded from classpath by default, but you can use
+     * <tt>file:</tt> or <tt>http:</tt> to refer to resources to load from file or http url.
+     */
+    public void setProducerApiDoc(String producerApiDoc) {
+        this.producerApiDoc = producerApiDoc;
+    }
+
+    public String getContextPath() {
+        return contextPath;
+    }
+
+    /**
+     * Sets a leading context-path the REST services will be using.
+     * <p/>
+     * This can be used when using components such as <tt>camel-servlet</tt> where the deployed web application
+     * is deployed using a context-path. Or for components such as <tt>camel-jetty</tt> or <tt>camel-netty4-http</tt>
+     * that includes a HTTP server.
+     */
+    public void setContextPath(String contextPath) {
+        this.contextPath = contextPath;
+    }
+
+    public String getApiContextPath() {
+        return apiContextPath;
+    }
+
+    /**
+     * Sets a leading API context-path the REST API services will be using.
+     * <p/>
+     * This can be used when using components such as <tt>camel-servlet</tt> where the deployed web application
+     * is deployed using a context-path.
+     */
+    public void setApiContextPath(String apiContextPath) {
+        this.apiContextPath = apiContextPath;
+    }
+
+    public String getApiContextRouteId() {
+        return apiContextRouteId;
+    }
+
+    /**
+     * Sets the route id to use for the route that services the REST API.
+     * <p/>
+     * The route will by default use an auto assigned route id.
+     */
+    public void setApiContextRouteId(String apiContextRouteId) {
+        this.apiContextRouteId = apiContextRouteId;
+    }
+
+    public String getApiContextIdPattern() {
+        return apiContextIdPattern;
+    }
+
+    /**
+     * Sets an CamelContext id pattern to only allow Rest APIs from rest services within CamelContext's which name matches the pattern.
+     * <p/>
+     * The pattern <tt>#name#</tt> refers to the CamelContext name, to match on the current CamelContext only.
+     * For any other value, the pattern uses the rules from {@link PatternHelper#matchPattern(String, String)}
+     */
+    public void setApiContextIdPattern(String apiContextIdPattern) {
+        this.apiContextIdPattern = apiContextIdPattern;
+    }
+
+    public Boolean getApiContextListing() {
+        return apiContextListing;
+    }
+
+    /**
+     * Sets whether listing of all available CamelContext's with REST services in the JVM is enabled. If enabled it allows to discover
+     * these contexts, if <tt>false</tt> then only the current CamelContext is in use.
+     */
+    public void setApiContextListing(Boolean apiContextListing) {
+        this.apiContextListing = apiContextListing;
+    }
+
+    public Boolean getApiVendorExtension() {
+        return apiVendorExtension;
+    }
+
+    /**
+     * 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.
+     * Not all 3rd party API gateways and tools supports vendor-extensions when importing your API docs.
+     */
+    public void setApiVendorExtension(Boolean apiVendorExtension) {
+        this.apiVendorExtension = apiVendorExtension;
+    }
+
+    public String getHostNameResolver() {
+        return hostNameResolver;
+    }
+
+    /**
+     * If no hostname has been explicit configured, then this resolver is used to compute the hostname the REST service will be using.
+     * The possible values are: allLocalIp, localIp, localHostName
+     */
+    public void setHostNameResolver(String hostNameResolver) {
+        this.hostNameResolver = hostNameResolver;
+    }
+
+    public String getBindingMode() {
+        return bindingMode;
+    }
+
+    /**
+     * Sets the binding mode to use.
+     * <p/>
+     * The possible values are: auto, off, json, xml, json_xml
+     * The default value is off
+     */
+    public void setBindingMode(String bindingMode) {
+        this.bindingMode = bindingMode;
+    }
+
+    public Boolean getSkipBindingOnErrorCode() {
+        return skipBindingOnErrorCode;
+    }
+
+    /**
+     * 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) {
+        this.skipBindingOnErrorCode = skipBindingOnErrorCode;
+    }
+
+    public Boolean getClientRequestValidation() {
+        return clientRequestValidation;
+    }
+
+    /**
+     * Whether to enable validation of the client request to check whether the Content-Type and Accept headers from
+     * the client is supported by the Rest-DSL configuration of its consumes/produces settings.
+     * <p/>
+     * This can be turned on, to enable this check. In case of validation error, then HTTP Status codes 415 or 406 is returned.
+     * <p/>
+     * The default value is false.
+     */
+    public void setClientRequestValidation(Boolean clientRequestValidation) {
+        this.clientRequestValidation = clientRequestValidation;
+    }
+
+    public Boolean getEnableCORS() {
+        return enableCORS;
+    }
+
+    /**
+     * Whether to enable CORS headers in the HTTP response.
+     * <p/>
+     * The default value is false.
+     */
+    public void setEnableCORS(Boolean enableCORS) {
+        this.enableCORS = enableCORS;
+    }
+
+    public String getJsonDataFormat() {
+        return jsonDataFormat;
+    }
+
+    /**
+     * Name of specific json data format to use.
+     * By default json-jackson will be used.
+     * Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.
+     */
+    public void setJsonDataFormat(String jsonDataFormat) {
+        this.jsonDataFormat = jsonDataFormat;
+    }
+
+    public String getXmlDataFormat() {
+        return xmlDataFormat;
+    }
+
+    /**
+     * Name of specific XML data format to use.
+     * By default jaxb will be used.
+     * Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.
+     */
+    public void setXmlDataFormat(String xmlDataFormat) {
+        this.xmlDataFormat = xmlDataFormat;
+    }
+
+
+    // fluent builders
+    // --------------------------------------------------------------
+
+    /**
+     * The Camel Rest component to use for the REST transport (consumer), such as restlet, spark-rest.
+     * If no component has been explicit configured, then Camel will lookup if there is a Camel component
+     * that integrates with the Rest DSL, or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry.
+     * If either one is found, then that is being used.
+     */
+    public RestConfigurationProperties withComponent(String component) {
+        this.component = component;
+        return this;
+    }
+
+    /**
+     * The name of the Camel component to use as the REST API (such as swagger)
+     */
+    public RestConfigurationProperties withApiComponent(String apiComponent) {
+        this.apiComponent = apiComponent;
+        return this;
+    }
+
+    /**
+     * Sets the name of the Camel component to use as the REST producer
+     */
+    public RestConfigurationProperties withProducerComponent(String producerComponent) {
+        this.producerComponent = producerComponent;
+        return this;
+    }
+
+    /**
+     * The scheme to use for exposing the REST service. Usually http or https is supported.
+     * <p/>
+     * The default value is http
+     */
+    public RestConfigurationProperties withScheme(String scheme) {
+        this.scheme = scheme;
+        return this;
+    }
+
+    /**
+     * The hostname to use for exposing the REST service.
+     */
+    public RestConfigurationProperties withHost(String host) {
+        this.host = host;
+        return this;
+    }
+
+    /**
+     * To use an specific hostname for the API documentation (eg swagger)
+     * <p/>
+     * This can be used to override the generated host with this configured hostname
+     */
+    public RestConfigurationProperties withApiHost(String apiHost) {
+        this.apiHost = apiHost;
+        return this;
+    }
+
+    /**
+     * Whether to use X-Forward headers for Host and related setting.
+     * <p/>
+     * The default value is true.
+     */
+    public RestConfigurationProperties withUseXForwardHeaders(Boolean useXForwardHeaders) {
+        this.useXForwardHeaders = useXForwardHeaders;
+        return this;
+    }
+
+    /**
+     * The port number to use for exposing the REST service.
+     * Notice if you use servlet component then the port number configured here does not apply,
+     * as the port number in use is the actual port number the servlet component is using.
+     * eg if using Apache Tomcat its the tomcat http port, if using Apache Karaf its the HTTP service in Karaf
+     * that uses port 8181 by default etc. Though in those situations setting the port number here,
+     * allows tooling and JMX to know the port number, so its recommended to set the port number
+     * to the number that the servlet engine uses.
+     */
+    public RestConfigurationProperties withPort(String port) {
+        this.port = port;
+        return this;
+    }
+
+    /**
+     * Sets the location of the api document (swagger api) the REST producer will use
+     * to validate the REST uri and query parameters are valid accordingly to the api document.
+     * This requires adding camel-swagger-java to the classpath, and any miss configuration
+     * will let Camel fail on startup and report the error(s).
+     * <p/>
+     * The location of the api document is loaded from classpath by default, but you can use
+     * <tt>file:</tt> or <tt>http:</tt> to refer to resources to load from file or http url.
+     */
+    public RestConfigurationProperties withProducerApiDoc(String producerApiDoc) {
+        this.producerApiDoc = producerApiDoc;
+        return this;
+    }
+
+    /**
+     * Sets a leading context-path the REST services will be using.
+     * <p/>
+     * This can be used when using components such as <tt>camel-servlet</tt> where the deployed web application
+     * is deployed using a context-path. Or for components such as <tt>camel-jetty</tt> or <tt>camel-netty4-http</tt>
+     * that includes a HTTP server.
+     */
+    public RestConfigurationProperties withContextPath(String contextPath) {
+        this.contextPath = contextPath;
+        return this;
+    }
+
+    /**
+     * Sets a leading API context-path the REST API services will be using.
+     * <p/>
+     * This can be used when using components such as <tt>camel-servlet</tt> where the deployed web application
+     * is deployed using a context-path.
+     */
+    public RestConfigurationProperties withApiContextPath(String apiContextPath) {
+        this.apiContextPath = apiContextPath;
+        return this;
+    }
+
+    /**
+     * Sets the route id to use for the route that services the REST API.
+     * <p/>
+     * The route will by default use an auto assigned route id.
+     */
+    public RestConfigurationProperties withApiContextRouteId(String apiContextRouteId) {
+        this.apiContextRouteId = apiContextRouteId;
+        return this;
+    }
+
+    /**
+     * Sets an CamelContext id pattern to only allow Rest APIs from rest services within CamelContext's which name matches the pattern.
+     * <p/>
+     * The pattern <tt>#name#</tt> refers to the CamelContext name, to match on the current CamelContext only.
+     * For any other value, the pattern uses the rules from {@link PatternHelper#matchPattern(String, String)}
+     */
+    public RestConfigurationProperties withApiContextIdPattern(String apiContextIdPattern) {
+        this.apiContextIdPattern = apiContextIdPattern;
+        return this;
+    }
+
+    /**
+     * Sets whether listing of all available CamelContext's with REST services in the JVM is enabled. If enabled it allows to discover
+     * these contexts, if <tt>false</tt> then only the current CamelContext is in use.
+     */
+    public RestConfigurationProperties withApiContextListing(Boolean apiContextListing) {
+        this.apiContextListing = apiContextListing;
+        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.
+     * Not all 3rd party API gateways and tools supports vendor-extensions when importing your API docs.
+     */
+    public RestConfigurationProperties withApiVendorExtension(Boolean apiVendorExtension) {
+        this.apiVendorExtension = apiVendorExtension;
+        return this;
+    }
+
+    /**
+     * If no hostname has been explicit configured, then this resolver is used to compute the hostname the REST service will be using.
+     * The possible values are: allLocalIp, localIp, localHostName
+     */
+    public RestConfigurationProperties withHostNameResolver(String hostNameResolver) {
+        this.hostNameResolver = hostNameResolver;
+        return this;
+    }
+
+    /**
+     * Sets the binding mode to use.
+     * <p/>
+     * The possible values are: auto, off, json, xml, json_xml
+     * The default value is off
+     */
+    public RestConfigurationProperties withBindingMode(String bindingMode) {
+        this.bindingMode = bindingMode;
+        return this;
+    }
+
+    /**
+     * 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 RestConfigurationProperties withSkipBindingOnErrorCode(Boolean skipBindingOnErrorCode) {
+        this.skipBindingOnErrorCode = skipBindingOnErrorCode;
+        return this;
+    }
+
+    /**
+     * Whether to enable validation of the client request to check whether the Content-Type and Accept headers from
+     * the client is supported by the Rest-DSL configuration of its consumes/produces settings.
+     * <p/>
+     * This can be turned on, to enable this check. In case of validation error, then HTTP Status codes 415 or 406 is returned.
+     * <p/>
+     * The default value is false.
+     */
+    public RestConfigurationProperties withClientRequestValidation(Boolean clientRequestValidation) {
+        this.clientRequestValidation = clientRequestValidation;
+        return this;
+    }
+
+    /**
+     * Whether to enable CORS headers in the HTTP response.
+     * <p/>
+     * The default value is false.
+     */
+    public RestConfigurationProperties withEnableCORS(Boolean enableCORS) {
+        this.enableCORS = enableCORS;
+        return this;
+    }
+
+    /**
+     * Name of specific json data format to use.
+     * By default json-jackson will be used.
+     * Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.
+     */
+    public RestConfigurationProperties withJsonDataFormat(String jsonDataFormat) {
+        this.jsonDataFormat = jsonDataFormat;
+        return this;
+    }
+
+    /**
+     * Name of specific XML data format to use.
+     * By default jaxb will be used.
+     * Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance.
+     */
+    public RestConfigurationProperties withXmlDataFormat(String xmlDataFormat) {
+        this.xmlDataFormat = xmlDataFormat;
+        return this;
+    }
+
+}