Please help. Evaluation of java snippet failed. Could not initialize class

Dear KNIME Users and Developers,

I am trying to integrate my code into KNIME workflow using JavaSnippet. I have exported the code into a jar and put it into the KNIME jre/lib/endorsed folder. The code references CDK 1.4.19 and I have also placed the corresponding jar file into the same directory. I do not have CDK node extensions installed in KNIME and using them is also not an option in my case.

The code starts with:

IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();

SmilesParser sp= new SmilesParser(builder);

When I try to execute JavaSnippet I get the following exception message:

Evaluation of java snippet failed for row "Row0". Exception message: Could not initialize class org.openscience.cdk.smiles.SmilesParser

I have read the forum and I know that some other people had the same problem( but it was of little help.

When I just try

IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();

It works and I get no exception message. I have checked, the builder is not a null. However, when I try to initialize SmilesParser, it fails. This class is public. It has no default constructor and has one public constructor that takes IChemObjectBuilder as a parameter.

I have tried to use class loader:

  URL[] classLoaderUrls = new URL[]{new URL("file:///path on my computer/knime_2.9.4/jre/lib/endorsed/cdk-1.4.19.jar")};

  URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);

  Class<?> parserClass = urlClassLoader.loadClass("org.openscience.cdk.smiles.SmilesParser");

  Class[] classParameters = new Class[] {IChemObjectBuilder.class};

  Constructor<?> constructor = parserClass.getConstructor(classParameters); //until this line there are no problems

Object parser = constructor.newInstance(builder);   //fails here with the same exception message: Could not initialize class org.openscience.cdk.smiles.SmilesParser

I am sure that this is not a CDK error because I can execute the code in Eclipse.

Why can a constructor of one class be called from KNIME without any problems and a constructor of another class can not?

I would be very grateful if you could suggest a solution or a probable reason why this exception occurs.

Thank you!