You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Jerry Cwiklik (JIRA)" <de...@uima.apache.org> on 2017/08/08 19:10:00 UTC
[jira] [Updated] (UIMA-5529) DUCC: Serialization of
AnalysisEngineProcessException fails in JP
[ 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)