[ 
https://issues.apache.org/jira/browse/SLING-4447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14481332#comment-14481332
 ] 

Radu Cotescu commented on SLING-4447:
-------------------------------------

Besides [~sseif...@pro-vision.de]'s suggestion you should also clean the code 
in order to not use implementation classes from Sightly \[0\]\[1\].

\[0\] - 
https://github.com/apache/sling/blob/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/sightly/ModelFactoryUseProvider.java#L34
\[1\] - 
https://github.com/apache/sling/blob/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/sightly/ModelFactoryUseProvider.java#L80

> Improve JavaUseProvider to not fall back to a simple Pojo instantiation in 
> case a Java class with @Model annotation cannot be instantiated
> ------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SLING-4447
>                 URL: https://issues.apache.org/jira/browse/SLING-4447
>             Project: Sling
>          Issue Type: Improvement
>          Components: Scripting
>    Affects Versions: Scripting Sightly Engine 1.0.0
>            Reporter: Konrad Windszus
>            Assignee: Konrad Windszus
>             Fix For: Sling Models Impl 1.2.0
>
>         Attachments: SLING-4447-v01.patch
>
>
> Currently in case a Java class is a Sling Model (i.e. has the Model 
> annotation) and cannot be instantiated (e.g. required injections not 
> possible) Sightly falls back to instantiate those as simple Pojos.
> This is never good, since a lot of NullPointerException might happen because 
> all injections have not been performed then.
> Therefore in the following code should be used instead 
> {code}
> if (modelFactory.isModelClass(resource, cls)) {
>   if (modelFactory.canCreateFromAdaptable(resource, cls)) {
>     obj = modelFactory.createModel(resource, cls);
>   } else if (modelFactory.canCreateFromAdaptable(request, cls)) {
>     obj = modelFactory.createModel(request, cls);
>   } else {
>     throw new IllegalStateException("Could not adapt the given Sling Model 
> from neither resource nor request: " + cls);
>   }
> }
> {code}
> That way, exceptions would be propagated in case a Sling model cannot be 
> instantiated and developers more easily see why the Sling Model does not work 
> (instead of running into NullPointerExceptions in their model because it was 
> instantiated as simple Pojo)



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

Reply via email to