You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/04/04 16:48:18 UTC

[camel] 03/06: CAMEL-17792: Add doc about the message headers of camel-rest

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

nfilotto pushed a commit to branch CAMEL-17792/doc-message-headers
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e121c3e7ada6b26d22c7de6f1a7ef3b06d01133e
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Mon Apr 4 17:20:15 2022 +0200

    CAMEL-17792: Add doc about the message headers of camel-rest
---
 .../org/apache/camel/component/rest/rest.json      |  8 ++++
 .../camel-rest/src/main/docs/rest-component.adoc   |  4 +-
 .../apache/camel/component/rest/RestConstants.java | 44 ++++++++++++++++++++++
 .../apache/camel/component/rest/RestEndpoint.java  |  2 +-
 .../apache/camel/component/rest/RestProducer.java  | 15 ++++----
 .../rest/RestProducerBindingProcessor.java         |  8 ++--
 6 files changed, 67 insertions(+), 14 deletions(-)

diff --git a/components/camel-rest/src/generated/resources/org/apache/camel/component/rest/rest.json b/components/camel-rest/src/generated/resources/org/apache/camel/component/rest/rest.json
index 2ae80f02515..251211a32db 100644
--- a/components/camel-rest/src/generated/resources/org/apache/camel/component/rest/rest.json
+++ b/components/camel-rest/src/generated/resources/org/apache/camel/component/rest/rest.json
@@ -32,6 +32,14 @@
     "producerComponentName": { "kind": "property", "displayName": "Producer Component Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel Rest component to use for (producer) the REST transport, such as http, undertow. If no component has been explicit configured, then Camel will lookup if there is a Camel component that integrates with the [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
   },
+  "headers": {
+    "CamelRestHttpQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query parameters for the rest call to be used" },
+    "CamelRestHttpUri": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http uri for the rest call to be used" },
+    "CamelHttpMethod": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The method should be in upper case" },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The media type such as: 'text\/xml', or 'application\/json' this REST service returns." },
+    "Accept": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The media type such as: 'text\/xml', or 'application\/json' this REST service accepts." },
+    "CamelHttpResponseCode": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http response code" }
+  },
   "properties": {
     "method": { "kind": "path", "displayName": "Method", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "get", "post", "put", "delete", "patch", "head", "trace", "connect", "options" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "HTTP method to use." },
     "path": { "kind": "path", "displayName": "Path", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The base path" },
diff --git a/components/camel-rest/src/main/docs/rest-component.adoc b/components/camel-rest/src/main/docs/rest-component.adoc
index 46496df0afd..d6b9568e3e9 100644
--- a/components/camel-rest/src/main/docs/rest-component.adoc
+++ b/components/camel-rest/src/main/docs/rest-component.adoc
@@ -38,7 +38,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Supported rest components
 
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestConstants.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestConstants.java
new file mode 100644
index 00000000000..1e3973a19ca
--- /dev/null
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestConstants.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.rest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
+public final class RestConstants {
+
+    @Metadata(label = "producer", description = "The query parameters for the rest call to be used", javaType = "String")
+    public static final String REST_HTTP_QUERY = Exchange.REST_HTTP_QUERY;
+    @Metadata(label = "producer", description = "The http uri for the rest call to be used", javaType = "String")
+    public static final String REST_HTTP_URI = Exchange.REST_HTTP_URI;
+    @Metadata(label = "producer", description = "The method should be in upper case", javaType = "String")
+    public static final String HTTP_METHOD = Exchange.HTTP_METHOD;
+    @Metadata(label = "producer",
+              description = "The media type such as: 'text/xml', or 'application/json' this REST service returns.",
+              javaType = "String")
+    public static final String CONTENT_TYPE = Exchange.CONTENT_TYPE;
+    @Metadata(label = "producer",
+              description = "The media type such as: 'text/xml', or 'application/json' this REST service accepts.",
+              javaType = "String")
+    public static final String ACCEPT = "Accept";
+    @Metadata(label = "producer", description = "The http response code", javaType = "Integer")
+    public static final String HTTP_RESPONSE_CODE = Exchange.HTTP_RESPONSE_CODE;
+
+    private RestConstants() {
+
+    }
+}
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
index e81cec871c7..5672a9a9730 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
@@ -50,7 +50,7 @@ import static org.apache.camel.support.RestProducerFactoryHelper.setupComponent;
  * Expose REST services or call external REST services.
  */
 @UriEndpoint(firstVersion = "2.14.0", scheme = "rest", title = "REST", syntax = "rest:method:path:uriTemplate",
-             category = { Category.CORE, Category.REST }, lenientProperties = true)
+             category = { Category.CORE, Category.REST }, lenientProperties = true, headersClass = RestConstants.class)
 public class RestEndpoint extends DefaultEndpoint {
 
     public static final String[] DEFAULT_REST_CONSUMER_COMPONENTS
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
index 7d701bf7ead..2835ff49a64 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
@@ -52,7 +52,6 @@ import static org.apache.camel.util.ObjectHelper.isNotEmpty;
  */
 public class RestProducer extends DefaultAsyncProducer {
 
-    private static final String ACCEPT = "Accept";
     private final CamelContext camelContext;
     private final RestConfiguration configuration;
     private boolean prepareUriTemplate = true;
@@ -177,7 +176,7 @@ public class RestProducer extends DefaultAsyncProducer {
 
         if (query != null) {
             // the query parameters for the rest call to be used
-            inMessage.setHeader(Exchange.REST_HTTP_QUERY, query);
+            inMessage.setHeader(RestConstants.REST_HTTP_QUERY, query);
         }
 
         if (hasPath) {
@@ -194,7 +193,7 @@ public class RestProducer extends DefaultAsyncProducer {
                 overrideUri += "/" + resolvedUriTemplate;
             }
             // the http uri for the rest call to be used
-            inMessage.setHeader(Exchange.REST_HTTP_URI, overrideUri);
+            inMessage.setHeader(RestConstants.REST_HTTP_URI, overrideUri);
 
             // when chaining RestConsumer with RestProducer, the
             // HTTP_PATH header will be present, we remove it here
@@ -209,17 +208,17 @@ public class RestProducer extends DefaultAsyncProducer {
         if (method != null) {
             // the method should be in upper case
             String upper = method.toUpperCase(Locale.US);
-            inMessage.setHeader(Exchange.HTTP_METHOD, upper);
+            inMessage.setHeader(RestConstants.HTTP_METHOD, upper);
         }
 
         final String produces = getEndpoint().getProduces();
-        if (isEmpty(inMessage.getHeader(Exchange.CONTENT_TYPE)) && isNotEmpty(produces)) {
-            inMessage.setHeader(Exchange.CONTENT_TYPE, produces);
+        if (isEmpty(inMessage.getHeader(RestConstants.CONTENT_TYPE)) && isNotEmpty(produces)) {
+            inMessage.setHeader(RestConstants.CONTENT_TYPE, produces);
         }
 
         final String consumes = getEndpoint().getConsumes();
-        if (isEmpty(inMessage.getHeader(ACCEPT)) && isNotEmpty(consumes)) {
-            inMessage.setHeader(ACCEPT, consumes);
+        if (isEmpty(inMessage.getHeader(RestConstants.ACCEPT)) && isNotEmpty(consumes)) {
+            inMessage.setHeader(RestConstants.ACCEPT, consumes);
         }
     }
 
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducerBindingProcessor.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducerBindingProcessor.java
index 2fc4bdb4d6d..32db587dea3 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducerBindingProcessor.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducerBindingProcessor.java
@@ -270,7 +270,7 @@ public class RestProducerBindingProcessor extends DelegateAsyncProcessor {
             }
 
             if (skipBindingOnErrorCode) {
-                Integer code = exchange.getMessage().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
+                Integer code = exchange.getMessage().getHeader(RestConstants.HTTP_RESPONSE_CODE, Integer.class);
                 // if there is a custom http error code then skip binding
                 if (code != null && code >= 300) {
                     return;
@@ -327,7 +327,7 @@ public class RestProducerBindingProcessor extends DelegateAsyncProcessor {
                 return;
             }
 
-            contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
+            contentType = exchange.getIn().getHeader(RestConstants.CONTENT_TYPE, String.class);
             // need to lower-case so the contains check below can match if using upper case
             contentType = contentType.toLowerCase(Locale.US);
             try {
@@ -367,13 +367,13 @@ public class RestProducerBindingProcessor extends DelegateAsyncProcessor {
                 // make sure there is a content-type with json
                 String type = ExchangeHelper.getContentType(exchange);
                 if (type == null) {
-                    exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
+                    exchange.getIn().setHeader(RestConstants.CONTENT_TYPE, "application/json");
                 }
             } else if (isXml) {
                 // make sure there is a content-type with xml
                 String type = ExchangeHelper.getContentType(exchange);
                 if (type == null) {
-                    exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/xml");
+                    exchange.getIn().setHeader(RestConstants.CONTENT_TYPE, "application/xml");
                 }
             }
         }