uima-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard Eckart de Castilho (JIRA)" <...@uima.apache.org>
Subject [jira] [Created] (UIMA-4793) Unable to localize exceptions when using alternative classloader
Date Thu, 11 Feb 2016 17:20:18 GMT
Richard Eckart de Castilho created UIMA-4793:

             Summary: Unable to localize exceptions when using alternative classloader
                 Key: UIMA-4793
                 URL: https://issues.apache.org/jira/browse/UIMA-4793
             Project: UIMA
          Issue Type: Bug
          Components: Core Java Framework
    Affects Versions: 2.8.1SDK
            Reporter: Richard Eckart de Castilho

If a component is initialized through a resource manager with a custom classloader, then it
may not have access to its localized exception message bundles.

The reason is, that within the classloader chain, the CL which knows about the Core UIMA framework
is at a higher level than the CL used by the resource manager that created the component.
The component CL would have access to the message bundle, but InterationalizedException uses
it's own classloader (the higher level one that knows about Core UIMA) to load message bundles:

// locate the resource bundle for this exception's messages
         // turn over the classloader of the current object explicitly, so that the
         // message resolving also works for derived exception classes
         ResourceBundle bundle = ResourceBundle.getBundle(
               getResourceBundleName(), aLocale, this.getClass()

Thread [main] (Suspended (exception MissingResourceException))	
	owns: PrintWriter  (id=92)	
	owns: ThrowableInformation  (id=93)	
	owns: ConsoleAppender  (id=94)	
	owns: RootLogger  (id=95)	
	ResourceBundle.throwMissingResourceException(String, Locale, Throwable) line: 1564	
	ResourceBundle.getBundleImpl(String, Locale, ClassLoader, ResourceBundle$Control) line: 1387

	ResourceBundle.getBundle(String, Locale, ClassLoader) line: 1082	
	AnalysisEngineProcessException(InternationalizedException).getLocalizedMessage(Locale) line:
	AnalysisEngineProcessException(InternationalizedException).getLocalizedMessage() line: 218

	AnalysisEngineProcessException(Throwable).toString() line: 480	
	String.valueOf(Object) line: 2994	
	PrintWriter.println(Object) line: 754	
	Throwable$WrappedPrintWriter.println(Object) line: 764	
line: 655	
	AnalysisEngineProcessException(Throwable).printStackTrace(PrintWriter) line: 721	
	DefaultThrowableRenderer.render(Throwable) line: 60	
	ThrowableInformation.getThrowableStrRep() line: 87	
	LoggingEvent.getThrowableStrRep() line: 413	
	ConsoleAppender(WriterAppender).subAppend(LoggingEvent) line: 313	
	ConsoleAppender(WriterAppender).append(LoggingEvent) line: 162	
	ConsoleAppender(AppenderSkeleton).doAppend(LoggingEvent) line: 251	
	AppenderAttachableImpl.appendLoopOnAppenders(LoggingEvent) line: 66	
	Logger(Category).callAppenders(LoggingEvent) line: 206	
	Logger(Category).forcedLog(String, Priority, Object, Throwable) line: 391	
	Logger(Category).log(String, Priority, Object, Throwable) line: 856	
	Log4jLogger_impl.log(Level, String, Throwable) line: 272	
	PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(CAS) line: 417	
	PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(CAS) line: 308	
	PrimitiveAnalysisEngine_impl(AnalysisEngineImplBase).process(CAS) line: 269	
	PrimitiveAnalysisEngine_impl(AnalysisEngineImplBase).process(JCas) line: 284	
	AnalysisEngine$process.call(Object, Object) line: not available	

The IMHO best way would be if UIMA would at try here to use the thread's context classloader
- and maybe that UIMA actually sets the thread context classloader to the resource manager
CL while running components... in my case, I already do that outside UIMA atm, so searching
the thread CL would be sufficient for me atm.

See also: https://issues.apache.org/jira/browse/UIMA-3692

This message was sent by Atlassian JIRA

View raw message