[ 
https://issues.apache.org/jira/browse/SLING-4220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Carsten Ziegeler closed SLING-4220.
-----------------------------------

> SlingException constructor must not call initCause
> --------------------------------------------------
>
>                 Key: SLING-4220
>                 URL: https://issues.apache.org/jira/browse/SLING-4220
>             Project: Sling
>          Issue Type: Bug
>          Components: API
>    Affects Versions: API 2.8.0
>            Reporter: Felix Meschberger
>            Assignee: Felix Meschberger
>             Fix For: API 2.9.0
>
>
> The SlingException constructors taking Throwable arguments both call 
> {{Throwable.initCause(Throwable)}} after calling the actual super-constructor.
> This dates back to Rev. 609649 (Jan. 7th, 2008!) where I added this to make 
> sure the Throwable class is initialized with the given cause. At that time 
> SlingException extended from ServletException which does not do proper Java 
> 1.4 exception chaining but implements its own chaining.
> Later with SLING-186 (Rev. 614480, Jan. 23rd, 2008) SlingException was 
> modified to extend from RuntimeException which would do proper chaining. But 
> the call to {{Throwable.initCause(Throwable)}} was not removed back then. So 
> this method is still called when a SlingException is instantiated with a 
> Throwable.
> The problem comes from the implementation of the Throwable though, which 
> throws {{IllegalStateException}} if {{initCause(Throwable)}} is called after 
> the cause has already been set.
> Throwable sets the cause field to {{this}} to indicate the cause has not been 
> set yet. But {{getCause()}} returns {{null}} both for no cause having been 
> set or the cause being {{null}}.
> If the SlingException is instantiated with a {{null}} cause, this sets the 
> {{Throwable.cause}} field to {{nul}} thus returning {{null}} on 
> {{getCause()}} thus causing the SlingException to call {{initCause}}. This in 
> turn causes {{initCause(Throwable)}} to throw {{IllegalStateException}} 
> because the cause has already been set.
> Long story short: SlingException must not call {{initCause}} because that is 
> not needed anymore since SLING-186/Rev. 614480



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to