Repository: camel
Updated Branches:
  refs/heads/master 0902c25e0 -> f432a9323


CAMEL-10488: ServiceNow : add an option to configure teh API version


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f432a932
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f432a932
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f432a932

Branch: refs/heads/master
Commit: f432a9323e57fa0ffb25c93bb3924ab20ac9c642
Parents: 0902c25
Author: lburgazzoli <lburgazz...@gmail.com>
Authored: Wed Nov 16 17:00:32 2016 +0100
Committer: lburgazzoli <lburgazz...@gmail.com>
Committed: Wed Nov 16 17:00:32 2016 +0100

----------------------------------------------------------------------
 .../ServiceNowComponentConfiguration.java       | 12 +++++++
 .../src/main/docs/servicenow-component.adoc     |  7 ++++-
 .../servicenow/AbstractServiceNowProcessor.java | 16 ++++++++++
 .../component/servicenow/ServiceNowClient.java  |  5 ++-
 .../servicenow/ServiceNowConfiguration.java     | 13 ++++++++
 .../servicenow/ServiceNowConstants.java         |  1 +
 .../fuji/FujiServiceNowAggregateProcessor.java  |  5 ++-
 .../fuji/FujiServiceNowImportSetProcessor.java  | 12 ++++---
 .../releases/fuji/FujiServiceNowProcessor.java  | 14 ++++++---
 .../fuji/FujiServiceNowTableProcessor.java      | 28 ++++++++++-------
 .../HelsinkiServiceNowAggregateProcessor.java   |  4 ++-
 .../HelsinkiServiceNowAttachmentProcessor.java  | 22 +++++++++----
 .../HelsinkiServiceNowImportSetProcessor.java   | 11 ++++---
 .../HelsinkiServiceNowMiscProcessor.java        |  3 ++
 .../HelsinkiServiceNowScorecardProcessor.java   |  2 ++
 ...iServiceNowServiceCatalogCartsProcessor.java | 12 +++++++
 ...iceNowServiceCatalogCategoriesProcessor.java |  4 ++-
 ...iServiceNowServiceCatalogItemsProcessor.java | 21 ++++++++++---
 ...lsinkiServiceNowServiceCatalogProcessor.java |  9 ++++--
 .../HelsinkiServiceNowTableProcessor.java       | 31 ++++++++++++------
 .../component/servicenow/ServiceNowTest.java    | 33 ++++++++++++++++++++
 21 files changed, 212 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components-starter/camel-servicenow-starter/src/main/java/org/apache/camel/component/servicenow/springboot/ServiceNowComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components-starter/camel-servicenow-starter/src/main/java/org/apache/camel/component/servicenow/springboot/ServiceNowComponentConfiguration.java
 
b/components-starter/camel-servicenow-starter/src/main/java/org/apache/camel/component/servicenow/springboot/ServiceNowComponentConfiguration.java
index c9f7b2a..1a41297 100644
--- 
a/components-starter/camel-servicenow-starter/src/main/java/org/apache/camel/component/servicenow/springboot/ServiceNowComponentConfiguration.java
+++ 
b/components-starter/camel-servicenow-starter/src/main/java/org/apache/camel/component/servicenow/springboot/ServiceNowComponentConfiguration.java
@@ -129,6 +129,10 @@ public class ServiceNowComponentConfiguration {
          */
         private String apiUrl;
         /**
+         * The ServiceNow REST API version, default latest
+         */
+        private String apiVersion;
+        /**
          * ServiceNow account password, MUST be provided
          */
         private String password;
@@ -286,6 +290,14 @@ public class ServiceNowComponentConfiguration {
             this.apiUrl = apiUrl;
         }
 
+        public String getApiVersion() {
+            return apiVersion;
+        }
+
+        public void setApiVersion(String apiVersion) {
+            this.apiVersion = apiVersion;
+        }
+
         public String getPassword() {
             return password;
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/docs/servicenow-component.adoc
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/docs/servicenow-component.adoc 
b/components/camel-servicenow/src/main/docs/servicenow-component.adoc
index 5ef7483..f87d24e6 100644
--- a/components/camel-servicenow/src/main/docs/servicenow-component.adoc
+++ b/components/camel-servicenow/src/main/docs/servicenow-component.adoc
@@ -57,7 +57,7 @@ The ServiceNow component supports 7 options which are listed 
below.
 
 
 // endpoint options: START
-The ServiceNow component supports 32 endpoint options which are listed below:
+The ServiceNow component supports 33 endpoint options which are listed below:
 
 {% raw %}
 [width="100%",cols="2,1,1m,1m,5",options="header"]
@@ -87,6 +87,7 @@ The ServiceNow component supports 32 endpoint options which 
are listed below:
 | table | producer |  | String | The default table can be overridden by header 
CamelServiceNowTable
 | target | producer |  | Boolean | Set this parameter to true to return only 
scorecards that have a target.
 | topLevelOnly | producer |  | Boolean | Gets only those categories whose 
parent is a catalog.
+| apiVersion | advanced |  | String | The ServiceNow REST API version default 
latest
 | mapper | advanced |  | ObjectMapper | Sets Jackson's ObjectMapper to use for 
request/reply
 | synchronous | advanced | false | boolean | Sets whether synchronous 
processing should be strictly used or Camel is allowed to use asynchronous 
processing (if supported).
 | apiUrl | security |  | String | The ServiceNow REST API url
@@ -112,6 +113,8 @@ Headers
 |CamelServiceNowAction |String | - | - | The action to perform
 |CamelServiceNowActionSubject | - | - | String |The subject to which the 
action should be applied
 |CamelServiceNowModel |Class | - | - | The data model
+|CamelServiceNowRequestModel |Class | - | - | The request data model
+|CamelServiceNowResponseModel |Class | - | - | The response data model
 |CamelServiceNowOffsetNext | - | - | - | -
 |CamelServiceNowOffsetPrev | - | - | - | -
 |CamelServiceNowOffsetFirst | - | - | - | -
@@ -170,6 +173,8 @@ Headers
 |CamelServiceNowBreakdownRelation | String | sysparm_breakdown_relation | - | -
 |CamelServiceNowDataSource | String | sysparm_data_source | - | -
 |CamelServiceNowTopLevelOnly | Boolean | sysparm_top_level_only | topLevelOnly 
| -
+|CamelServiceNowApiVersion | String | - | - | The REST API version
+|CamelServiceNowResponseMeta | Map | - | - | Meta data provided along with a 
response
 |===
 
 [[ServiceNow-Fuji]]

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
index 351eaec..cff5435 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
@@ -239,6 +239,10 @@ public abstract class AbstractServiceNowProcessor 
implements Processor {
         return null;
     }
 
+    // *********************************
+    // Helpers
+    // *********************************
+
     protected Object getRequestParamFromHeader(ServiceNowParam sysParam, 
Message message) {
         return message.getHeader(
             sysParam.getHeader(),
@@ -291,6 +295,18 @@ public abstract class AbstractServiceNowProcessor 
implements Processor {
             : ObjectHelper.isEmpty(modelName) ? Map.class : 
config.getResponseModel(modelName, Map.class);
     }
 
+    protected String getApiVersion(Message message) {
+        return message.getHeader(ServiceNowConstants.API_VERSION, 
config.getApiVersion(), String.class);
+    }
+
+    protected String getTableName(Message message) {
+        return 
message.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), 
config.getTable(), String.class);
+    }
+
+    protected String getSysID(Message message) {
+        return message.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), 
String.class);
+    }
+
     // 
*************************************************************************
     // Use ClassValue to lazy create and cache JavaType
     // 
*************************************************************************

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
index b5f4136..d754568 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
@@ -59,7 +59,10 @@ public class ServiceNowClient {
     }
 
     public ServiceNowClient path(Object path) {
-        client.path(path);
+        if (path != null) {
+            client.path(path);
+        }
+
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConfiguration.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConfiguration.java
index c82735b..db8a8be 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConfiguration.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConfiguration.java
@@ -51,6 +51,8 @@ public class ServiceNowConfiguration implements Cloneable {
     private String oauthTokenUrl;
     @UriParam(label = "security")
     private String apiUrl;
+    @UriParam(label = "advanced")
+    private String apiVersion;
     @UriParam
     private String resource;
     @UriParam
@@ -120,6 +122,17 @@ public class ServiceNowConfiguration implements Cloneable {
         return apiUrl != null;
     }
 
+    public String getApiVersion() {
+        return apiVersion;
+    }
+
+    /**
+     * The ServiceNow REST API version, default latest
+     */
+    public void setApiVersion(String apiVersion) {
+        this.apiVersion = apiVersion;
+    }
+
     /**
      * ServiceNow user account name, MUST be provided
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
index b5f2b3a..13eb9cf 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
@@ -33,6 +33,7 @@ public final class ServiceNowConstants {
     public static final String CONTENT_ENCODING = 
"CamelServiceNowContentEncoding";
     public static final String CONTENT_META = "CamelServiceNowContentMeta";
     public static final String RESPONSE_META = "CamelServiceNowResponseMeta";
+    public static final String API_VERSION = "CamelServiceNowApiVersion";
 
     public static final String ATTACHMENT_META_HEADER = 
"X-Attachment-Metadata";
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowAggregateProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowAggregateProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowAggregateProcessor.java
index 52966a4..0b4f32a 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowAggregateProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowAggregateProcessor.java
@@ -35,7 +35,7 @@ class FujiServiceNowAggregateProcessor extends 
FujiServiceNowProcessor {
     }
 
     @Override
-    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String action, String tableName, String sysId) throws 
Exception {
+    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String action, String apiVersion, String tableName, 
String sysId) throws Exception {
         Response response;
         if (ObjectHelper.equal(ServiceNowConstants.ACTION_RETRIEVE, action, 
true)) {
             response = retrieveStats(exchange.getIn(), tableName);
@@ -47,9 +47,12 @@ class FujiServiceNowAggregateProcessor extends 
FujiServiceNowProcessor {
     }
 
     private Response retrieveStats(Message in, String tableName) throws 
Exception {
+        final String apiVersion = getApiVersion(in);
+
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("stats")
             .path(tableName)
             .query(ServiceNowParams.SYSPARM_QUERY, in)

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowImportSetProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowImportSetProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowImportSetProcessor.java
index 36fad6e..2f09d3e 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowImportSetProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowImportSetProcessor.java
@@ -34,12 +34,12 @@ class FujiServiceNowImportSetProcessor extends 
FujiServiceNowProcessor {
     }
 
     @Override
-    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String action, String tableName, String sysId) throws 
Exception {
+    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String action, String apiVersion, String tableName, 
String sysId) throws Exception {
         Response response;
         if (ObjectHelper.equal(ServiceNowConstants.ACTION_RETRIEVE, action, 
true)) {
-            response = retrieveRecord(exchange.getIn(), tableName, sysId);
+            response = retrieveRecord(exchange.getIn(), apiVersion, tableName, 
sysId);
         } else if (ObjectHelper.equal(ServiceNowConstants.ACTION_CREATE, 
action, true)) {
-            response = createRecord(exchange.getIn(), requestModel, 
responseModel, tableName);
+            response = createRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName);
         } else {
             throw new IllegalArgumentException("Unknown action " + action);
         }
@@ -51,10 +51,11 @@ class FujiServiceNowImportSetProcessor extends 
FujiServiceNowProcessor {
      * GET
      * https://instance.service-now.com/api/now/import/{tableName}/{sys_id}
      */
-    private Response retrieveRecord(Message in, String tableName, String 
sysId) throws Exception {
+    private Response retrieveRecord(Message in, String apiVersion, String 
tableName, String sysId) throws Exception {
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("import")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -65,11 +66,12 @@ class FujiServiceNowImportSetProcessor extends 
FujiServiceNowProcessor {
      * POST
      * https://instance.service-now.com/api/now/import/{tableName}
      */
-    private Response createRecord(Message in, Class<?> requestModel, Class<?> 
responseModell, String tableName) throws Exception {
+    private Response createRecord(Message in, Class<?> requestModel, Class<?> 
responseModell, String apiVersion, String tableName) throws Exception {
         validateBody(in, requestModel);
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("import")
             .path(tableName)
             .invoke(HttpMethod.POST, in.getMandatoryBody());

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProcessor.java
index 17d0960..52b81bb 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProcessor.java
@@ -22,7 +22,6 @@ import org.apache.camel.Message;
 import org.apache.camel.component.servicenow.AbstractServiceNowProcessor;
 import org.apache.camel.component.servicenow.ServiceNowConstants;
 import org.apache.camel.component.servicenow.ServiceNowEndpoint;
-import org.apache.camel.component.servicenow.ServiceNowParams;
 import org.apache.camel.util.ObjectHelper;
 
 public abstract class FujiServiceNowProcessor extends 
AbstractServiceNowProcessor {
@@ -33,24 +32,29 @@ public abstract class FujiServiceNowProcessor extends 
AbstractServiceNowProcesso
     @Override
     public void process(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
         final Class<?> requestModel = getRequestModel(in, tableName);
         final Class<?> responseModel = getResponseModel(in, tableName);
+        final String apiVersion = getApiVersion(in);
         final String action = in.getHeader(ServiceNowConstants.ACTION, 
String.class);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         doProcess(
             exchange,
             ObjectHelper.notNull(requestModel, "requestModel"),
             ObjectHelper.notNull(responseModel, "responseModel"),
+            apiVersion,
             ObjectHelper.notNull(action, "action"),
-            ObjectHelper.notNull(tableName, "tableName"), sysId);
+            ObjectHelper.notNull(tableName, "tableName"),
+            sysId);
     }
 
     protected abstract void doProcess(
         Exchange exchange,
         Class<?> requestModel,
-        Class<?> responseModel, String action,
+        Class<?> responseModel,
+        String apiVersion,
+        String action,
         String tableName,
         String sysId) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowTableProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowTableProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowTableProcessor.java
index c6f305e..7fb7c2a 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowTableProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowTableProcessor.java
@@ -34,18 +34,18 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
     }
 
     @Override
-    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String action, String tableName, String sysId) throws 
Exception {
+    protected void doProcess(Exchange exchange, Class<?> requestModel, 
Class<?> responseModel, String apiVersion, String action, String tableName, 
String sysId) throws Exception {
         Response response;
         if (ObjectHelper.equal(ServiceNowConstants.ACTION_RETRIEVE, action, 
true)) {
-            response = retrieveRecord(exchange.getIn(), requestModel, 
responseModel, tableName, sysId);
+            response = retrieveRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName, sysId);
         } else if (ObjectHelper.equal(ServiceNowConstants.ACTION_CREATE, 
action, true)) {
-            response = createRecord(exchange.getIn(), requestModel, 
responseModel, tableName);
+            response = createRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName);
         } else if (ObjectHelper.equal(ServiceNowConstants.ACTION_MODIFY, 
action, true)) {
-            response = modifyRecord(exchange.getIn(), requestModel, 
responseModel, tableName, sysId);
+            response = modifyRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName, sysId);
         } else if (ObjectHelper.equal(ServiceNowConstants.ACTION_DELETE, 
action, true)) {
-            response = deleteRecord(exchange.getIn(), requestModel, 
responseModel, tableName, sysId);
+            response = deleteRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName, sysId);
         } else if (ObjectHelper.equal(ServiceNowConstants.ACTION_UPDATE, 
action, true)) {
-            response = updateRecord(exchange.getIn(), requestModel, 
responseModel, tableName, sysId);
+            response = updateRecord(exchange.getIn(), requestModel, 
responseModel, apiVersion, tableName, sysId);
         } else {
             throw new IllegalArgumentException("Unknown action " + action);
         }
@@ -58,11 +58,12 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
      * https://instance.service-now.com/api/now/table/{tableName}
      * https://instance.service-now.com/api/now/table/{tableName}/{sys_id}
      */
-    private Response retrieveRecord(Message in, Class<?> requestModel, 
Class<?> responseModel, String tableName, String sysId) throws Exception {
+    private Response retrieveRecord(Message in, Class<?> requestModel, 
Class<?> responseModel, String apiVersion, String tableName, String sysId) 
throws Exception {
         return ObjectHelper.isEmpty(sysId)
             ? client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("now")
+                .path(apiVersion)
                 .path("table")
                 .path(tableName)
                 .query(ServiceNowParams.SYSPARM_QUERY, in)
@@ -75,6 +76,7 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
             : client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("now")
+                .path(apiVersion)
                 .path("table")
                 .path(tableName)
                 .path(sysId)
@@ -89,11 +91,12 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
      * POST
      * https://instance.service-now.com/api/now/table/{tableName}
      */
-    private Response createRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String tableName) throws Exception {
+    private Response createRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String apiVersion, String tableName) throws Exception {
         validateBody(in, requestModel);
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .query(ServiceNowParams.SYSPARM_DISPLAY_VALUE, in)
@@ -109,11 +112,12 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
      * PUT
      * https://instance.service-now.com/api/now/table/{tableName}/{sys_id}
      */
-    private Response modifyRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String tableName, String sysId) throws Exception {
+    private Response modifyRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String apiVersion, String tableName, String sysId) throws 
Exception {
         validateBody(in, requestModel);
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -130,10 +134,11 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
      * DELETE
      * https://instance.service-now.com/api/now/table/{tableName}/{sys_id}
      */
-    private Response deleteRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String tableName, String sysId) throws Exception {
+    private Response deleteRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String apiVersion, String tableName, String sysId) throws 
Exception {
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -144,11 +149,12 @@ class FujiServiceNowTableProcessor extends 
FujiServiceNowProcessor {
      * PATCH
      * http://instance.service-now.com/api/now/table/{tableName}/{sys_id}
      */
-    private Response updateRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String tableName, String sysId) throws Exception {
+    private Response updateRecord(Message in, Class<?> requestModel, Class<?> 
responseModel, String apiVersion, String tableName, String sysId) throws 
Exception {
         validateBody(in, requestModel);
         return client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAggregateProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAggregateProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAggregateProcessor.java
index 924d1d8..0cba535 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAggregateProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAggregateProcessor.java
@@ -48,12 +48,14 @@ class HelsinkiServiceNowAggregateProcessor extends 
AbstractServiceNowProcessor {
      */
     private void retrieveStats(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion  =getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("stats")
             .path(tableName)
             .query(ServiceNowParams.SYSPARM_QUERY, in)

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
index 1f70777..db1e451 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
@@ -58,14 +58,16 @@ public class HelsinkiServiceNowAttachmentProcessor extends 
AbstractServiceNowPro
      */
     private void retrieveMeta(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion =getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         Response response = ObjectHelper.isEmpty(sysId)
             ? client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("now")
+                .path(apiVersion)
                 .path("attachment")
                 .query(ServiceNowParams.SYSPARM_QUERY, in)
                 .query(ServiceNowParams.SYSPARM_LIMIT, in)
@@ -74,6 +76,8 @@ public class HelsinkiServiceNowAttachmentProcessor extends 
AbstractServiceNowPro
                 .invoke(HttpMethod.GET)
             : client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
+                .path("now")
+                .path(apiVersion)
                 .path("attachment")
                 .path(ObjectHelper.notNull(sysId, "sysId"))
                 .invoke(HttpMethod.GET);
@@ -92,12 +96,14 @@ public class HelsinkiServiceNowAttachmentProcessor extends 
AbstractServiceNowPro
      */
     private void retrieveContent(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String apiVersion = getApiVersion(in);
+        final String sysId = getSysID(in);
 
         Response response = client.reset()
             .type(MediaType.APPLICATION_JSON_TYPE)
             .accept("*/*")
             .path("now")
+            .path(apiVersion)
             .path("attachment")
             .path(ObjectHelper.notNull(sysId, "sysId"))
             .path("file")
@@ -120,7 +126,8 @@ public class HelsinkiServiceNowAttachmentProcessor extends 
AbstractServiceNowPro
      */
     private void uploadContent(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
 
         Response response = client.reset()
@@ -129,6 +136,7 @@ public class HelsinkiServiceNowAttachmentProcessor extends 
AbstractServiceNowPro
                 ServiceNowConstants.CONTENT_TYPE))
             .accept(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("attachment")
             .path("file")
             .query(ServiceNowParams.PARAM_FILE_NAME, in)
@@ -151,13 +159,15 @@ public class HelsinkiServiceNowAttachmentProcessor 
extends AbstractServiceNowPro
      */
     private void deleteContent(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("attachment")
             .path(ObjectHelper.notNull(sysId, "sysId"))
             .invoke(HttpMethod.DELETE);

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowImportSetProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowImportSetProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowImportSetProcessor.java
index 8cde09d..61dcf92 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowImportSetProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowImportSetProcessor.java
@@ -24,7 +24,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.servicenow.AbstractServiceNowProcessor;
 import org.apache.camel.component.servicenow.ServiceNowEndpoint;
-import org.apache.camel.component.servicenow.ServiceNowParams;
 import org.apache.camel.util.ObjectHelper;
 
 import static 
org.apache.camel.component.servicenow.ServiceNowConstants.ACTION_CREATE;
@@ -45,13 +44,15 @@ class HelsinkiServiceNowImportSetProcessor extends 
AbstractServiceNowProcessor {
      */
     private void retrieveRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("import")
             .path(ObjectHelper.notNull(tableName, "tableName"))
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -66,7 +67,8 @@ class HelsinkiServiceNowImportSetProcessor extends 
AbstractServiceNowProcessor {
      */
     private void createRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> requestModel = getRequestModel(in, tableName);
         final Class<?> responseModel = getResponseModel(in, tableName);
 
@@ -74,6 +76,7 @@ class HelsinkiServiceNowImportSetProcessor extends 
AbstractServiceNowProcessor {
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("import")
             .path(tableName)
             .invoke(HttpMethod.POST, in.getMandatoryBody());

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowMiscProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowMiscProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowMiscProcessor.java
index f3b9585..5947532 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowMiscProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowMiscProcessor.java
@@ -53,6 +53,7 @@ class HelsinkiServiceNowMiscProcessor extends 
AbstractServiceNowProcessor {
     private void retrieveUserRoleInheritance(Exchange exchange) throws 
Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion = getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
@@ -76,10 +77,12 @@ class HelsinkiServiceNowMiscProcessor extends 
AbstractServiceNowProcessor {
     private void uploadIdentifyReconcile(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion = getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("identifyreconcile")
             .query(ServiceNowParams.SYSPARM_DATA_SOURCE, in)
             .invoke(HttpMethod.POST, in.getMandatoryBody());

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowScorecardProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowScorecardProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowScorecardProcessor.java
index 5b959dd..cae4cd0 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowScorecardProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowScorecardProcessor.java
@@ -50,10 +50,12 @@ class HelsinkiServiceNowScorecardProcessor extends 
AbstractServiceNowProcessor {
     private void retrievePerformanceAnalytics(Exchange exchange) throws 
Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion = getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("pa")
             .path("scorecards")
             .query(ServiceNowParams.SYSPARM_UUID, in)

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
index 9b6ab6e..490827f 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
@@ -59,10 +59,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void retrieveCarts(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             .invoke(HttpMethod.GET);
@@ -82,10 +84,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void retrieveDeliveryAddress(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             .path("delivery_address")
@@ -107,10 +111,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void updateCart(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             
.path(getMandatoryRequestParamFromHeader(ServiceNowParams.PARAM_CART_ITEM_ID, 
in))
@@ -132,10 +138,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void deleteCart(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             
.path(getMandatoryRequestParamFromHeader(ServiceNowParams.PARAM_SYS_ID, in))
@@ -161,10 +169,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void retrieveCheckoutCart(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             .path("checkout")
@@ -186,10 +196,12 @@ class HelsinkiServiceNowServiceCatalogCartsProcessor 
extends AbstractServiceNowP
     private void checkoutCart(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("cart")
             .path("submit_order")

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCategoriesProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCategoriesProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCategoriesProcessor.java
index d3037f2..c12815c 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCategoriesProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCategoriesProcessor.java
@@ -50,11 +50,13 @@ class HelsinkiServiceNowServiceCatalogCategoriesProcessor 
extends AbstractServic
     private void retrieveCategory(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("categories")
             .path(ObjectHelper.notNull(sysId, "sysId"))

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogItemsProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogItemsProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogItemsProcessor.java
index 9204e6c..b8a27ca 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogItemsProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogItemsProcessor.java
@@ -61,12 +61,14 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor 
extends AbstractServiceNowP
     private void retrieveItems(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = ObjectHelper.isEmpty(sysId)
             ? client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("sn_sc")
+                .path(apiVersion)
                 .path("servicecatalog")
                 .path("items")
                 .query(ServiceNowParams.SYSPARM_CATEGORY, in)
@@ -80,6 +82,7 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor extends 
AbstractServiceNowP
             : client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("sn_sc")
+                .path(apiVersion)
                 .path("items")
                 .path("items")
                 .path(sysId)
@@ -102,11 +105,13 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor 
extends AbstractServiceNowP
     private void submitItemGuide(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response =  client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("items")
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -129,11 +134,13 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor 
extends AbstractServiceNowP
     private void checkoutItemGuide(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("items")
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -155,11 +162,13 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor 
extends AbstractServiceNowP
     private void addItemToCart(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("items")
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -182,11 +191,13 @@ class HelsinkiServiceNowServiceCatalogItemsProcessor 
extends AbstractServiceNowP
     private void submitItemProducer(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("items")
             .path(ObjectHelper.notNull(sysId, "sysId"))

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogProcessor.java
index c7847ab..520aa37 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogProcessor.java
@@ -54,12 +54,14 @@ class HelsinkiServiceNowServiceCatalogProcessor extends 
AbstractServiceNowProces
     private void retrieveCatalogs(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = ObjectHelper.isEmpty(sysId)
             ? client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("sn_sc")
+                .path(apiVersion)
                 .path("servicecatalog")
                 .path("catalogs")
                 .query(ServiceNowParams.SYSPARM_LIMIT, in)
@@ -69,6 +71,7 @@ class HelsinkiServiceNowServiceCatalogProcessor extends 
AbstractServiceNowProces
             : client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("sn_sc")
+                .path(apiVersion)
                 .path("servicecatalog")
                 .path("catalogs")
                 .path(sysId)
@@ -90,11 +93,13 @@ class HelsinkiServiceNowServiceCatalogProcessor extends 
AbstractServiceNowProces
     private void retrieveCatalogsCategories(Exchange exchange) throws 
Exception {
         final Message in = exchange.getIn();
         final Class<?> responseModel = getResponseModel(in);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
+        final String apiVersion  =getApiVersion(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("sn_sc")
+            .path(apiVersion)
             .path("servicecatalog")
             .path("catalogs")
             .path(ObjectHelper.notNull(sysId, "sysId"))

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowTableProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowTableProcessor.java
 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowTableProcessor.java
index 5390121..05be850 100644
--- 
a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowTableProcessor.java
+++ 
b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowTableProcessor.java
@@ -51,14 +51,16 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
      */
     private void retrieveRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         Response response = ObjectHelper.isEmpty(sysId)
             ? client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("now")
+                .path(apiVersion)
                 .path("table")
                 .path(tableName)
                 .query(ServiceNowParams.SYSPARM_QUERY, in)
@@ -73,6 +75,7 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
             : client.reset()
                 .types(MediaType.APPLICATION_JSON_TYPE)
                 .path("now")
+                .path(apiVersion)
                 .path("table")
                 .path(tableName)
                 .path(sysId)
@@ -91,15 +94,17 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
      */
     private void createRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> requestModel = getRequestModel(in, tableName);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         validateBody(in, requestModel);
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .query(ServiceNowParams.SYSPARM_DISPLAY_VALUE, in)
@@ -119,15 +124,17 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
      */
     private void modifyRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> requestModel = getRequestModel(in, tableName);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         validateBody(in, requestModel);
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -148,13 +155,15 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
      */
     private void deleteRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))
@@ -169,15 +178,17 @@ class HelsinkiServiceNowTableProcessor extends 
AbstractServiceNowProcessor {
      */
     private void updateRecord(Exchange exchange) throws Exception {
         final Message in = exchange.getIn();
-        final String tableName = 
in.getHeader(ServiceNowParams.PARAM_TABLE_NAME.getHeader(), config.getTable(), 
String.class);
+        final String tableName = getTableName(in);
+        final String apiVersion = getApiVersion(in);
         final Class<?> requestModel = getRequestModel(in, tableName);
         final Class<?> responseModel = getResponseModel(in, tableName);
-        final String sysId = 
in.getHeader(ServiceNowParams.PARAM_SYS_ID.getHeader(), String.class);
+        final String sysId = getSysID(in);
 
         validateBody(in, requestModel);
         Response response = client.reset()
             .types(MediaType.APPLICATION_JSON_TYPE)
             .path("now")
+            .path(apiVersion)
             .path("table")
             .path(tableName)
             .path(ObjectHelper.notNull(sysId, "sysId"))

http://git-wip-us.apache.org/repos/asf/camel/blob/f432a932/components/camel-servicenow/src/test/java/org/apache/camel/component/servicenow/ServiceNowTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servicenow/src/test/java/org/apache/camel/component/servicenow/ServiceNowTest.java
 
b/components/camel-servicenow/src/test/java/org/apache/camel/component/servicenow/ServiceNowTest.java
index cf98c8e..d19b799 100644
--- 
a/components/camel-servicenow/src/test/java/org/apache/camel/component/servicenow/ServiceNowTest.java
+++ 
b/components/camel-servicenow/src/test/java/org/apache/camel/component/servicenow/ServiceNowTest.java
@@ -123,6 +123,39 @@ public class ServiceNowTest extends ServiceNowTestSupport {
         assertTrue(body instanceof JsonNode);
     }
 
+    @Test
+    public void testVersionedApiRequest() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:servicenow");
+
+        mock.reset();
+        mock.expectedMessageCount(1);
+
+        Incident incident = new Incident();
+        incident.setDescription("my incident");
+        incident.setShortDescription("An incident");
+        incident.setSeverity(1);
+        incident.setImpact(1);
+
+        template().sendBodyAndHeaders(
+            "direct:servicenow",
+            incident,
+            new KVBuilder()
+                .put(ServiceNowConstants.RESOURCE, 
ServiceNowConstants.RESOURCE_TABLE)
+                .put(ServiceNowConstants.API_VERSION, "v1")
+                .put(ServiceNowConstants.ACTION, 
ServiceNowConstants.ACTION_CREATE)
+                .put(ServiceNowConstants.REQUEST_MODEL, Incident.class)
+                .put(ServiceNowConstants.RESPONSE_MODEL, JsonNode.class)
+                .put(ServiceNowParams.PARAM_TABLE_NAME, "incident")
+                .build()
+        );
+
+        mock.assertIsSatisfied();
+
+        Object body = mock.getExchanges().get(0).getIn().getBody();
+        assertNotNull(body);
+        assertTrue(body instanceof JsonNode);
+    }
+
     // 
*************************************************************************
     //
     // 
*************************************************************************

Reply via email to