创建Camel Salesforce Source Connector遇ResolveEndpointFailedException求助
背景
我是一名Python开发者,从未接触过Java。
环境
- Camel Salesforce Source Connector:v3.20.6(也曾尝试v3.21.0和v4.0.0,均遇相同问题)
- Kafka:v3.6.1
问题描述
尝试为Kafka实例创建CamelSalesforcesourceSourceConnector时失败,抛出ResolveEndpointFailedException异常。已通过Kafka REST API尝试多种配置变体:
配置变体1
{ "name": "sf-source-connector", "config": { "tasks.max":"1", "connector.class":"org.apache.camel.kafkaconnector.salesforcesource.CamelSalesforcesourceSourceConnector", "key.converter":"org.apache.kafka.connect.storage.StringConverter", "value.converter":"org.apache.kafka.connect.storage.StringConverter", "camel.kamelet.salesforce-source.query": "SELECT * FROM Account", "camel.kamelet.salesforce-source.topicName": "/data/AccountChangeEvent", "camel.kamelet.salesforce-source.loginUrl": "https://login.salesforce.com/", "camel.kamelet.salesforce-source.clientId": "", "camel.kamelet.salesforce-source.clientSecret": "", "camel.kamelet.salesforce-source.userName": "", "camel.kamelet.salesforce-source.password": "", "camel.kamelet.salesforce-source.notifyForOperationCreate": "true", "camel.kamelet.salesforce-source.notifyForOperationUpdate": "true", "camel.kamelet.salesforce-source.notifyForOperationDelete": "true", "camel.kamelet.salesforce-source.notifyForOperationUndelete": "true", "camel.source.endpoint.rawPayload": "true", "camel.kamelet.salesforce-source.operation": "subscribe", "topics": "camelsfstream" } }
异常信息
- 起始异常:
org.apache.kafka.connect.errors.ConnectException: Failed to create and start Camel context - 最终根因:
java.lang.IllegalArgumentException: /data/AccountChangeEvent - 关键问题:
IllegalArgumentException: /data/AccountChangeEvent
配置变体2
将配置中的camel.kamelet.salesforce-source.topicName修改为subscribe:/data/AccountChangeEvent
异常信息
起始异常仍为Failed to create and start Camel context,最终异常变为:
存在1个无法设置到端点的参数,检查URI是否拼写正确及是否为端点属性,未知参数=[{operationName=subscribe}]
另外有疑问:端点以local-salesforce-1://开头,编号会递增,是否正常?未找到修改该属性的配置项,推测最终会被替换。已在GitHub提交相关issue。
解决方案与说明
参数冲突是核心问题
变体1中同时配置了camel.kamelet.salesforce-source.query和operation: subscribe完全冲突:subscribe操作用于监听Salesforce Change Events,不需要设置query参数——query是给poll这类查询实体数据的操作使用的。同时设置会导致Camel无法正确解析端点,触发IllegalArgumentException。修正后的配置示例
删除query参数,保留subscribe相关配置:
{ "name": "sf-source-connector", "config": { "tasks.max":"1", "connector.class":"org.apache.camel.kafkaconnector.salesforcesource.CamelSalesforcesourceSourceConnector", "key.converter":"org.apache.kafka.connect.storage.StringConverter", "value.converter":"org.apache.kafka.connect.storage.StringConverter", "camel.kamelet.salesforce-source.topicName": "/data/AccountChangeEvent", "camel.kamelet.salesforce-source.loginUrl": "https://login.salesforce.com/", "camel.kamelet.salesforce-source.clientId": "", "camel.kamelet.salesforce-source.clientSecret": "", "camel.kamelet.salesforce-source.userName": "", "camel.kamelet.salesforce-source.password": "", "camel.kamelet.salesforce-source.notifyForOperationCreate": "true", "camel.kamelet.salesforce-source.notifyForOperationUpdate": "true", "camel.kamelet.salesforce-source.notifyForOperationDelete": "true", "camel.kamelet.salesforce-source.notifyForOperationUndelete": "true", "camel.source.endpoint.rawPayload": "true", "camel.kamelet.salesforce-source.operation": "subscribe", "topics": "camelsfstream" } }
变体2的错误原因
手动在topicName前添加subscribe:属于画蛇添足:operation: subscribe已经明确指定了操作类型,Camel会自动构造对应的端点URI,手动添加前缀会导致框架解析出额外的未知参数,触发异常。关于
local-salesforce-1://前缀
这是Camel内部生成的端点标识,编号递增是正常的框架行为,用于区分多个Salesforce连接实例,不需要手动修改,也不会影响实际与Salesforce的连接逻辑。
内容的提问来源于stack exchange,提问作者Bandook

