From d7b5707df6f6f4eac346832b36ccc59fdec4fcb5 Mon Sep 17 00:00:00 2001 From: Daniel Esser Date: Mon, 17 Nov 2025 16:23:26 +0100 Subject: [PATCH 1/4] Silently catch exception when initiating node --- .../jsondocgen/JsonNodeDocuGenerator.java | 15 ++-- .../knime/jsondocgen/docs/CategoryDoc.java | 4 + ...ocuGeneratorTest_NoClassDefFound_Test.java | 75 +++++++++++++++++++ 3 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NoClassDefFound_Test.java diff --git a/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java b/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java index 6ca489d..520fd5f 100644 --- a/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java +++ b/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java @@ -464,8 +464,9 @@ private static void processPorts(Collection> portObj * been skipped */ @SuppressWarnings({ "restriction", "unchecked" }) - private boolean generate(final IRepositoryObject current, final IRepositoryObject parent, - CategoryDocBuilder parentCategory, Set hiddenNodeFactoryIds) throws TransformerException, Exception { + /* package */ boolean generate(final IRepositoryObject current, final IRepositoryObject parent, + CategoryDocBuilder parentCategory, Set hiddenNodeFactoryIds) + throws TransformerException, Exception { if (current instanceof NodeTemplate nodeTemplate) { @@ -514,14 +515,14 @@ private boolean generate(final IRepositoryObject current, final IRepositoryObjec List dynamicOutPorts = getDynamicPorts(factory, PortDirection.Out); builder.setDynamicInPorts(mergeDynamicPortInfo(builder.build().dynamicInPorts, dynamicInPorts, current.getID())); builder.setDynamicOutPorts(mergeDynamicPortInfo(builder.build().dynamicOutPorts, dynamicOutPorts, current.getID())); + + Node node = new Node((NodeFactory) factory); + var nodeDescription = node.invokeGetNodeDescription(); + builder.setKeywords(Arrays.asList(nodeDescription.getKeywords())); + builder.setSinceVersion(nodeDescription.getSinceVersion().map(v -> v.toString()).orElse(null)); } catch (Throwable t) { LOGGER.warn(String.format("Could not create NodeModel for %s", factory.getClass().getName()), t); } - - Node node = new Node((NodeFactory) factory); - var nodeDescription = node.invokeGetNodeDescription(); - builder.setKeywords(Arrays.asList(nodeDescription.getKeywords())); - builder.setSinceVersion(nodeDescription.getSinceVersion().map(v -> v.toString()).orElse(null)); builder.setHasModernDialog(hasModernDialog(factory)); // since KNIME 5.5; https://github.com/knime/knime-core-ui/commit/8769e99ab4df0a435fb90936d664fdc6c6ac2b6d diff --git a/application/src/de/philippkatz/knime/jsondocgen/docs/CategoryDoc.java b/application/src/de/philippkatz/knime/jsondocgen/docs/CategoryDoc.java index 2eb5d3f..d93d779 100644 --- a/application/src/de/philippkatz/knime/jsondocgen/docs/CategoryDoc.java +++ b/application/src/de/philippkatz/knime/jsondocgen/docs/CategoryDoc.java @@ -59,5 +59,9 @@ public Set getAllContributingPlugins() { } return result; } + + public List getNodes() { + return nodes; + } } diff --git a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NoClassDefFound_Test.java b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NoClassDefFound_Test.java new file mode 100644 index 0000000..86f099b --- /dev/null +++ b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NoClassDefFound_Test.java @@ -0,0 +1,75 @@ +package de.philippkatz.knime.jsondocgen; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Collections; + +import javax.xml.transform.TransformerException; + +import org.junit.Test; +import org.knime.core.node.NodeDialogPane; +import org.knime.core.node.NodeFactory; +import org.knime.core.node.NodeModel; +import org.knime.core.node.NodeView; +import org.knime.core.node.NodeFactory.NodeType; +import org.knime.workbench.repository.RepositoryManager; +import org.knime.workbench.repository.model.DefaultNodeTemplate; +import org.knime.workbench.repository.model.IRepositoryObject; + +import de.philippkatz.knime.jsondocgen.docs.CategoryDoc.CategoryDocBuilder; + +public class JsonNodeDocuGeneratorTest_NoClassDefFound_Test { + + public static class MyNodeFactory extends NodeFactory { + + @Override + public NodeModel createNodeModel() { + throw new NoClassDefFoundError("org/RDKit/ROMol"); + } + + @Override + protected int getNrNodeViews() { + return 0; + } + + @Override + public NodeView createNodeView(int viewIndex, NodeModel nodeModel) { + return null; + } + + @Override + protected boolean hasDialog() { + return false; + } + + @Override + protected NodeDialogPane createNodeDialogPane() { + return null; + } + + } + + @SuppressWarnings("unchecked") + @Test + public void test() throws TransformerException, Exception { + var parentCategory = new CategoryDocBuilder(); + var parent = RepositoryManager.INSTANCE.getRoot(); + NodeFactory factory = new MyNodeFactory(); + var current = new DefaultNodeTemplate( // + (Class>) factory.getClass(), // + "Bad Node", // + "de.philippkatz.knime.nodes.plugin", // + "/", // + NodeType.Other); + + var result = new JsonNodeDocuGenerator().generate(current, parent, parentCategory, Collections.emptySet()); + + assertTrue(result); + + var nodes = parentCategory.build().getNodes(); + assertEquals(1, nodes.size()); + assertEquals("Bad Node", nodes.get(0).name); + } + +} From 0d3d9f1201a4a0bdaf0c359bd9a148d39af46a9d Mon Sep 17 00:00:00 2001 From: Daniel Esser Date: Mon, 17 Nov 2025 16:23:43 +0100 Subject: [PATCH 2/4] Set XstartOnFirstThread in tests --- pom.xml | 15 +++++++++++++++ tests/pom.xml | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/pom.xml b/pom.xml index 07ea0db..5b82810 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ + 4.0.8 UTF-8 @@ -87,4 +88,18 @@ + + + macosx-jvm-flags + + + mac + + + + -XstartOnFirstThread + + + + diff --git a/tests/pom.xml b/tests/pom.xml index 0ecc6df..c769b48 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -31,6 +31,14 @@ + + org.eclipse.tycho + tycho-surefire-plugin + ${tycho-version} + + ${eclipserun.jvm.flags} + + From 0fb445fc31c563d322d2a82219809d8d7d20b1f1 Mon Sep 17 00:00:00 2001 From: Daniel Esser Date: Mon, 17 Nov 2025 17:30:12 +0100 Subject: [PATCH 3/4] Use Xvfb --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fca6f23..82b4caa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,8 +21,11 @@ jobs: path: ~/.m2 key: 'm2-cache' + - name: Install Xvfb + run: sudo apt-get update && sudo apt-get install -y xvfb libgtk-3-0 + - name: Build - run: mvn -V -B clean install + run: xvfb-run -a mvn -V -B clean install - name: Publish to NodePit # https://stackoverflow.com/questions/58139406/only-run-job-on-specific-branch-with-github-actions From b339b4ce62e306a4ddc4b9763b69ee4261b675ed Mon Sep 17 00:00:00 2001 From: Daniel Esser Date: Mon, 17 Nov 2025 17:39:27 +0100 Subject: [PATCH 4/4] Bump to 1.16.1 --- application/META-INF/MANIFEST.MF | 2 +- application/pom.xml | 4 ++-- feature/feature.xml | 2 +- feature/pom.xml | 4 ++-- p2/pom.xml | 4 ++-- pom.xml | 4 ++-- targetplatform/pom.xml | 2 +- tests/META-INF/MANIFEST.MF | 4 ++-- tests/pom.xml | 4 ++-- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/application/META-INF/MANIFEST.MF b/application/META-INF/MANIFEST.MF index bd370b6..343530e 100644 --- a/application/META-INF/MANIFEST.MF +++ b/application/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JSON node documentation generator Bundle-SymbolicName: de.philippkatz.knime.jsondocgen.application;singleton:=true -Bundle-Version: 1.16.0.qualifier +Bundle-Version: 1.16.1.qualifier Bundle-Vendor: Philipp Katz; Selenium Nodes Bundle-RequiredExecutionEnvironment: JavaSE-17 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.6.0,5.0.0)", diff --git a/application/pom.xml b/application/pom.xml index 0df1c87..695522a 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.application - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT eclipse-plugin de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT diff --git a/feature/feature.xml b/feature/feature.xml index 504f959..cd38e73 100644 --- a/feature/feature.xml +++ b/feature/feature.xml @@ -2,7 +2,7 @@ 4.0.0 de.philippkatz.knime.jsondocgen.feature - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT eclipse-feature de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT diff --git a/p2/pom.xml b/p2/pom.xml index 3b5a611..1a22d81 100644 --- a/p2/pom.xml +++ b/p2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.p2 - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT eclipse-repository de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT diff --git a/pom.xml b/pom.xml index 5b82810..422c2e2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT pom @@ -40,7 +40,7 @@ de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen.targetplatform - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT diff --git a/targetplatform/pom.xml b/targetplatform/pom.xml index 8a8dbab..5627b26 100644 --- a/targetplatform/pom.xml +++ b/targetplatform/pom.xml @@ -9,7 +9,7 @@ de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT diff --git a/tests/META-INF/MANIFEST.MF b/tests/META-INF/MANIFEST.MF index 8ff1515..0f89279 100644 --- a/tests/META-INF/MANIFEST.MF +++ b/tests/META-INF/MANIFEST.MF @@ -2,8 +2,8 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JSON node documentation generator tests Bundle-SymbolicName: de.philippkatz.knime.jsondocgen.tests;singleton:=true -Bundle-Version: 1.16.0.qualifier +Bundle-Version: 1.16.1.qualifier Bundle-Vendor: Philipp Katz; Selenium Nodes Bundle-RequiredExecutionEnvironment: JavaSE-17 -Fragment-Host: de.philippkatz.knime.jsondocgen.application;bundle-version="1.16.0" +Fragment-Host: de.philippkatz.knime.jsondocgen.application;bundle-version="1.16.1" Require-Bundle: org.junit;bundle-version="4.12.0" diff --git a/tests/pom.xml b/tests/pom.xml index c769b48..f12c7bf 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.tests - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT eclipse-test-plugin de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.16.0-SNAPSHOT + 1.16.1-SNAPSHOT