[
https://issues.apache.org/jira/browse/SLING-4447?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Konrad Windszus updated SLING-4447:
-----------------------------------
Description:
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)
was:
Currently in case a Java class is a Sling Model (i.e. has the Model annotation)
and cannot be instanciated (e.g. required injections not possible) Sightly
falls back to instanciate those as simple Pojos.
This is never good, since a lot of NullPointerException happen then, 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
instanciated and developers more easily see why the Sling Model does not work
(instead of running into NullPointerExceptions in their model because it was
instanciated as simple
> 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
> 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)