The AdapterFactory should clearly state, which RuntimeExceptions are thrown 
under which condition. You know in most of the cases, which AdapterFactory is 
responsible for your adaptTo-method (or you should be able to find out with the 
web console)
Handling in some cases is more than simple logging. The AEM6 
WCMDeveloperModeFilter is a good example for another error treatment (catching 
the error within a servlet filter and then exposing via the Web UI).

On 03 Jul 2014, at 12:19, Felix Meschberger <fmesc...@adobe.com> wrote:

> Hi
> 
> Am 03.07.2014 um 11:10 schrieb Konrad Windszus <konra...@gmx.de>:
> 
>> 
>> On 03 Jul 2014, at 10:50, Alexander Klimetschek <aklim...@adobe.com> wrote:
>> 
>>> 
>>> I guess it would make sense to have adapterfactories et. al. to work like 
>>> this:
>>> a) if it is not of the desired type, i.e. cannot semantically be adapted, 
>>> return null
> 
> example: resource.adaptTo(Node.class) for a resource not backed by a JCR Node 
> instance.
> 
>>> b) if it fails due to some actual exception, throw a runtimexception
> 
> example: resource.adaptTo(Comment.class) when the required data to setup the 
> Comment instance cannot be read from persistence or the data is inconsistent 
> and thus a consistent Comment instance cannot be provided.
> 
>> 
>> I would be fine with that approach. So the only change is a clarification in 
>> the Javadocs that adaptTo in fact may throw a RuntimeException (if the 
>> AdapterFactory has thrown an exception) and also that AdapterFactory may 
>> throw a RuntimeException.
> 
> The question always remains: Do you expect the caller to handle this 
> exception in some way or another ? Also, what exception can be expected by 
> the client (you don't want to catch RuntimeException, do you ?) ? and what 
> does it mean ?
> 
> If handling just is catching and logging, there is no use in throwing in the 
> first place — better immediately log and return some decent value that client 
> can cope with, which in the case of adaptTo is just null (as documented). 
> Plus: the boiler plate to catch and log is more complicated and convoluted 
> than the boiler plate for the null check.
> 
> Regards
> Felix
> 
> 
>> As Felix Meschberger already pointed out, neither the SlingAdaptable nor the 
>> AdapterManager currently catch any exceptions so that would work already 
>> with existing code and Sling Models could start right away throwing 
>> RuntimeExceptions for validation purposes.
>> 
>>> 
>>> But not sure if that will work.
>>> 
>>> Cheers,
>>> Alex
>> 
> 

Reply via email to