Can't the InternationalizedException class be made serializable?

On Tue, Aug 8, 2017 at 6:24 PM, Jaroslaw Cwiklik <cwik...@apache.org> wrote:

> Marshall, my current fix for the Serialization problem is kinda what you
> suggest. Since I can't Serialize this class I stringify it and
> create a RuntimeException wrapper around it. Perhaps not ideal solution but
> it is what I came up with for now.
>
> There is at least one voice opposing this fix. The objection has to do with
> being able to interpret service failures on the client side.
>
> The client code (remote process) may need to reason over the service
> failure to determine what should happen next.
> The client may want to do something like this:
>
> if ( givenDeserializedException instanceof AnalysisEngineProcessException )
> {
>     do something
> }
>
> If the exception is stringified the above is not possible. So I think
> message bundles is one issue and be able to serialize
> this class is another.
>
> Jerry
>
>
> On Tue, Aug 8, 2017 at 5:58 PM, Richard Eckart de Castilho (JIRA) <
> dev@uima.apache.org> wrote:
>
> >
> >     [ https://issues.apache.org/jira/browse/UIMA-4793?page=
> > com.atlassian.jira.plugin.system.issuetabpanels:comment-
> > tabpanel&focusedCommentId=16119085#comment-16119085 ]
> >
> > Richard Eckart de Castilho commented on UIMA-4793:
> > --------------------------------------------------
> >
> > > A better design, it seems to me, is to convert messages that need to be
> > serialized to another environment to a form that doesn't use a message
> > bundle (the message bundle lookup already having been performed in the
> > serializing environment).
> >
> > That would of course assume that the source environment and the target
> > environment have the same locale.
> >
> > > 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
> > >            Assignee: Marshall Schor
> > >             Fix For: 2.9.0SDK, 3.0.0SDK-alpha
> > >
> > >
> > > 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:
> > > {noformat}
> > > // 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()
> > >                      .getClassLoader());
> > > {noformat}
> > > {noformat}
> > > 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: 240
> > >       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
> > >       AnalysisEngineProcessException(Throwable).printStackTrace(
> Throwable$PrintStreamOrWriter)
> > 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
> > > ...
> > > {noformat}
> > > 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
> > (v6.4.14#64029)
> >
>

Reply via email to