[ https://issues.apache.org/jira/browse/OWB-771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13577118#comment-13577118 ]
Eric Covener commented on OWB-771: ---------------------------------- I don't think this assignment accomplishes much, the InvocationContextImpl will not be alive very much longer anyway. Unit tests and TCK don't mind -- any concerns with removing both assignments? > InvocationContextImpl cleans target field if occurs an exception > ----------------------------------------------------------------- > > Key: OWB-771 > URL: https://issues.apache.org/jira/browse/OWB-771 > Project: OpenWebBeans > Issue Type: Bug > Components: Core, Interceptor and Decorators > Affects Versions: 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7 > Reporter: Thiago Soares > Priority: Trivial > > I've done some tests using ApacheOpenWebBeans 1.1.x as the CDI implementation. > I am using a Framework (frameworkdemoiselle.gov.br) that offers an > interceptor that handles exceptions thrown by the target bean. > A summary of this interceptor is written bellow: > ========================= > @AroundInvoke > public Object manage(final InvocationContext ic) throws Exception { > Object result = null; > try { > result = ic.proceed(); > } catch (Exception cause) { > // Handle Exception here > target = ic.getTarget(); > ... > } > return result; > } > ========================= > The "Handle Exception" logic uses the target bean. The problem is that > the "ic.getTarget()" method returns null and i get a > NullPointerException. > I've done the same test using WELD and ic.getTarget() does not returns null. > Analyzing the source code of the class > "org.apache.webbeans.intercept.InvocationContextImpl" I see that it > destroys the target instance when it catches an exception. > ========================= > public Object proceed() throws Exception > { > try > { > if (type.equals(InterceptionType.AROUND_INVOKE)) > { > return proceedAroundInvokes(interceptorDatas); > } > else if (type.equals(InterceptionType.AROUND_TIMEOUT)) > { > return proceedAroundTimeouts(interceptorDatas); > } > return proceedCommonAnnots(interceptorDatas, type); > } > catch (InvocationTargetException ite) > { > target = null; // destroy target instance <<================= > // Try to provide the original exception to the interceptor stack, > // not the InvocationTargetException from Method.invoke > Throwable t = ite.getCause(); > if (t instanceof Exception) > { > throw (Exception) t; > } > throw ite; > } > catch (Exception e) > { > target = null; // destroy target instance <<================= > throw e; > } > } > ========================= > My question is: Why we need to destroy the target instance when occurs > an Exception? Doing it so, the interceptor cannot get the target after > invoking proceed() method. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira