This is an automated email from the ASF dual-hosted git repository. rec pushed a commit to branch bugfix/252-Potential-failure-to-look-up-FsGenerator3-in-OSGI-like-contexts in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git
commit 2be73010c2f0cb99019549da2af53219f21e3a0e Author: Richard Eckart de Castilho <[email protected]> AuthorDate: Wed Oct 12 09:56:39 2022 +0200 Issue #252: Potential failure to look up FsGenerator3 in OSGI-like contexts - If the class to be looked up is in the FsGenerator3 package, use the classloader of FsGenerator3 --- .../org/apache/uima/internal/util/UIMAClassLoader.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java b/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java index f3c4f99af..026351463 100644 --- a/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java +++ b/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.StringTokenizer; import org.apache.uima.cas.impl.FSClassRegistry; +import org.apache.uima.cas.impl.FsGenerator3; import org.apache.uima.cas.impl.TypeSystemImpl; /** @@ -235,15 +236,23 @@ public class UIMAClassLoader extends URLClassLoader { c = findClass(name); } } catch (ClassNotFoundException e) { - // delegate class loading for this class-name - c = super.loadClass(name, false); + if (name.startsWith(FsGenerator3.class.getPackage().getName() + ".")) { + // There may be cases where the target class uses a classloader that has no access + // to the UIMA internal classes - in particular to the FSGenerator3 - so we force using + // the UIMA classloader in this case. + c = FsGenerator3.class.getClassLoader().loadClass(name); + } else { + // delegate class loading for this class-name + c = super.loadClass(name, false); + } } } + if (resolve) { resolveClass(c); } - return c; + return c; } }
