如何配置Apache Camel SMB端点URL读取Windows指定网络共享目录?
正确配置Apache Camel SMB端点监听Windows共享目录
问题分析
你遇到的两个错误都是因为SMB端点的路径配置不符合Camel SMB组件的规则:
- 第一次错误(STATUS_BAD_NETWORK_NAME):直接将子目录
5d/testing追加在共享名share后面,导致SMB客户端把share/5d/testing误认为是完整的共享名称——而实际你的共享名只是share,自然找不到对应的网络共享。 - 第二次错误(STATUS_OBJECT_NAME_NOT_FOUND):使用了非官方的
path参数,虽然组件在列表文件时临时兼容了这个参数,但创建Exchange读取文件时并未正确应用,导致尝试从共享根目录读取文件,最终找不到目标文件。
正确配置方式
Camel SMB组件指定共享子目录的官方参数是directoryName,你可以通过以下方式正确配置端点:
标准配置(推荐)
使用directoryName参数清晰区分共享名和子目录:
String smbSourceEndpoint = "smb://10.1.1.1:445/share?directoryName=5d/testing" + "&username=" + properties.getUsername() + "&password=" + properties.getPassword() + "&initialDelay=5000&delay=10000";
备选路径拼接方式
部分版本的Camel SMB组件支持直接在共享名后拼接子目录路径,若使用此方式需确保组件能正确识别共享名边界:
String smbSourceEndpoint = "smb://10.1.1.1:445/share/5d/testing" + "&username=" + properties.getUsername() + "&password=" + properties.getPassword() + "&initialDelay=5000&delay=10000";
注:若此方式仍报错,优先使用directoryName参数的标准配置。
额外注意事项
- 若需要域账号访问共享,用户名需写成
域\\用户名格式(Java代码中需转义反斜杠,即domain\\username)。 - 确保配置的账号拥有目标子目录的读取权限,避免因权限不足引发其他错误。
内容的提问来源于stack exchange,提问作者Dhruvi R S
相关产品推荐
相关产品推荐

