微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试在 Windows 上的 FTPS 中连接时 Talend 作业失败“模块 java.base 不会“打开 sun.security.ssl”到未命名的模块”

如何解决尝试在 Windows 上的 FTPS 中连接时 Talend 作业失败“模块 java.base 不会“打开 sun.security.ssl”到未命名的模块”

我有一个 Talend 7.3 作业,它在本地创建一些 .csv 文件,然后将它们发送到 990 端口上的 FTPS 服务器。在 IDE 中一切正常,但是当我导出作业(右键单击 -> 构建作业)时,.bat 文件给了我这个异常:

java.lang.reflect.InaccessibleObjectException: Unable to make field private final sun.security.util.Cache sun.security.ssl.SSLSessionContextImpl.sessionHostPortCache accessible: module java.base does not "opens sun.security.ssl" to unnamed module
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
        at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
        at org.talend.ftp.SSLSessionReuseFTPSClient._prepareDataSocket_(SSLSessionReuseFTPSClient.java:29)
        at org.apache.commons.net.ftp.FTPSClient._openDataConnection_(FTPSClient.java:628)
        at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:785)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2905)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2956)
        at --------------.--------------_0_1.--------------.tFTPPut_1Process(--------------.java:14760)
        at --------------.--------------_0_1.--------------.runJobInTOS(--------------.java:15224)
        at --------------.--------------_0_1.--------------.main(--------------.java:14993)
Exception in component tFTPPut_1 (--------------)
javax.net.ssl.SSLProtocolException: Received close_notify during handshake
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:356)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:303)
        at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:250)
        at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:202)
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:171)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1501)
        at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1466)
        at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1048)
        at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297)
        at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
        at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
        at java.base/java.io.InputStreamReader.read(InputStreamReader.java:178)
        at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
        at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2916)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2956)
        at --------------.--------------_0_1.--------------.tFTPPut_1Process(--------------.java:14760)
        at --------------.--------------_0_1.--------------.runJobInTOS(--------------.java:15224)
        at --------------.--------------_0_1.--------------.main(--------------.java:14993)

我认为问题出在 Windows 中,因为我无法使用 ftp open <host> 从终端打开连接。

解决方法

您正在使用的库/工具似乎使用此 hack 来允许连接到需要 TLS 会话重用的 FTPS 服务器:
How to connect to FTPS server with data connection using same TLS session?

黑客需要反射访问。您的运行时似乎不允许什么。我不是 Java 专家,但这个问题似乎涵盖了这个问题:
How to solve InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}") on Java 9?

(也许有更多 Java 经验的人可以根据这些信息进行构建)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?