Error with GET Request after KNIME start

Hi everyone,

after updating to KNIME 4.1 I have a rather strange issue with the “GET Request” node: After restarting KNIME on the first execution of the worflow the node fails with an error:

ERROR GET Request 0:1 Execute failed: org/apache/http/nio/reactor/IOSession

If I am running interactive and press F7 everything is working fine and I get the expected results. After that I can close the WF reopen it again and the node works es expected. Only after restarting KNIME the node will break on first run again. Unfortunately I am using this node in an automated setting where KNIME is started with an exported .knwf in batch mode. So for me this is failing every time since KNIME is started just for this purpose.

The minimum reproducible example here is a workflow containing a single “GET Request” node where the default URL has been changed from “https://www.google.com” to “http://www.google.com”.

Has anyone else encountered this issue or ideas for a solution?

Best regards
Lars

DEBUG Log

DEBUG WorkflowMigrationManager Visiting node: 0, 0:1
DEBUG NodeContainerEditPart GET Request 0:1 (CONFIGURED)
DEBUG NodeContainer Setting dirty flag on GET Request 0:1
DEBUG NodeContainer Setting dirty flag on GET Test 0
DEBUG WorkflowEditor Workflow event triggered: WorkflowEvent [type=WORKFLOW_DIRTY;node=0;old=null;new=null;timestamp=18.12.2019 17:29:51]
DEBUG NodeContainer GET Request 0:1 has new state: CONFIGURED_MARKEDFOREXEC
DEBUG NodeContainer GET Request 0:1 has new state: CONFIGURED_QUEUED
DEBUG NodeContainer GET Test 0 has new state: EXECUTING
DEBUG NodeContainer ROOT has new state: EXECUTING
DEBUG GET Request 0:1 GET Request 0:1 doBeforePreExecution
DEBUG GET Request 0:1 GET Request 0:1 has new state: PREEXECUTE
DEBUG GET Request 0:1 Adding handler 3247a1bb-43c9-476c-b5f3-7e1798f7eb6b (GET Request 0:1: ) - 1 in total
DEBUG GET Request 0:1 GET Request 0:1 doBeforeExecution
DEBUG GET Request 0:1 GET Request 0:1 has new state: EXECUTING
DEBUG GET Request 0:1 GET Request 0:1 Start execute
DEBUG GET Request 0:1 reset
ERROR GET Request 0:1 Execute failed: org/apache/http/nio/reactor/IOSession
DEBUG GET Request 0:1 GET Request 0:1 doBeforePostExecution
DEBUG GET Request 0:1 GET Request 0:1 has new state: POSTEXECUTE
DEBUG GET Request 0:1 GET Request 0:1 doAfterExecute - failure
DEBUG GET Request 0:1 reset
DEBUG GET Request 0:1 clean output ports.
DEBUG GET Request 0:1 Removing handler 3247a1bb-43c9-476c-b5f3-7e1798f7eb6b (GET Request 0:1: ) - 0 remaining
DEBUG GET Request 0:1 GET Request 0:1 has new state: IDLE
DEBUG GET Request 0:1 Configure succeeded. (GET Request)
DEBUG GET Request 0:1 GET Request 0:1 has new state: CONFIGURED
DEBUG GET Request 0:1 GET Test 0 has new state: CONFIGURED
DEBUG NodeContainer ROOT has new state: IDLE

Hi Lars,
could you also share your KNIME log? You find it under View -> Open KNIME log. It might contain further relevant information.
Kind regards
Alexander

Hi Alexander,

unfortunately I cannot share my full log file but I guess that that is not necessary. The only entry generated after opening and executing the “single GET Request” Workflow is the following:
(to emphasize again: This error does not occur again if I simply execute again via right click or pressing F7 or even closing and reopening only the WF without restarting KNIME!)

2019-12-19 13:51:11,405 : ERROR : KNIME-Worker-3-GET Request 0:1 : : Node : GET Request : 0:1 : Execute failed: org/apache/http/nio/reactor/ssl/SSLSetupHandler
java.lang.NoClassDefFoundError: org/apache/http/nio/reactor/ssl/SSLSetupHandler
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory.setupNIOClient(AsyncHTTPConduitFactory.java:315)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory.createClient(AsyncHTTPConduitFactory.java:382)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.getHttpAsyncClient(AsyncHTTPConduit.java:120)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.connect(AsyncHTTPConduit.java:562)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.handleNoOutput(AsyncHTTPConduit.java:345)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1316)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1336)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:415)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:649)
at org.apache.cxf.jaxrs.client.WebClient.doInvokeAsync(WebClient.java:984)
at org.apache.cxf.jaxrs.client.WebClient$AsyncInvokerImpl.method(WebClient.java:1486)
at org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl$InvocationImpl.submit(InvocationBuilderImpl.java:360)
at org.knime.rest.nodes.common.RestNodeModel.invoke(RestNodeModel.java:481)
at org.knime.rest.nodes.common.RestNodeModel.makeFirstCall(RestNodeModel.java:371)
at org.knime.rest.nodes.common.RestNodeModel.execute(RestNodeModel.java:340)
at org.knime.core.node.NodeModel.execute(NodeModel.java:740)
at org.knime.core.node.NodeModel.executeModel(NodeModel.java:574)
at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1229)
at org.knime.core.node.Node.execute(Node.java:1016)
at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:557)
at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:95)
at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:218)
at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:124)
at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:334)
at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:210)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:123)
at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:246)
Caused by: java.lang.ClassNotFoundException: org.apache.http.nio.reactor.ssl.SSLSetupHandler cannot be found by org.apache.httpcomponents.httpasyncclient_4.1.4.v20181215-knime
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:484)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 33 more

Hi @KNIMEandR,
unfortunately I can’t find much about this error online and I am not able to reproduce it. What happens when you have two GET Request nodes? Does the second one always work? Maybe you can mitigate this error for now by wrapping a GET Request node into a Try and Catch Errors node? It’s not nice but might solve the problem for now. Meanwhile I will see if I can find out more about this issue.
Kind regards
Alexander

Hi Alexander,

actually the real workflow I wanted to deploy for batch use has two of these nodes and both show the same behaviour. On my test workflow I’ve managed to work around with a try-catch enclosed by a Generic loop start and a variable condition loop end. Fairly complex but working.

I’ll implement that in the production workflow tomorrow to mitigate that problem. Nonetheless a strange issue…

Anyway - thanks for looking into it!

Hi,
one more thing: it seems like this is an issue with certain Java components the node cannot find. Maybe it is worthwhile to just reinstall the REST extension to make it work. Have you also checked for updates? And maybe it would also make sense to just load the exact same workflow on another PC and check if it is misbehaving there.
Kind regards
Alexander