Anypoint Studio中OJDBC Connector配置NetSuite查询失败求助
问题描述
我是MuleSoft新手,已经用标准Salesforce和NetSuite连接器搭建了简单流。现在要实现复杂流程里的NetSuite直接查询,尝试配置OJDBC驱动,先后用了8、10、11版本,都没法正常工作。
配置信息
- 版本与依赖:包含驱动版本、Mule DB连接器版本等配置(附截图)
- 连接详情:包含JDBC URL、认证信息等连接配置项(附截图)
若需要更多配置细节,我可以补充。
错误日志
Caused by: java.io.IOException: 远程主机强制关闭了一个现有的连接 at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:?] at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) ~[?:?] at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) ~[?:?] at sun.nio.ch.IOUtil.read(IOUtil.java:245) ~[?:?] at sun.nio.ch.IOUtil.read(IOUtil.java:223) ~[?:?] at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:353) ~[?:?] at oracle.net.nt.TimeoutSocketChannel.read(TimeoutSocketChannel.java:174) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:555) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NIOPacket.readNIOPacket(NIOPacket.java:403) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:127) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NSProtocol.connect(NSProtocol.java:340) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at java.sql.DriverManager.getConnection(DriverManager.java:677) ~[java.sql:?] at java.sql.DriverManager.getConnection(DriverManager.java:189) ~[java.sql:?] at org.mule.db.commons.shaded.internal.domain.connection.enhydra.wrappers.EnhydraWrapperUtils.getSecureConnectionIfPossible(EnhydraWrapperUtils.java:100) ~[mule-db-connector-1.14.4-mule-plugin.jar:?] ... 70 more ERROR 2023-10-11 16:35:09,980 [[MuleRuntime].uber.12: [ojdbc-ns].ojdbc-nsFlow.BLOCKING @67c0f299] [processor: ojdbc-nsFlow/processors/0; event: f15e0d80-67f7-11ee-90c8-806d970dc42d] org.mule.runtime.core.internal.exception.OnErrorContinueHandler: ******************************************************************************** 消息 : 无法获取URL jdbc:oracle:thin:@3809881.connect.api.netsuite.com:1708 的连接: IO错误: 远程主机强制关闭了一个现有的连接,认证超时0毫秒。 元素 : ojdbc-nsFlow/processors/0 @ ojdbc-ns:ojdbc-ns.xml:17 (Select) 元素DSL : <db:select doc:name="Select" doc:id="44427429-1100-4a4b-a0c4-b596bc642a14" config-ref="Database_Config"> <db:sql><![CDATA[ select id from accountt ]]></db:sql> </db:select> 错误类型 : DB:CONNECTIVITY FlowStack : at ojdbc-nsFlow(ojdbc-nsFlow/processors/0 @ ojdbc-ns:ojdbc-ns.xml:17 (Select)) (设置调试级别日志或 '-Dmule.verbose.exceptions=true' 查看完整信息) ********************************************************************************
排查建议
核对NetSuite JDBC连接格式
NetSuite的JDBC URL必须包含完整参数,且需启用SSL认证。你的当前URL缺少必要配置,正确格式示例:jdbc:oracle:thin:@<账户ID>.connect.api.netsuite.com:1708:NETSUITE?TNS_ADMIN=<Wallet文件路径>同时需要从NetSuite获取官方提供的Oracle Wallet文件,用于SSL加密连接。
匹配兼容的驱动版本
不要随意切换OJDBC大版本,优先参考NetSuite官方文档指定的驱动版本,确保驱动与NetSuite环境版本兼容,避免版本不匹配导致的连接问题。检查网络连通性
用telnet 3809881.connect.api.netsuite.com 1708或nc -zv 3809881.connect.api.netsuite.com 1708测试端口连通性,确认Mule运行环境能访问该地址;同时排查防火墙、代理是否拦截了JDBC连接,需放行对应端口和域名。验证认证信息
NetSuite JDBC用户名格式通常为<邮箱>@<账户ID>.netsuite.com,密码需附加角色ID参数,示例:你的密码&role=<角色ID>,确保用户名、密码及角色ID配置正确。补全Oracle依赖包
除了ojdbc驱动包,还需添加oraclepki.jar、osdt_cert.jar、osdt_core.jar这几个Oracle SSL相关依赖,缺少这些包会导致SSL连接失败。
内容的提问来源于stack exchange,提问作者Danyal

