We are adopting KNIME at our company for a new project and we are experiencing a strange issue with many of the modern UI nodes, but especially the “view” nodes like table view or any of the charts. The issue prevents the configuration dialogues from loading, they are just blank. It only happens if we first open the configuration dialog whilst on our VPN. Not only does this make it impossible to configure the node, but even if the node is already configured then these nodes fail to execute. (I don’t know why this is true, but we see that if we cannot open the UI, the node also fails to execute. And this only ever happens on the VPN)
Our company is doing certificate resigning as part of its IT security operations. We previously had issues getting extensions installed because of these certificate problems but that was addressed by this post:
I originally thought it was a similar problem but now I am not sure. As a temporary fix, we can log off the VPN, open the node again, and then if we reconnect afterwards, the node dialog works on that machine (likes its been cached). Its a little bit hit or miss, sometimes I can replicate it the issue and sometimes I cannot. This is a problem because we intend to run our workflows in batch mode on an internal server which will always be connected to the cooperate network and thus can never load the dialog
I managed to replicate it locally and capture the error logged when the ui refuses to open:
eclipse.buildId=unknown
java.version=17.0.5
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_GB
Command-line arguments: -os win32 -ws win32 -arch x86_64
java.lang.ClassCastException: class org.cef.CefClientStandalone cannot be cast to class org.cef.CefClientSwt (org.cef.CefClientStandalone and org.cef.CefClientSwt are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @596cfac7)
at com.equo.chromium.swt.internal.Chromium.createClienthandler(Chromium.java:519)
at com.equo.chromium.swt.internal.Chromium.getClientHandler(Chromium.java:465)
at com.equo.chromium.swt.internal.Chromium.prepareBrowser(Chromium.java:460)
at com.equo.chromium.swt.internal.Chromium.createBrowser(Chromium.java:471)
at com.equo.chromium.swt.internal.Chromium.access$35(Chromium.java:470)
at com.equo.chromium.swt.internal.Chromium$2.paintControl(Chromium.java:423)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1075)
at org.eclipse.swt.widgets.Composite.WM_PAINT(Composite.java:1627)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4800)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
at org.eclipse.swt.internal.win32.OS.UpdateWindow(Native Method)
at org.eclipse.swt.widgets.Decorations.setVisible(Decorations.java:1289)
at org.eclipse.swt.widgets.Shell.setVisible(Shell.java:2062)
at org.eclipse.swt.widgets.Shell.open(Shell.java:1293)
at org.knime.js.cef.nodeview.CEFNodeView.callOpenView(CEFNodeView.java:242)
at org.knime.core.node.AbstractNodeView.openView(AbstractNodeView.java:197)
at org.knime.core.node.Node.invokeOpenView(Node.java:2699)
at org.knime.workbench.editor2.actions.OpenNodeViewAction.openNodeView(OpenNodeViewAction.java:146)
at org.knime.workbench.editor2.editparts.NodeContainerEditPart.openNodeDialog(NodeContainerEditPart.java:860)
at org.knime.workbench.editor2.editparts.NodeContainerEditPart.openNodeDialog(NodeContainerEditPart.java:846)
at org.knime.workbench.editor2.actions.OpenDialogAction.runOnNodes(OpenDialogAction.java:172)
at org.knime.workbench.editor2.actions.AbstractNodeAction.runInSWT(AbstractNodeAction.java:174)
at org.knime.workbench.editor2.actions.AbstractNodeAction$1.run(AbstractNodeAction.java:160)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:183)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:4785)
at org.knime.workbench.editor2.actions.AbstractNodeAction.run(AbstractNodeAction.java:157)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:474)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580)
at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:414)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
at org.eclipse.jface.window.Window.open(Window.java:799)
at org.eclipse.ui.internal.views.log.EventDetailsDialog.open(EventDetailsDialog.java:192)
at org.eclipse.ui.internal.views.log.EventDetailsDialogAction.run(EventDetailsDialogAction.java:102)
at org.eclipse.ui.internal.views.log.LogView.lambda$2(LogView.java:599)
at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:780)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:777)
at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1542)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1211)
at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:272)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:329)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:193)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
Hi Scott. Thanks for your response. We are not using any of that software on our work machines. Also the tracebacks given in that post are different to the errors we are seeing
The problem also occurs on our internal servers. Which intentionally have as little installed as necessary
We noticed the issue when using the Knime Reporting (Labs) extension. We created our views inside a component and then were trying to export the report to pdf/html. However the component suffers a concurrent timeout exception since no output was produced in the timeout window. When we then look at the views inside the component, they refuse to open or render. And at that point the event loop exception above occurs.
Any manipulation nodes using the modern UI also then fail to open, however these do usually still function if we execute the workflow.
This doesn’t happen if we disconnect from our vpn first.
And it doesn’t seem to effect any of the nodes still using the old UI.
We are running KNIME 5.1.0
Is there any other information I could give you that could help narrow it down? We have some concerns that as more nodes are switched to the modern UI, the issue may present more of a problem to us.
Hi @Camderman106,
according to our experts in that matter (which is not me):
the error log is probably not related to the dialog appearing blank. The logged error is most likely gone with the next AP release (5.2 in December)
the blank dialog problem is most likely related to a bad certificate from a proxy/vpn - can you try to set java.net.useSystemProxies=false in your knime.ini? “That will try to force the browser to do a direct connection not following the OS network configuration.”
(More details: “CEF uses the cert store from the OS, so if the store has the certificate it should validate it. It also uses the proxy configuration from the OS if any.”)
I tested that and unfortunately it didn’t affect the results.
For the avoidance of doubt I tried both adding both java.net.useSystemProxies=false
and -Djava.net.useSystemProxies=false
to the .ini file
Note that we also set the following options when trying to fix the extensions issue
I did however notice an additional detail. When I restart KNIME (on the vpn) and open the workflow, if the first thing I do is open a column filter node (which uses modern UI) then the dialog loads. And then if I execute the reporting labs component it executes successfully.
However, if I restart KNIME and attempt to do those operations the other way around, the reporting labs component fails and all the modern UI dialogs then break.
Note that in batch mode, the dialogs are never opened manually, so when the reporting labs component executes it fails. Hence why they always fail on our internal servers
This was the case during my testing today, but there must be other potential ways to trigger the dialogs to fail as it happened on a few occasions before we started using the reporting labs extension
Edit: Also, are you sure the event loop exception is unrelated? I get that error pop up again in the Error Log every time I attempt to open a broken dialog
Thank you very much, @Camderman106, for your detailed response. That’s very helpful.
Whenever you execute a reporting component, a so called ‘windowless’ (aka headless) browser is being used in order to compose/render the report html. I.e. it seems that this windowless browser in particular maybe has some issues with the vpn (or proxy/certificates). I’ll forward that insight to the experts.
However, since we have been updating the internal browser we use (called Equo Chromium) with the new AP-version (5.2.0) we are going to release in December, could you maybe try that out via our nightly build download site? Because some issues around initialization of the windows browser have been fixed recently.
It broke the links in my workflow from the component and had to re-enable reporting
Enabling this added an new input html port on my component which I cant remove. And the component wont execute without me supplying something here and I have nothing to give it. The purpose of the component is to generate the html so I don’t understand this.
All of my workflows broke because the excel readers we are using failed with the message “URI has an authority component”. The files its trying to read are on an internal server. (controlled with a flow variable), and this worked just fine before. I have confirmed that the file is accessible
Regarding your first two points: yes, that’s expected. Because the reporting-feature is still in the ‘Labs’-category, meaning it might not be 100% stable and we reserve the right to break things (of course, we try not to - but sometimes there is no way around it). In order to fix your workflow you just need to connect the ‘Report Start’-node to the component (the node allows you to define the basic report layout). Does 5.2 fix your original problem? (i.e. dialogs not showing up when a report component is executed first).
Regarding your third point: this sounds like a bug, unfortunately. Can you provide more details? Is there a stacktrace in the knime.log-file? What’s the URL you are trying to access? (doesn’t need to be the exact one - can be a resembling example)
Ahhh thanks for explaining the report start node! I understand that labs is subject to change so that’s fair enough. With your help I was able to get the component working. It was still unable to run from a full reset because the excel readers were broken, so I copied the files locally and ran it that way as a test. I then tried to recreate the dialog bug and was not able to, so that’s a success.
This doesn’t 100% mean that its solved as it was always a little bit random, but it certainly appears to be solved which is a huge relief. If this changes I will let you know
For the excel issue, the KNIME log show is below. There are no other events raised in the error log:
I need to be careful with posting the path but it looks something like: \\int\client_shares\Project\Section\Year\ExcelFile.xlsx
This is an internal server. So there is authentication involved, but my user account does have access. And it still works in 5.1.0
2023-11-20 14:47:02,501 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : reset
2023-11-20 14:47:02,501 : ERROR : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : Execute failed: URI has an authority component
java.lang.IllegalArgumentException: URI has an authority component
at java.base/java.io.File.<init>(Unknown Source)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.read.ExcelRead.resolveToLocal(ExcelRead.java:221)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.read.ExcelRead.resolveToLocalOrTempFile(ExcelRead.java:200)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.read.ExcelRead.<init>(ExcelRead.java:151)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.read.streamed.AbstractStreamedRead.<init>(AbstractStreamedRead.java:97)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.read.streamed.xlsx.XLSXRead.<init>(XLSXRead.java:94)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.ExcelTableReader.createXLSXRead(ExcelTableReader.java:200)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.ExcelTableReader.getExcelRead(ExcelTableReader.java:155)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.ExcelTableReader.readSpec(ExcelTableReader.java:117)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.ExcelTableReader.readSpec(ExcelTableReader.java:1)
at org.knime.filehandling.core.node.table.reader.DefaultMultiTableReadFactory.readIndividualSpecs(DefaultMultiTableReadFactory.java:146)
at org.knime.filehandling.core.node.table.reader.DefaultMultiTableReadFactory.create(DefaultMultiTableReadFactory.java:136)
at org.knime.filehandling.core.node.table.reader.MultiTableReader.createMultiRead(MultiTableReader.java:129)
at org.knime.filehandling.core.node.table.reader.MultiTableReader.getMultiRead(MultiTableReader.java:201)
at org.knime.filehandling.core.node.table.reader.MultiTableReader.readTable(MultiTableReader.java:166)
at org.knime.filehandling.core.node.table.reader.TableReaderNodeModel.execute(TableReaderNodeModel.java:160)
at org.knime.ext.poi3.node.io.filehandling.excel.reader.ExcelTableReaderNodeModel.execute(ExcelTableReaderNodeModel.java:106)
at org.knime.core.node.NodeModel.executeModel(NodeModel.java:588)
at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1297)
at org.knime.core.node.Node.execute(Node.java:1059)
at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:595)
at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:98)
at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:201)
at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:117)
at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:367)
at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:221)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:123)
at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:246)
2023-11-20 14:47:02,501 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : WorkflowManager : Excel Reader : 3:4 : Excel Reader 3:4 doBeforePostExecution
2023-11-20 14:47:02,501 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : NodeContainer : Excel Reader : 3:4 : Excel Reader 3:4 has new state: POSTEXECUTE
2023-11-20 14:47:02,501 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : WorkflowManager : Excel Reader : 3:4 : Excel Reader 3:4 doAfterExecute - failure
2023-11-20 14:47:02,502 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : NodeContainer : Excel Reader : 3:4 : Column Renamer 3:184 has new state: IDLE
2023-11-20 14:47:02,502 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : reset
2023-11-20 14:47:02,502 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : clean output ports.
2023-11-20 14:47:02,502 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : WorkflowDataRepository : Excel Reader : 3:4 : Removing handler e94893aa-e888-41a7-b120-610a6a0c7743 (Excel Reader 3:4: <no directory>) - 5 remaining
2023-11-20 14:47:02,502 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : NodeContainer : Excel Reader : 3:4 : Excel Reader 3:4 has new state: IDLE
2023-11-20 14:47:02,503 : WARN : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : The node configuration changed and the table spec will be recalculated during execution.
2023-11-20 14:47:02,503 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : Node : Excel Reader : 3:4 : Configure succeeded. (Excel Reader)
2023-11-20 14:47:02,503 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : NodeContainer : Excel Reader : 3:4 : Excel Reader 3:4 has new state: CONFIGURED
2023-11-20 14:47:02,505 : DEBUG : KNIME-Worker-2-Excel Reader 3:4 : : NodeContainer : Excel Reader : 3:4 : Int_Inv_NonLinked 3 has new state: IDLE
2023-11-20 14:47:15,915 : DEBUG : main : : WorkflowEditPartFactory : : : Deactivate org.knime.workbench.editor.context
2023-11-20 14:47:15,915 : DEBUG : main : : WorkflowEditPartFactory : : : Deactivate org.knime.workbench.editor.context
Happy to read that the original problem seems to be solved with 5.2! Thanks for helping us with that. And, yes, please keep us posted in case there are still some hiccups. We will most likely release the internal browser update with the next bugfix release of 5.1, too (date still to be defined).
Regarding the excel reader problem: we are looking into it and @leo_woerteler already came up with a solution (not yet merged). We’ll let you know once the fix is available in the 5.2 nightly build, if you like.