Salesforce Component

Table of Contents

URI format
Supported Salesforce APIs
Examples
Camel Salesforce Maven Plugin
See Also

Available as of Camel 2.12

This component supports producer and consumer endpoints to communicate with Salesforce using Java DTOs. There is a companion maven plugin Camel Salesforce Plugin that generates these DTOs (see further below).

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

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-salesforce</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI format

The URI scheme for a salesforce component is as follows

salesforce:topic?options

You can append query options to the URI in the following format, ?option=value&option=value&…​

Supported Salesforce APIs

The component supports the following Salesforce APIs

Producer endpoints can use the following APIs. Most of the APIs process one record at a time, the Query API can retrieve multiple Records.

Rest API

  • getVersions - Gets supported Salesforce REST API versions
  • getResources - Gets available Salesforce REST Resource endpoints
  • getGlobalObjects - Gets metadata for all available SObject types
  • getBasicInfo - Gets basic metadata for a specific SObject type
  • getDescription - Gets comprehensive metadata for a specific SObject type
  • getSObject - Gets an SObject using its Salesforce Id
  • createSObject - Creates an SObject
  • updateSObject - Updates an SObject using Id
  • deleteSObject - Deletes an SObject using Id
  • getSObjectWithId - Gets an SObject using an external (user defined) id field
  • upsertSObject - Updates or inserts an SObject using an external id
  • deleteSObjectWithId - Deletes an SObject using an external id
  • query - Runs a Salesforce SOQL query
  • queryMore - Retrieves more results (in case of large number of results) using result link returned from the 'query' API
  • search - Runs a Salesforce SOSL query

For example, the following producer endpoint uses the upsertSObject API, with the sObjectIdName parameter specifying 'Name' as the external id field. The request message body should be an SObject DTO generated using the maven plugin. The response message will either be null if an existing record was updated, or CreateSObjectResult with an id of the new record, or a list of errors while creating the new object.

    ...to("salesforce:upsertSObject?sObjectIdName=Name")...

Rest Bulk API

Producer endpoints can use the following APIs. All Job data formats, i.e. xml, csv, zip/xml, and zip/csv are supported. The request and response have to be marshalled/unmarshalled by the route. Usually the request will be some stream source like a CSV file, and the response may also be saved to a file to be correlated with the request.

  • createJob - Creates a Salesforce Bulk Job
  • getJob - Gets a Job using its Salesforce Id
  • closeJob - Closes a Job
  • abortJob - Aborts a Job
  • createBatch - Submits a Batch within a Bulk Job
  • getBatch - Gets a Batch using Id
  • getAllBatches - Gets all Batches for a Bulk Job Id
  • getRequest - Gets Request data (XML/CSV) for a Batch
  • getResults - Gets the results of the Batch when its complete
  • createBatchQuery - Creates a Batch from an SOQL query
  • getQueryResultIds - Gets a list of Result Ids for a Batch Query
  • getQueryResult - Gets results for a Result Id

For example, the following producer endpoint uses the createBatch API to create a Job Batch. The in message must contain a body that can be converted into an InputStream (usually UTF-8 CSV or XML content from a file, etc.) and header fields 'jobId' for the Job and 'contentType' for the Job content type, which can be XML, CSV, ZIP_XML or ZIP_CSV. The put message body will contain BatchInfo on success, or throw a SalesforceException on error.

    ...to("salesforce:createBatchJob")..

Rest Streaming API

Consumer endpoints can use the following sytax for streaming endpoints to receive Salesforce notifications on create/update.

To create and subscribe to a topic

    from("salesforce:CamelTestTopic?notifyForFields=ALL&notifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...

To subscribe to an existing topic

    from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...

Examples

Uploading a document to a ContentWorkspace

Create the ContentVersion in Java, using a Processor instance:

public class ContentProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message message = exchange.getIn();

        ContentVersion cv = new ContentVersion();
        ContentWorkspace cw = getWorkspace(exchange);
        cv.setFirstPublishLocationId(cw.getId());
        cv.setTitle("test document");
        cv.setPathOnClient("test_doc.html");
        byte[] document = message.getBody(byte[].class);
        ObjectMapper mapper = new ObjectMapper();
        String enc = mapper.convertValue(document, String.class);
        cv.setVersionDataUrl(enc);
        message.setBody(cv);
    }

    protected ContentWorkspace getWorkSpace(Exchange exchange) {
        // Look up the content workspace somehow, maybe use enrich() to add it to a
        // header that can be extracted here
        ....
    }
}

Give the output from the processor to the Salesforce component:

    from("file:///home/camel/library")
        .to(new ContentProcessor())     // convert bytes from the file into a ContentVersion SObject
                                        // for the salesforce component
        .to("salesforce:createSObject");

Camel Salesforce Maven Plugin

Table of Contents

Options

This Maven plugin generates DTOs for the Camel Salesforce.

Options

The Salesforce component supports 16 options which are listed below.

{% raw %}

NameJava TypeDescription

loginConfig

SalesforceLoginConfig

To use the shared SalesforceLoginConfig as login configuration

config

SalesforceEndpointConfig

To use the shared SalesforceLoginConfig as configuration

httpClientProperties

Map

Used for configuring HTTP client properties as key/value pairs

sslContextParameters

SSLContextParameters

To configure security using SSLContextParameters

httpProxyHost

String

To configure HTTP proxy host

httpProxyPort

Integer

To configure HTTP proxy port

httpProxyUsername

String

To configure HTTP proxy username

httpProxyPassword

String

To configure HTTP proxy password

isHttpProxySocks4

boolean

Enable for Socks4 proxy false by default

isHttpProxySecure

boolean

Enable for TLS connections true by default

httpProxyIncludedAddresses

Set

HTTP proxy included addresses

httpProxyExcludedAddresses

Set

HTTP proxy excluded addresses

httpProxyAuthUri

String

HTTP proxy authentication URI

httpProxyRealm

String

HTTP proxy authentication realm

httpProxyUseDigestAuth

boolean

Use HTTP proxy Digest authentication false by default

packages

String[]

Package names to scan for DTO classes (multiple packages can be separated by comma).

{% endraw %}

The Salesforce component supports 41 endpoint options which are listed below:

{% raw %}

NameGroupDefaultJava TypeDescription

operationName

common

 

OperationName

 

topicName

common

 

String

 

apexMethod

common

 

String

APEX method name

apexQueryParams

common

 

Map

Query params for APEX method

apexUrl

common

 

String

APEX method URL

apiVersion

common

 

String

Salesforce API version defaults to SalesforceEndpointConfig.DEFAULT_VERSION

backoffIncrement

common

 

long

Backoff interval increment for Streaming connection restart attempts for failures beyond CometD auto-reconnect.

batchId

common

 

String

Bulk API Batch ID

contentType

common

 

ContentType

Bulk API content type one of XML CSV ZIP_XML ZIP_CSV

defaultReplayId

common

 

Integer

Default replayId setting if no value is found in link initialReplayIdMap

format

common

 

PayloadFormat

Payload format to use for Salesforce API calls either JSON or XML defaults to JSON

httpClient

common

 

SalesforceHttpClient

Custom Jetty Http Client to use to connect to Salesforce.

includeDetails

common

 

Boolean

Include details in Salesforce1 Analytics report defaults to false.

initialReplayIdMap

common

 

Map

Replay IDs to start from per channel name.

instanceId

common

 

String

Salesforce1 Analytics report execution instance ID

jobId

common

 

String

Bulk API Job ID

maxBackoff

common

 

long

Maximum backoff interval for Streaming connection restart attempts for failures beyond CometD auto-reconnect.

notifyForFields

common

 

NotifyForFieldsEnum

Notify for fields options are ALL REFERENCED SELECT WHERE

notifyForOperationCreate

common

 

Boolean

Notify for create operation defaults to false (API version = 29.0)

notifyForOperationDelete

common

 

Boolean

Notify for delete operation defaults to false (API version = 29.0)

notifyForOperations

common

 

NotifyForOperationsEnum

Notify for operations options are ALL CREATE EXTENDED UPDATE (API version 29.0)

notifyForOperationUndelete

common

 

Boolean

Notify for un-delete operation defaults to false (API version = 29.0)

notifyForOperationUpdate

common

 

Boolean

Notify for update operation defaults to false (API version = 29.0)

objectMapper

common

 

ObjectMapper

Custom Jackson ObjectMapper to use when serializing/deserializing Salesforce objects.

reportId

common

 

String

Salesforce1 Analytics report Id

reportMetadata

common

 

ReportMetadata

Salesforce1 Analytics report metadata for filtering

resultId

common

 

String

Bulk API Result ID

sObjectBlobFieldName

common

 

String

SObject blob field name

sObjectClass

common

 

String

Fully qualified SObject class name usually generated using camel-salesforce-maven-plugin

sObjectFields

common

 

String

SObject fields to retrieve

sObjectId

common

 

String

SObject ID if required by API

sObjectIdName

common

 

String

SObject external ID field name

sObjectIdValue

common

 

String

SObject external ID field value

sObjectName

common

 

String

SObject name if required or supported by API

sObjectQuery

common

 

String

Salesforce SOQL query string

sObjectSearch

common

 

String

Salesforce SOSL search string

updateTopic

common

false

boolean

Whether to update an existing Push Topic when using the Streaming API defaults to false

bridgeErrorHandler

consumer

false

boolean

Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN/ERROR level and ignored.

exceptionHandler

consumer (advanced)

 

ExceptionHandler

To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.

exchangePattern

consumer (advanced)

 

ExchangePattern

Sets the exchange pattern when the consumer creates an exchange.

synchronous

advanced

false

boolean

Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).

{% endraw %}

For obvious security reasons it is recommended that the clientId, clientSecret, userName and password fields be not set in the pom.xml. The plugin should be configured for the rest of the properties, and can be executed using the following command:

    mvn camel-salesforce:generate -DcamelSalesforce.clientId=<clientid> -DcamelSalesforce.clientSecret=<clientsecret> \
    -DcamelSalesforce.userName=<username> -DcamelSalesforce.password=<password>

The generated DTOs use Jackson and XStream annotations. All Salesforce field types are supported. Date and time fields are mapped to Joda DateTime, and picklist fields are mapped to generated Java Enumerations.

See Also