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/10/31 11:58:28 UTC

[camel] branch master updated: [CAMEL-14113] camel-elasticsearch-rest: NullPointer exception if there is no body in exchange (#3300)

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


The following commit(s) were added to refs/heads/master by this push:
     new 9bff1b6  [CAMEL-14113] camel-elasticsearch-rest: NullPointer exception if there is no body in exchange (#3300)
9bff1b6 is described below

commit 9bff1b6ed57441804b594c5e61a13987c276f271
Author: JiriOndrusek <jo...@redhat.com>
AuthorDate: Thu Oct 31 12:58:20 2019 +0100

    [CAMEL-14113] camel-elasticsearch-rest: NullPointer exception if there is no body in exchange (#3300)
---
 .../elasticsearch/ElasticsearchProducer.java       | 27 ++++++++++++++++++++++
 .../ElasticsearchActionRequestConverter.java       | 16 ++++++-------
 2 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
index 66fc65b..31889d8 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
@@ -149,24 +149,45 @@ public class ElasticsearchProducer extends DefaultProducer {
 
         if (operation == ElasticsearchOperation.Index) {
             IndexRequest indexRequest = message.getBody(IndexRequest.class);
+            if (indexRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only Map, String, byte[], XContentBuilder or IndexRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT).getId());
         } else if (operation == ElasticsearchOperation.Update) {
             UpdateRequest updateRequest = message.getBody(UpdateRequest.class);
+            if (updateRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only Map, String, byte[], XContentBuilder or UpdateRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT).getId());
         } else if (operation == ElasticsearchOperation.GetById) {
             GetRequest getRequest = message.getBody(GetRequest.class);
+            if (getRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only String or GetRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.get(getRequest, RequestOptions.DEFAULT));
         } else if (operation == ElasticsearchOperation.Bulk) {
             BulkRequest bulkRequest = message.getBody(BulkRequest.class);
+            if (bulkRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only List, Collection or BulkRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT).getItems());
         } else if (operation == ElasticsearchOperation.BulkIndex) {
             BulkRequest bulkRequest = message.getBody(BulkRequest.class);
+            if (bulkRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only List, Collection or BulkRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT).getItems());
         } else if (operation == ElasticsearchOperation.Delete) {
             DeleteRequest deleteRequest = message.getBody(DeleteRequest.class);
+            if (deleteRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only String or DeleteRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT).getResult());
         } else if (operation == ElasticsearchOperation.DeleteIndex) {
             DeleteIndexRequest deleteIndexRequest = message.getBody(DeleteIndexRequest.class);
+            if (deleteIndexRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only String or DeleteIndexRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT).isAcknowledged());
         } else if (operation == ElasticsearchOperation.Exists) {
             // ExistsRequest API is deprecated, using SearchRequest instead with size=0 and terminate_after=1
@@ -188,6 +209,9 @@ public class ElasticsearchProducer extends DefaultProducer {
             }
         } else if (operation == ElasticsearchOperation.Search) {
             SearchRequest searchRequest = message.getBody(SearchRequest.class);
+            if (searchRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only Map, String or SearchRequest is allowed as a type");
+            }
             // is it a scroll request ?
             boolean useScroll = message.getHeader(PARAM_SCROLL, configuration.isUseScroll(), Boolean.class);
             if (useScroll) {
@@ -199,6 +223,9 @@ public class ElasticsearchProducer extends DefaultProducer {
             }
         } else if (operation == ElasticsearchOperation.MultiSearch) {
             MultiSearchRequest searchRequest = message.getBody(MultiSearchRequest.class);
+            if (searchRequest == null) {
+                throw new IllegalArgumentException("Wrong body type. Only MultiSearchRequest is allowed as a type");
+            }
             message.setBody(restHighLevelClient.msearch(searchRequest, RequestOptions.DEFAULT).getResponses());
         } else if (operation == ElasticsearchOperation.Ping) {
             message.setBody(restHighLevelClient.ping(RequestOptions.DEFAULT));
diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
index 630b6a1..ab024a7 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
@@ -111,8 +111,11 @@ public final class ElasticsearchActionRequestConverter {
         if (document instanceof GetRequest) {
             return (GetRequest)document;
         }
-        return new GetRequest(exchange.getIn().getHeader(ElasticsearchConstants.PARAM_INDEX_NAME, String.class))
-            .id((String)document);
+        if (document instanceof String) {
+            return new GetRequest(exchange.getIn().getHeader(ElasticsearchConstants.PARAM_INDEX_NAME, String.class))
+                    .id((String) document);
+        }
+        return null;
     }
 
     @Converter
@@ -123,9 +126,8 @@ public final class ElasticsearchActionRequestConverter {
         if (document instanceof String) {
             return new DeleteRequest().index(exchange.getIn().getHeader(ElasticsearchConstants.PARAM_INDEX_NAME, String.class))
                 .id((String)document);
-        } else {
-            throw new IllegalArgumentException("Wrong body type. Only DeleteRequest or String is allowed as a type");
         }
+        return null;
     }
 
     @Converter
@@ -136,9 +138,8 @@ public final class ElasticsearchActionRequestConverter {
         if (document instanceof String) {
             String index = exchange.getIn().getHeader(ElasticsearchConstants.PARAM_INDEX_NAME, String.class);
             return new DeleteIndexRequest(index);
-        } else {
-            throw new IllegalArgumentException("Wrong body type. Only DeleteIndexRequest or String is allowed as a type");
         }
+        return null;
     }
 
     @Converter
@@ -202,9 +203,8 @@ public final class ElasticsearchActionRequestConverter {
                 request.add(createIndexRequest(document, exchange));
             }
             return request;
-        } else {
-            throw new IllegalArgumentException("Wrong body type. Only BulkRequest or List is allowed as a type");
         }
+        return null;
     }
 
 }