[[servicenow-component]]
== ServiceNow Component

*Available as of Camel version 2.18*

The ServiceNow component provides access to ServiceNow platform through their REST API.

NOTE: From Camel 2.18.1 the component supports multiple version of ServiceNow platform with default to Helsinki. Supported version are <<ServiceNow-Fuji>> and <<ServiceNow-Helsinki>>


Maven users will need to add the following dependency to their pom.xml
for this component:

[source,java]
-------------------------------------------------
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servicenow</artifactId>
        <version>${camel-version}</version>
    </dependency>
-------------------------------------------------

### URI format

[source,java]
---------------------------------------
    servicenow://instanceName?[options]
---------------------------------------

### Options


// component options: START
The ServiceNow component supports 14 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *instanceName* (advanced) | The ServiceNow instance name |  | String
| *configuration* (advanced) | The ServiceNow default configuration |  | ServiceNowConfiguration
| *apiUrl* (producer) | The ServiceNow REST API url |  | String
| *userName* (security) | ServiceNow user account name |  | String
| *password* (security) | ServiceNow account password |  | String
| *oauthClientId* (security) | OAuth2 ClientID |  | String
| *oauthClientSecret* (security) | OAuth2 ClientSecret |  | String
| *oauthTokenUrl* (security) | OAuth token Url |  | String
| *proxyHost* (advanced) | The proxy host name |  | String
| *proxyPort* (advanced) | The proxy port number |  | Integer
| *proxyUserName* (security) | Username for proxy authentication |  | String
| *proxyPassword* (security) | Password for proxy authentication |  | String
| *useGlobalSslContext Parameters* (security) | Enable usage of global SSL context parameters. | false | boolean
| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
|===
// component options: END


// endpoint options: START
The ServiceNow endpoint is configured using URI syntax:

----
servicenow:instanceName
----

with the following path and query parameters:

==== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *instanceName* | *Required* The ServiceNow instance name |  | String
|===


==== Query Parameters (44 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *display* (producer) | Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value. This parameter is true by default. | true | String
| *displayValue* (producer) | Return the display value (true), actual value (false), or both (all) for reference fields (default: false) | false | String
| *excludeReferenceLink* (producer) | True to exclude Table API links for reference fields (default: false) |  | Boolean
| *favorites* (producer) | Set this parameter to true to return only scorecards that are favorites of the querying user. |  | Boolean
| *includeAggregates* (producer) | Set this parameter to true to always return all available aggregates for an indicator, including when an aggregate has already been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *includeAvailableAggregates* (producer) | Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *includeAvailableBreakdowns* (producer) | Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified, this parameter defaults to false and returns no breakdowns. |  | Boolean
| *includeScoreNotes* (producer) | Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added. |  | Boolean
| *includeScores* (producer) | Set this parameter to true to return all scores for a scorecard. If a value is not specified, this parameter defaults to false and returns only the most recent score value. |  | Boolean
| *inputDisplayValue* (producer) | True to set raw value of input fields (default: false) |  | Boolean
| *key* (producer) | Set this parameter to true to return only scorecards for key indicators. |  | Boolean
| *models* (producer) | Defines both request and response models |  | String
| *perPage* (producer) | Enter the maximum number of scorecards each query can return. By default this value is 10, and the maximum is 100. | 10 | Integer
| *release* (producer) | The ServiceNow release to target, default to Helsinki See https://docs.servicenow.com | HELSINKI | ServiceNowRelease
| *requestModels* (producer) | Defines the request model |  | String
| *resource* (producer) | The default resource, can be overridden by header CamelServiceNowResource |  | String
| *responseModels* (producer) | Defines the response model |  | String
| *sortBy* (producer) | Specify the value to use when sorting results. By default, queries sort records by value. |  | String
| *sortDir* (producer) | Specify the sort direction, ascending or descending. By default, queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order. |  | String
| *suppressAutoSysField* (producer) | True to suppress auto generation of system fields (default: false) |  | Boolean
| *suppressPaginationHeader* (producer) | Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit |  | Boolean
| *table* (producer) | The default table, can be overridden by header CamelServiceNowTable |  | String
| *target* (producer) | Set this parameter to true to return only scorecards that have a target. |  | Boolean
| *topLevelOnly* (producer) | Gets only those categories whose parent is a catalog. |  | Boolean
| *apiVersion* (advanced) | The ServiceNow REST API version, default latest |  | String
| *dateFormat* (advanced) | The date format used for Json serialization/deserialization | yyyy-MM-dd | String
| *dateTimeFormat* (advanced) | The date-time format used for Json serialization/deserialization | yyyy-MM-dd HH:mm:ss | String
| *httpClientPolicy* (advanced) | To configure http-client |  | HTTPClientPolicy
| *mapper* (advanced) | Sets Jackson's ObjectMapper to use for request/reply |  | ObjectMapper
| *proxyAuthorizationPolicy* (advanced) | To configure proxy authentication |  | ProxyAuthorization Policy
| *retrieveTargetRecordOn Import* (advanced) | Set this parameter to true to retrieve the target record when using import set api. The import set result is then replaced by the target record | false | Boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *timeFormat* (advanced) | The time format used for Json serialization/deserialization | HH:mm:ss | String
| *proxyHost* (proxy) | The proxy host name |  | String
| *proxyPort* (proxy) | The proxy port number |  | Integer
| *apiUrl* (security) | The ServiceNow REST API url |  | String
| *oauthClientId* (security) | OAuth2 ClientID |  | String
| *oauthClientSecret* (security) | OAuth2 ClientSecret |  | String
| *oauthTokenUrl* (security) | OAuth token Url |  | String
| *password* (security) | *Required* ServiceNow account password, MUST be provided |  | String
| *proxyPassword* (security) | Password for proxy authentication |  | String
| *proxyUserName* (security) | Username for proxy authentication |  | String
| *sslContextParameters* (security) | To configure security using SSLContextParameters. See http://camel.apache.org/camel-configuration-utilities.html |  | SSLContextParameters
| *userName* (security) | *Required* ServiceNow user account name, MUST be provided |  | String
|===
// endpoint options: END
// spring-boot-auto-configure options: START
=== Spring Boot Auto-Configuration


The component supports 57 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.servicenow.api-url* | The ServiceNow REST API url |  | String
| *camel.component.servicenow.configuration.api-url* | The ServiceNow REST API url |  | String
| *camel.component.servicenow.configuration.api-version* | The ServiceNow REST API version, default latest |  | String
| *camel.component.servicenow.configuration.date-format* | The date format used for Json serialization/deserialization | yyyy-MM-dd | String
| *camel.component.servicenow.configuration.date-time-format* | The date-time format used for Json serialization/deserialization | yyyy-MM-dd HH:mm:ss | String
| *camel.component.servicenow.configuration.display* | Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value. This parameter is true by default. | true | String
| *camel.component.servicenow.configuration.display-value* | Return the display value (true), actual value (false), or both (all) for reference fields (default: false) | false | String
| *camel.component.servicenow.configuration.exclude-reference-link* | True to exclude Table API links for reference fields (default: false) |  | Boolean
| *camel.component.servicenow.configuration.favorites* | Set this parameter to true to return only scorecards that are favorites of the querying user. |  | Boolean
| *camel.component.servicenow.configuration.http-client-policy* | To configure http-client |  | HTTPClientPolicy
| *camel.component.servicenow.configuration.include-aggregates* | Set this parameter to true to always return all available aggregates for an indicator, including when an aggregate has already been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *camel.component.servicenow.configuration.include-available-aggregates* | Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *camel.component.servicenow.configuration.include-available-breakdowns* | Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified, this parameter defaults to false and returns no breakdowns. |  | Boolean
| *camel.component.servicenow.configuration.include-score-notes* | Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added. |  | Boolean
| *camel.component.servicenow.configuration.include-scores* | Set this parameter to true to return all scores for a scorecard. If a value is not specified, this parameter defaults to false and returns only the most recent score value. |  | Boolean
| *camel.component.servicenow.configuration.input-display-value* | True to set raw value of input fields (default: false) |  | Boolean
| *camel.component.servicenow.configuration.key* | Set this parameter to true to return only scorecards for key indicators. |  | Boolean
| *camel.component.servicenow.configuration.mapper* | Sets Jackson's ObjectMapper to use for request/reply |  | ObjectMapper
| *camel.component.servicenow.configuration.models* | Defines both request and response models |  | Map
| *camel.component.servicenow.configuration.oauth-client-id* | OAuth2 ClientID |  | String
| *camel.component.servicenow.configuration.oauth-client-secret* | OAuth2 ClientSecret |  | String
| *camel.component.servicenow.configuration.oauth-token-url* | OAuth token Url |  | String
| *camel.component.servicenow.configuration.password* | ServiceNow account password, MUST be provided |  | String
| *camel.component.servicenow.configuration.per-page* | Enter the maximum number of scorecards each query can return. By default this value is 10, and the maximum is 100. | 10 | Integer
| *camel.component.servicenow.configuration.proxy-authorization-policy* | To configure proxy authentication |  | ProxyAuthorization Policy
| *camel.component.servicenow.configuration.proxy-host* | The proxy host name |  | String
| *camel.component.servicenow.configuration.proxy-password* | Password for proxy authentication |  | String
| *camel.component.servicenow.configuration.proxy-port* | The proxy port number |  | Integer
| *camel.component.servicenow.configuration.proxy-user-name* | Username for proxy authentication |  | String
| *camel.component.servicenow.configuration.release* | The ServiceNow release to target, default to Helsinki See https://docs.servicenow.com |  | ServiceNowRelease
| *camel.component.servicenow.configuration.request-models* | Defines the request model |  | Map
| *camel.component.servicenow.configuration.resource* | The default resource, can be overridden by header CamelServiceNowResource |  | String
| *camel.component.servicenow.configuration.response-models* | Defines the response model |  | Map
| *camel.component.servicenow.configuration.retrieve-target-record-on-import* | Set this parameter to true to retrieve the target record when using import set api. The import set result is then replaced by the target record | false | Boolean
| *camel.component.servicenow.configuration.sort-by* | Specify the value to use when sorting results. By default, queries sort records by value. |  | String
| *camel.component.servicenow.configuration.sort-dir* | Specify the sort direction, ascending or descending. By default, queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order. |  | String
| *camel.component.servicenow.configuration.ssl-context-parameters* | To configure security using SSLContextParameters. See http://camel.apache.org/camel-configuration-utilities.html |  | SSLContextParameters
| *camel.component.servicenow.configuration.suppress-auto-sys-field* | True to suppress auto generation of system fields (default: false) |  | Boolean
| *camel.component.servicenow.configuration.suppress-pagination-header* | Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit |  | Boolean
| *camel.component.servicenow.configuration.table* | The default table, can be overridden by header CamelServiceNowTable |  | String
| *camel.component.servicenow.configuration.target* | Set this parameter to true to return only scorecards that have a target. |  | Boolean
| *camel.component.servicenow.configuration.time-format* | The time format used for Json serialization/deserialization | HH:mm:ss | String
| *camel.component.servicenow.configuration.top-level-only* | Gets only those categories whose parent is a catalog. |  | Boolean
| *camel.component.servicenow.configuration.user-name* | ServiceNow user account name, MUST be provided |  | String
| *camel.component.servicenow.enabled* | Enable servicenow component | true | Boolean
| *camel.component.servicenow.instance-name* | The ServiceNow instance name |  | String
| *camel.component.servicenow.oauth-client-id* | OAuth2 ClientID |  | String
| *camel.component.servicenow.oauth-client-secret* | OAuth2 ClientSecret |  | String
| *camel.component.servicenow.oauth-token-url* | OAuth token Url |  | String
| *camel.component.servicenow.password* | ServiceNow account password |  | String
| *camel.component.servicenow.proxy-host* | The proxy host name |  | String
| *camel.component.servicenow.proxy-password* | Password for proxy authentication |  | String
| *camel.component.servicenow.proxy-port* | The proxy port number |  | Integer
| *camel.component.servicenow.proxy-user-name* | Username for proxy authentication |  | String
| *camel.component.servicenow.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
| *camel.component.servicenow.use-global-ssl-context-parameters* | Enable usage of global SSL context parameters. | false | Boolean
| *camel.component.servicenow.user-name* | ServiceNow user account name |  | String
|===
// spring-boot-auto-configure options: END



### Headers

[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
|===
|Name |Type |ServiceNow API Parameter |Endpoint option |Description
|CamelServiceNowResource |String | - | - | The resource to access
|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 | - | - | - | -
|CamelServiceNowOffsetLast | - | - | - | -
|CamelServiceNowContentType | - | - | - | -
|CamelServiceNowContentEncoding | - | - | - | -
|CamelServiceNowContentMeta | - | - | - | -
|CamelServiceNowSysId |String | sys_id | - | -
|CamelServiceNowUserSysId |String | user_sysid | - | -
|CamelServiceNowUserId |String | user_id | - | -
|CamelServiceNowCartItemId |String | cart_item_id | - | -
|CamelServiceNowFileName |String | file_name | - | -
|CamelServiceNowTable |String | table_name | - | -
|CamelServiceNowTableSysId |String | table_sys_id | - | -
|CamelServiceNowEncryptionContext | String | encryption_context | - | -
|CamelServiceNowCategory | String | sysparm_category  | - | -
|CamelServiceNowType |String | sysparm_type | - | -
|CamelServiceNowCatalog | String | sysparm_catalog | - | -
|CamelServiceNowQuery |String | sysparm_query | - | -
|CamelServiceNowDisplayValue |String | sysparm_display_value | displayValue  | -
|CamelServiceNowInputDisplayValue |Boolean | sysparm_input_display_value | inputDisplayValue  | -
|CamelServiceNowExcludeReferenceLink |Boolean | sysparm_exclude_reference_link | excludeReferenceLink  | -
|CamelServiceNowFields |String | sysparm_fields | - | -
|CamelServiceNowLimit |Integer | sysparm_limit | - | -
|CamelServiceNowText | String | sysparm_text | - | -
|CamelServiceNowOffset | Integer | sysparm_offset | - | -
|CamelServiceNowView |String | sysparm_view | - | -
|CamelServiceNowSuppressAutoSysField |Boolean | sysparm_suppress_auto_sys_field | suppressAutoSysField | -
|CamelServiceNowSuppressPaginationHeader | Booleab | sysparm_suppress_pagination_header | suppressPaginationHeader | -
|CamelServiceNowMinFields |String | sysparm_min_fields | - | -
|CamelServiceNowMaxFields |String | sysparm_max_fields | - | -
|CamelServiceNowSumFields |String | sysparm_sum_fields | - | -
|CamelServiceNowAvgFields |String | sysparm_avg_fields | - | -
|CamelServiceNowCount |Boolean | sysparm_count | - | -
|CamelServiceGroupBy |String | sysparm_group_by | - | -
|CamelServiceOrderBy |String | sysparm_order_by | - | -
|CamelServiceHaving |String | sysparm_having | - | -
|CamelServiceNowUUID |String | sysparm_uuid | - | -
|CamelServiceNowBreakdown| String| sysparm_breakdown | - | -
|CamelServiceNowIncludeScores| Boolean | sysparm_include_scores | includeScores | -
|CamelServiceNowIncludeScoreNotes | Boolean | sysparm_include_score_notes | includeScoreNotes | -
|CamelServiceNowIncludeAggregates | Boolean | sysparm_include_aggregates | includeAggregates | -
|CamelServiceNowIncludeAvailableBreakdowns | Boolean | sysparm_include_available_breakdowns | includeAvailableBreakdowns | -
|CamelServiceNowIncludeAvailableAggregates | Boolean | sysparm_include_available_aggregates | includeAvailableAggregates | -
|CamelServiceNowFavorites | Boolean | sysparm_favorites | favorites | -
|CamelServiceNowKey  | Boolean | sysparm_key | key | -
|CamelServiceNowTarget | Boolean | sysparm_target | target | -
|CamelServiceNowDisplay | String | sysparm_display | display | -
|CamelServiceNowPerPage | Integer | sysparm_per_page | perPage | -
|CamelServiceNowSortBy | String | sysparm_sortby | sortBy | -
|CamelServiceNowSortDir | String | sysparm_sortdit | sortDir | -
|CamelServiceNowContains | String | sysparm_contains | - | -
|CamelServiceNowTags | String | sysparm_tags | - | -
|CamelServiceNowPage | String | sysparm_page | - | -
|CamelServiceNowElementsFilter | String | sysparm_elements_filter | - | -
|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]]
[cols="10%a,10%a,10%a,70%a", options="header"]
.API Mapping
|===
| CamelServiceNowResource | CamelServiceNowAction | Method | API URI
1.5+<.^|TABLE
| RETRIEVE | GET | /api/now/v1/table/{table_name}/{sys_id}
| CREATE | POST | /api/now/v1/table/{table_name}
| MODIFY | PUT | /api/now/v1/table/{table_name}/{sys_id}
| DELETE | DELETE | /api/now/v1/table/{table_name}/{sys_id}
| UPDATE | PATCH | /api/now/v1/table/{table_name}/{sys_id}

| AGGREGATE
| RETRIEVE | GET | /api/now/v1/stats/{table_name}

1.2+<.^|IMPORT
| RETRIEVE | GET | /api/now/import/{table_name}/{sys_id}
| CREATE | POST | /api/now/import/{table_name}
|===

NOTE: link:http://wiki.servicenow.com/index.php?title=REST_API#Available_APIs[Fuji REST API Documentation]

[[ServiceNow-Helsinki]]
[cols="10%a,10%a,10%a,10%a,60%a", options="header"]
.API Mapping
|===
| CamelServiceNowResource | CamelServiceNowAction | CamelServiceNowActionSubject | Method | API URI
1.5+<.^|TABLE
| RETRIEVE | | GET | /api/now/v1/table/{table_name}/{sys_id}
| CREATE | | POST | /api/now/v1/table/{table_name}
| MODIFY | | PUT | /api/now/v1/table/{table_name}/{sys_id}
| DELETE | | DELETE | /api/now/v1/table/{table_name}/{sys_id}
| UPDATE | | PATCH | /api/now/v1/table/{table_name}/{sys_id}

| AGGREGATE
| RETRIEVE | | GET | /api/now/v1/stats/{table_name}

1.2+<.^|IMPORT
| RETRIEVE | | GET | /api/now/import/{table_name}/{sys_id}
| CREATE | | POST | /api/now/import/{table_name}

1.4+<.^|ATTACHMENT
| RETRIEVE | | GET | /api/now/api/now/attachment/{sys_id}
| CONTENT | | GET | /api/now/attachment/{sys_id}/file
| UPLOAD | | POST | /api/now/api/now/attachment/file
| DELETE | | DELETE | /api/now/attachment/{sys_id}

| SCORECARDS
| RETRIEVE | PERFORMANCE_ANALYTICS | GET | /api/now/pa/scorecards

1.2+<.^|MISC
| RETRIEVE | USER_ROLE_INHERITANCE | GET | /api/global/user_role_inheritance
| CREATE | IDENTIFY_RECONCILE | POST | /api/now/identifyreconcile

1.2+<.^|SERVICE_CATALOG
| RETRIEVE | | GET | /sn_sc/servicecatalog/catalogs/{sys_id}
| RETRIEVE | CATEGORIES |  GET | /sn_sc/servicecatalog/catalogs/{sys_id}/categories

1.5+<.^|SERVICE_CATALOG_ITEMS
| RETRIEVE | | GET | /sn_sc/servicecatalog/items/{sys_id}
| RETRIEVE | SUBMIT_GUIDE | POST | /sn_sc/servicecatalog/items/{sys_id}/submit_guide
| RETRIEVE | CHECKOUT_GUIDE | POST | /sn_sc/servicecatalog/items/{sys_id}/checkout_guide
| CREATE | SUBJECT_CART | POST | /sn_sc/servicecatalog/items/{sys_id}/add_to_cart
| CREATE | SUBJECT_PRODUCER | POST | /sn_sc/servicecatalog/items/{sys_id}/submit_producer

1.6+<.^|SERVICE_CATALOG_CARTS
| RETRIEVE | | GET | /sn_sc/servicecatalog/cart
| RETRIEVE | DELIVERY_ADDRESS | GET | /sn_sc/servicecatalog/cart/delivery_address/{user_id}
| RETRIEVE | CHECKOUT | POST | /sn_sc/servicecatalog/cart/checkout
| UPDATE | | POST | /sn_sc/servicecatalog/cart/{cart_item_id}
| UPDATE | CHECKOUT | POST | /sn_sc/servicecatalog/cart/submit_order
| DELETE | | DELETE | /sn_sc/servicecatalog/cart/{sys_id}/empty

| SERVICE_CATALOG_CATEGORIES
| RETRIEVE | | GET | /sn_sc/servicecatalog/categories/{sys_id}

|===

NOTE: https://docs.servicenow.com/bundle/helsinki-servicenow-platform/page/integrate/inbound-rest/reference/r_RESTResources.html[Helsinki REST API Documentation]

### Usage examples:
 
[source,java]
.Retrieve 10 Incidents
-------------------------------------------------------------------------------------------------------------------
context.addRoutes(new RouteBuilder() {
    public void configure() {
       from("direct:servicenow")
           .to("servicenow:{{env:SERVICENOW_INSTANCE}}"
               + "?userName={{env:SERVICENOW_USERNAME}}"
               + "&password={{env:SERVICENOW_PASSWORD}}"
               + "&oauthClientId={{env:SERVICENOW_OAUTH2_CLIENT_ID}}"
               + "&oauthClientSecret={{env:SERVICENOW_OAUTH2_CLIENT_SECRET}}"
           .to("mock:servicenow");
    }
}); 

FluentProducerTemplate.on(context)
    .withHeader(ServiceNowConstants.RESOURCE, "table")
    .withHeader(ServiceNowConstants.ACTION, ServiceNowConstants.ACTION_RETRIEVE)
    .withHeader(ServiceNowConstants.SYSPARM_LIMIT.getId(), "10")
    .withHeader(ServiceNowConstants.TABLE, "incident")
    .withHeader(ServiceNowConstants.MODEL, Incident.class)
    .to("direct:servicenow")
    .send();
-------------------------------------------------------------------------------------------------------------------
