Braintree

Since Camel 2.17

Both producer and consumer are supported

The Braintree component provides access to Braintree Payments trough through theirs Java SDK.

All client applications need API credential in order to process payments. In order to use camel-braintree with your account, you’ll need to create a new Sandbox or Production account.

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

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-braintree</artifactId>
    <version>${camel-version}</version>
</dependency>

Braintree Options

The Braintree component supports 4 options, which are listed below.

Name Description Default Type

bridgeErrorHandler (consumer)

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 or ERROR level and ignored.

false

boolean

lazyStartProducer (producer)

Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.

false

boolean

basicPropertyBinding (advanced)

Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities

false

boolean

configuration (advanced)

Component configuration

BraintreeConfiguration

The Braintree endpoint is configured using URI syntax:

braintree:apiName/methodName

with the following path and query parameters:

Path Parameters (2 parameters):

Name Description Default Type

apiName

Required What kind of operation to perform. The value can be one of: ADDON, ADDRESS, CLIENTTOKEN, CREDITCARDVERIFICATION, CUSTOMER, DISCOUNT, DISPUTE, DOCUMENTUPLOAD, MERCHANTACCOUNT, PAYMENTMETHOD, PAYMENTMETHODNONCE, PLAN, REPORT, SETTLEMENTBATCHSUMMARY, SUBSCRIPTION, TRANSACTION, WEBHOOKNOTIFICATION

BraintreeApiName

methodName

What sub operation to use for the selected operation

String

Query Parameters (34 parameters):

Name Description Default Type

environment (common)

The environment Either SANDBOX or PRODUCTION

String

inBody (common)

Sets the name of a parameter to be passed in the exchange In Body

String

merchantId (common)

The merchant id provided by Braintree.

String

bridgeErrorHandler (consumer)

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 or ERROR level and ignored.

false

boolean

sendEmptyMessageWhenIdle (consumer)

If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead.

false

boolean

exceptionHandler (consumer)

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

ExceptionHandler

exchangePattern (consumer)

Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut

ExchangePattern

pollStrategy (consumer)

A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.

PollingConsumerPollStrategy

lazyStartProducer (producer)

Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.

false

boolean

basicPropertyBinding (advanced)

Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities

false

boolean

httpReadTimeout (advanced)

Set read timeout for http calls.

Integer

synchronous (advanced)

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

false

boolean

httpLogLevel (logging)

Set logging level for http calls, see java.util.logging.Level

String

httpLogName (logging)

Set log category to use to log http calls.

Braintree

String

logHandlerEnabled (logging)

Sets whether to enable the BraintreeLogHandler. It may be desirable to set this to 'false' where an existing JUL - SLF4J logger bridge is on the classpath. This option can also be configured globally on the BraintreeComponent.

true

boolean

proxyHost (proxy)

The proxy host

String

proxyPort (proxy)

The proxy port

Integer

backoffErrorThreshold (scheduler)

The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.

int

backoffIdleThreshold (scheduler)

The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.

int

backoffMultiplier (scheduler)

To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.

int

delay (scheduler)

Milliseconds before the next poll.

500

long

greedy (scheduler)

If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages.

false

boolean

initialDelay (scheduler)

Milliseconds before the first poll starts.

1000

long

repeatCount (scheduler)

Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever.

0

long

runLoggingLevel (scheduler)

The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.

ScheduledExecutorService

scheduler (scheduler)

To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz

none

String

schedulerProperties (scheduler)

To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler.

Map

startScheduler (scheduler)

Whether the scheduler should be auto started.

true

boolean

timeUnit (scheduler)

Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.

true

boolean

accessToken (security)

The access token granted by a merchant to another in order to process transactions on their behalf. Used in place of environment, merchant id, public key and private key fields.

String

privateKey (security)

The private key provided by Braintree.

String

publicKey (security)

The public key provided by Braintree.

String

URI format

braintree://endpoint-prefix/endpoint?[options]

Endpoint prefix can be one of:

  • addOn

  • address

  • clientToken

  • creditCardverification

  • customer

  • discount

  • dispute

  • documentUpload

  • merchantAccount

  • paymentmethod

  • paymentmethodNonce

  • plan

  • report

  • settlementBatchSummary

  • subscription

  • transaction

  • webhookNotification

BraintreeComponent

The Braintree Component can be configured with the options below. These options can be provided using the component’s bean property configuration of type org.apache.camel.component.braintree.BraintreeConfiguration.

Option Type Description

environment

String

Value that specifies where requests should be directed – sandbox or production

merchantId

String

A unique identifier for your gateway account, which is different than your merchant account ID

publicKey

String

User-specific public identifier

privateKey

String

User-specific secure identifier that should not be shared – even with us!

accessToken

String

Token granted to a merchant using Braintree Auth allowing them to process transactions on another’s behalf. Used in place of the environment, merchantId, publicKey and privateKey options.

All the options above are provided by Braintree Payments

Producer Endpoints:

Producer endpoints can use endpoint prefixes followed by endpoint names and associated options described next. A shorthand alias can be used for some endpoints. The endpoint URI MUST contain a prefix.

Endpoint options that are not mandatory are denoted by []. When there are no mandatory options for an endpoint, one of the set of [] options MUST be provided. Producer endpoints can also use a special option inBody that in turn should contain the name of the endpoint option whose value will be contained in the Camel Exchange In message.

Any of the endpoint options can be provided in either the endpoint URI, or dynamically in a message header. The message header name must be of the format CamelBraintree.<option>. Note that the inBody option overrides message header, i.e. the endpoint option inBody=option would override a CamelBraintree.option header.

For more information on the endpoints and options see Braintree references at https://developers.braintreepayments.com/reference/overview

Endpoint prefix addOn

The following endpoints can be invoked with the prefix addOn as follows:

braintree://addOn/endpoint
Endpoint Shorthand Alias Options Result Body Type

all

List<com.braintreegateway.Addon>

Endpoint prefix address

The following endpoints can be invoked with the prefix address as follows:

braintree://address/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

create

customerId, request

com.braintreegateway.Result<com.braintreegateway.Address>

delete

customerId, id

com.braintreegateway.Result<com.braintreegateway.Address>

find

customerId, id

com.braintreegateway.Address

update

customerId, id, request

com.braintreegateway.Result<com.braintreegateway.Address>

URI Options for address

Name Type

customerId

String

request

com.braintreegateway.AddressRequest

id

String

Endpoint prefix clientToken

The following endpoints can be invoked with the prefix clientToken as follows:

braintree://clientToken/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

generate

request

String

URI Options for clientToken

Name Type

request

com.braintreegateway.ClientTokenrequest

Endpoint prefix creditCardVerification

The following endpoints can be invoked with the prefix creditCardverification as follows:

braintree://creditCardVerification/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

find

id

com.braintreegateway.CreditCardVerification

search

query

com.braintreegateway.ResourceCollection<com.braintreegateway.CreditCardVerification>

URI Options for creditCardVerification

Name Type

id

String

query

com.braintreegateway.CreditCardVerificationSearchRequest

Endpoint prefix customer

The following endpoints can be invoked with the prefix customer as follows:

braintree://customer/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

all

create

request

com.braintreegateway.Result<com.braintreegateway.Customer>

delete

id

com.braintreegateway.Result<com.braintreegateway.Customer>

find

id

com.braintreegateway.Customer

search

query

com.braintreegateway.ResourceCollection<com.braintreegateway.Customer>

update

id, request

com.braintreegateway.Result<com.braintreegateway.Customer>

URI Options for customer

Name Type

id

String

request

com.braintreegateway.CustomerRequest

query

com.braintreegateway.CustomerSearchRequest

Endpoint prefix discount

The following endpoints can be invoked with the prefix discount as follows:

braintree://discount/endpoint
Endpoint Shorthand Alias Options Result Body Type

all

List<com.braintreegateway.Discount>

+
+

Endpoint prefix dispute

The following endpoints can be invoked with the prefix dispute as follows:

braintree://dispute/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

accept

id

com.braintreegateway.Result

addFileEvidence

disputeId, documentId

com.braintreegateway.Result<DisputeEvidence>

addFileEvidence

disputeId, fileEvidenceRequest

com.braintreegateway.Result<DisputeEvidence>

addTextEvidence

disputeId, content

com.braintreegateway.Result<DisputeEvidence>

addTextEvidence

disputeId, textEvidenceRequest

com.braintreegateway.Result<DisputeEvidence>

finalize

id

com.braintreegateway.Result

find

id

com.braintreegateway.Dispute

removeEvidence

id

com.braintreegateway.Result

search

disputeSearchRequest

com.braintreegateway.PaginatedCollection<com.braintreegateway.Dispute>

URI Options for dispute

Name Type

id

String

disputeId

String

documentId

String

fileEvidenceRequest

com.braintreegateway.FileEvidenceRequest

content

String

textEvidenceRequest

com.braintreegateway.TextEvidenceRequest

disputeSearchRequest

Endpoint prefix documentUpload

The following endpoints can be invoked with the prefix documentUpload as follows:

braintree://documentUpload/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

create

request

com.braintreegateway.Result<com.braintreegateway.DocumentUpload>

URI Options for documentUpload

Name Type

request

com.braintreegateway.DocumentUploadRequest

Endpoint prefix merchantAccount

The following endpoints can be invoked with the prefix merchantAccount as follows:

braintree://merchantAccount/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

create

request

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

createForCurrency

currencyRequest

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

find

id

com.braintreegateway.MerchantAccount

update

id, request

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

URI Options for merchantAccount

Name Type

id

String

request

com.braintreegateway.MerchantAccountRequest

currencyRequest

com.braintreegateway.MerchantAccountCreateForCurrencyRequest

Endpoint prefix paymentMethod

The following endpoints can be invoked with the prefix paymentMethod as follows:

braintree://paymentMethod/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

create

request

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

delete

token, deleteRequest

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

find

token

com.braintreegateway.PaymentMethod

update

token, request

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

URI Options for paymentMethod

Name Type

token

String

request

com.braintreegateway.PaymentMethodRequest

deleteRequest

com.braintreegateway.PaymentMethodDeleteRequest

Endpoint prefix paymentMethodNonce

The following endpoints can be invoked with the prefix paymentMethodNonce as follows:

braintree://paymentMethodNonce/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

create

paymentMethodToken

com.braintreegateway.Result<com.braintreegateway.PaymentMethodNonce>

find

paymentMethodNonce

com.braintreegateway.PaymentMethodNonce

URI Options for paymentMethodNonce

Name Type

paymentMethodToken

String

paymentMethodNonce

String

Endpoint prefix plan

The following endpoints can be invoked with the prefix plan as follows:

braintree://plan/endpoint
Endpoint Shorthand Alias Options Result Body Type

all

List<com.braintreegateway.Plan>

Endpoint prefix report

The following endpoints can be invoked with the prefix report as follows:

braintree://plan/report?[options]
Endpoint Shorthand Alias Options Result Body Type

transactionLevelFees

request

com.braintreegateway.Result<com.braintreegateway.TransactionLevelFeeReport>

URI Options for report

Name Type

request

com.braintreegateway.TransactionLevelFeeReportRequest

Endpoint prefix settlementBatchSummary

The following endpoints can be invoked with the prefix settlementBatchSummary as follows:

braintree://settlementBatchSummary/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

generate

request

com.braintreegateway.Result<com.braintreegateway.SettlementBatchSummary>

URI Options for settlementBatchSummary

Name Type

settlementDate

Calendar

groupByCustomField

String

Endpoint prefix subscription

The following endpoints can be invoked with the prefix subscription as follows:

braintree://subscription/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

cancel

id

com.braintreegateway.Result<com.braintreegateway.Subscription>

create

request

com.braintreegateway.Result<com.braintreegateway.Subscription>

delete

customerId, id

com.braintreegateway.Result<com.braintreegateway.Subscription>

find

id

com.braintreegateway.Subscription

retryCharge

subscriptionId, amount

com.braintreegateway.Result<com.braintreegateway.Transaction>

search

searchRequest

com.braintreegateway.ResourceCollection<com.braintreegateway.Subscription>

update

id, request

com.braintreegateway.Result<com.braintreegateway.Subscription>

URI Options for subscription

Name Type

id

String

request

com.braintreegateway.SubscriptionRequest

customerId

String

subscriptionId

String

amount

BigDecimal

searchRequest

com.braintreegateway.SubscriptionSearchRequest.

Endpoint prefix transaction

The following endpoints can be invoked with the prefix transaction as follows:

braintree://transaction/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

cancelRelease

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

cloneTransaction

id, cloneRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

credit

request

com.braintreegateway.Result<com.braintreegateway.Transaction>

find

id

com.braintreegateway.Transaction

holdInEscrow

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

releaseFromEscrow

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

refund

id, amount, refundRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

sale

request

com.braintreegateway.Result<com.braintreegateway.Transaction>

search

query

com.braintreegateway.ResourceCollection<com.braintreegateway.Transaction>

submitForPartialSettlement

id, amount

com.braintreegateway.Result<com.braintreegateway.Transaction>

submitForSettlement

id, amount, request

com.braintreegateway.Result<com.braintreegateway.Transaction>

voidTransaction

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

URI Options for transaction

Name Type

id

String

request

com.braintreegateway.TransactionCloneRequest

cloneRequest

com.braintreegateway.TransactionCloneRequest

refundRequest

com.braintreegateway.TransactionRefundRequest

amount

BigDecimal

query

com.braintreegateway.TransactionSearchRequest

Endpoint prefix webhookNotification

The following endpoints can be invoked with the prefix webhookNotification as follows:

braintree://webhookNotification/endpoint?[options]
Endpoint Shorthand Alias Options Result Body Type

parse

signature, payload

com.braintreegateway.WebhookNotification

verify

challenge

String

URI Options for webhookNotification

Name Type

signature

String

payload

String

challenge

String

Consumer Endpoints

Any of the producer endpoints can be used as a consumer endpoint. Consumer endpoints can use Scheduled Poll Consumer Options to schedule endpoint invocation. By default Consumer endpoints that return an array or collection will generate one exchange per element, and their routes will be executed once for each exchange. To change this behavior use the property splitResults=true to return a single exchange for the entire list or array.

Message Headers

Any URI option can be provided in a message header for producer endpoints with a CamelBraintree. prefix.

Message body

All result message bodies utilize objects provided by the Braintree Java SDK. Producer endpoints can specify the option name for incoming message body in the inBody endpoint parameter.

Examples

Blueprint

<?xml version="1.0"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
           xsi:schemaLocation="
             http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd
             http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
             http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">


    <cm:property-placeholder id="placeholder" persistent-id="camel.braintree">
    </cm:property-placeholder>

    <bean id="braintree" class="org.apache.camel.component.braintree.BraintreeComponent">
        <property name="configuration">
            <bean class="org.apache.camel.component.braintree.BraintreeConfiguration">
                <property name="environment" value="${environment}"/>
                <property name="merchantId" value="${merchantId}"/>
                <property name="publicKey" value="${publicKey}"/>
                <property name="privateKey" value="${privateKey}"/>
            </bean>
        </property>
    </bean>

    <camelContext trace="true" xmlns="http://camel.apache.org/schema/blueprint" id="braintree-example-context">
        <route id="braintree-example-route">
            <from uri="direct:generateClientToken"/>
            <to uri="braintree://clientToken/generate"/>
            <to uri="stream:out"/>
        </route>
    </camelContext>

</blueprint>

Spring Boot Auto-Configuration

When using braintree with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

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

The component supports 4 options, which are listed below.

Name Description Default Type

camel.component.braintree.autowired-enabled

Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc.

true

Boolean

camel.component.braintree.configuration

Component configuration. The option is a org.apache.camel.component.braintree.BraintreeConfiguration type.

BraintreeConfiguration

camel.component.braintree.enabled

Whether to enable auto configuration of the braintree component. This is enabled by default.

Boolean

camel.component.braintree.lazy-start-producer

Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.

false

Boolean