Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
If AE process() fails, the JP tries to serialize the exception before sending it to the JD. The AE throws a UIMA core AnalysisEngineProcessException which fails to serialize with:
java.io.NotSerializableException: sun.misc.Launcher$AppClassLoader
It turns out that this is caused by changes made to the InternationalizedException class as described in JIRA https://issues.apache.org/jira/browse/UIMA-4793
The fix discussed in the JIRA broke serialization of uima exceptions. The InternationalizedException class contains a member variable of type ClassLoader which is not Serializable.
For Ducc, the fix is to avoid Object serialization of the AnalysisEngineProcessException and use this instead:
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
serializedCause = sw.toString();
where t = AnalysisEngineProcessException
The entire stack trace is captured as a String then wrapped in a java RuntimeException and sent to the JD for logging.
Also, add a new job to the DUCC_HOME/example/simple 1-error.job which forces AE to throw an error.