Java 将请求发送到https端点时Talend tRest连接重置错误

Java 将请求发送到https端点时Talend tRest连接重置错误,java,rest,https,talend,Java,Rest,Https,Talend,我有一个简单的talend作业(数据集成),它使用tRest组件,使用内部网络之外的GET请求连接到rest服务。这对于通用http URL很好,但当使用任何https URL时,作业会“挂起”一段时间,然后出现以下错误:- Exception in component tREST_1 com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Connection reset at com.sun.je

我有一个简单的talend作业(数据集成),它使用tRest组件,使用内部网络之外的GET请求连接到rest服务。这对于通用http URL很好,但当使用任何https URL时,作业会“挂起”一段时间,然后出现以下错误:-

Exception in component tREST_1
com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Connection reset
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:131)
at com.sun.jersey.api.client.Client.handle(Client.java:616)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:559)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:72)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:502)
at darren_demos.test_rest2_0_1.Test_REST2.tREST_1Process(Test_REST2.java:596)
at darren_demos.test_rest2_0_1.Test_REST2.runJobInTOS(Test_REST2.java:954)
at darren_demos.test_rest2_0_1.Test_REST2.main(Test_REST2.java:811)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
at sun.security.ssl.Handshaker.kickstart(Handshaker.java:909)
at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1423)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1288)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler$1$1.getOutputStream(URLConnectionClientHandler.java:203)
at com.sun.jersey.api.client.CommittingOutputStream.commitWrite(CommittingOutputStream.java:117)
at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:89)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.io.BufferedWriter.flush(BufferedWriter.java:254)
at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:191)
at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128)
at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88)
at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58)
at com.sun.jersey.api.client.TerminatingClientHandler.writeRequestEntity(TerminatingClientHandler.java:305)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:182)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
... 7 more
[statistics] disconnected

Job Test_REST2 ended at 15:16 11/05/2016. [exit code=1]
这似乎发生在我尝试的任何https端点上。所涉及的URL可通过同一台机器上的浏览器访问


对原因有什么想法吗?我已经确保所涉及的根证书位于jre的cacerts文件中,但我认为这还不够。

使用组件tSetKeystore您应该能够设置tRest组件。如果需要,您可以在tSetKeystore组件中输入信任存储和密钥存储。然后使用OnComponentOk连接触发tRest以访问URL。

使用组件tSetKeystore您应该能够设置tRest组件。如果需要,您可以在tSetKeystore组件中输入信任存储和密钥存储。然后使用OnComponentOk连接触发tRest以访问URL。

您需要在{JAVA_HOME}/./jre/lib/security/cacerts中拥有受信任的根证书

通过列出已添加的证书,确保已将证书添加到cacerts


重新启动Open Studio,然后重试。

您需要在{JAVA_HOME}/./jre/lib/security/cacerts中拥有受信任的根证书

通过列出已添加的证书,确保已将证书添加到cacerts


重新启动Open Studio,然后重试。

尝试改用tRESTClient,https是现成的支持!请参阅尝试使用tRESTClient,https是开箱即用的支持!看见