Andrea Cosentino created CAMEL-26318:
----------------------------------------

             Summary: camel-stripe: StripeProducer should use request options 
instead of mutating JVM-global Stripe settings
                 Key: CAMEL-26318
                 URL: https://issues.apache.org/jira/browse/CAMEL-26318
             Project: Camel
          Issue Type: Bug
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.24.0, 4.22.3, 4.18.6


h3. Current behaviour

In {{org.apache.camel.component.stripe.StripeProducer.doStart()}} 
(camel-stripe), the producer configures API access by writing to JVM-global 
static fields:
{code:java}
Stripe.apiKey = config.getApiKey();

if (ObjectHelper.isNotEmpty(config.getApiBase())) {
    Stripe.overrideApiBase(config.getApiBase());
}
{code}

The operation methods (such as {{handleCharges}}, {{handleCustomers}}, 
{{handlePaymentIntents}}, etc.) then execute static methods on Stripe SDK model 
classes (e.g. {{Charge.create}}, {{Customer.retrieve}}), which read these 
global static properties.

When multiple {{StripeEndpoint}} instances are configured in the same 
application with different API keys (or differing API base URLs), the producer 
started last overwrites the global settings for all endpoints in the process. 
Additionally, setting {{apiBase}} permanently changes the base URL for 
subsequent endpoints that do not specify an explicit {{apiBase}}.

h3. Expected behaviour

Each {{StripeProducer}} should apply endpoint-scoped {{RequestOptions}} to 
Stripe SDK calls (or use an isolated {{StripeClient}} instance) rather than 
mutating global {{Stripe}} static properties at startup.

h3. Change

* In {{StripeProducer}}:
  - Remove mutation of {{Stripe.apiKey}} and {{Stripe.overrideApiBase(...)}} in 
{{doStart()}}.
  - Construct an endpoint-scoped {{RequestOptions}} instance configured with 
the endpoint's {{apiKey}} and {{apiBase}}.
  - Pass the {{RequestOptions}} parameter to all Stripe SDK model calls across 
all supported operations.
* Add unit tests in {{camel-stripe}} to verify that multiple endpoints 
configured with distinct API keys and base URLs execute independently without 
interfering with each other's configuration.

h3. Tests

* Unit test in {{camel-stripe}} verifying two endpoints with different API keys 
retain their respective keys during execution.
* Unit test verifying an endpoint with a custom {{apiBase}} does not alter the 
base URL of subsequent endpoints without {{apiBase}}.
* Verify existing Stripe integration tests pass.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to