[ https://issues.apache.org/jira/browse/UIMA-5529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jerry Cwiklik updated UIMA-5529: -------------------------------- 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. was: 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 fixed 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 serialization of the Exception object and instead using this: StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); serializedCause = sw.toString(); where t = AnalysisEngineProcessException The entire stack trace is captured as String, wrapped in 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. > DUCC: Serialization of AnalysisEngineProcessException fails in JP > ----------------------------------------------------------------- > > Key: UIMA-5529 > URL: https://issues.apache.org/jira/browse/UIMA-5529 > Project: UIMA > Issue Type: Bug > Components: DUCC > Reporter: Jerry Cwiklik > Assignee: Jerry Cwiklik > Fix For: 2.1.0-Ducc > > > 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. -- This message was sent by Atlassian JIRA (v6.4.14#64029)