我有多个 salesforce 实例,我想使用 apache camel SalesforceComponent 连接。连接参数(clientId、secret 等)仅在运行时可用,并且每个实例都不同。我如何在运行时设置它并创建并行运行的路由的多个实例?
我尝试创建组件的单独实例,但这似乎不起作用。它总是从 application.properties 中读取
SalesforceComponent salesforce = new SalesforceComponent(camelContext);
salesforce.setLoginUrl("https://login.salesforce.com");
salesforce.setClientId("XXXXXXX");
salesforce.setRefreshToken("XXXXXXXXXXXXXX");
salesforce.setClientSecret("CCCCCCCCCCCC");
salesforce.setAuthenticationType(AuthenticationType.REFRESH_TOKEN);
我正在使用 Spring Boot (2.7.2) 和 Camel (2.19.0)
(它类似于问题 - Camel Salesforce - 多组件配置)
添加更多细节:
使用不同的名称设置新创建的异常(salesforcev2)
camelContext.addComponent("salesforcev2", component);
producerTemplate.requestBody("direct:my-route",
"hello", String.class);
Caused by: org.apache.camel.FailedToCreateProducerException: Failed to create Producer for endpoint: salesforcev2://query?sObjectClass=com.salesforce.dto.QueryRecordsCase&sObjectQuery=SELECT+Id%2C+Subject+FROM+Case. Reason: java.lang.NullPointerException
at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:579) ~[camel-core-2.19.0.jar:2.19.0]
....
Caused by: java.lang.NullPointerException: null
at org.apache.camel.component.salesforce.internal.client.AbstractClientBase.start(AbstractClientBase.java:91) ~[camel-salesforce-2.19.0.jar:2.19.0]
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75) ~[camel-core-2.19.0.jar:2.19.0]
路线
from("direct:my-route")
.to("salesforcev2:query?sObjectQuery=SELECT Id, Subject FROM Case&sObjectClass=com.salesforce.dto.QueryRecordsCase")
.streamCaching()
.to("log:my-log");
尝试以下操作:
SalesforceComponent salesforce2 = new SalesforceComponent();
// set component properties
context.addComponent("salesforce2", salesforce2);
...
// in a RouteBuilder, etc.
from("salesforce2:query")
Jeremy Ross 上面的回答是正确的。但是,请注意它只适用于更高版本的骆驼。我从我使用的 2.x 升级到版本 3.14.7。无法编辑以上内容以添加此内容。
SalesforceComponent component = new SalesforceComponent();
component.setClientId("xxxxxxxx");
component.setClientSecret("xxxxxxxx");
component.setRefreshToken("xxxxxxxx");
component.setLoginUrl("https://login.salesforce.com");
component.setAuthenticationType(AuthenticationType.REFRESH_TOKEN);
component.setLazyLogin(false);
// add it to context
camelContext.addComponent("salesforcev2", component);