[
https://issues.apache.org/jira/browse/SLING-8079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17039980#comment-17039980
]
Justin Edelson commented on SLING-8079:
---------------------------------------
[~kwin] What I would suggest is to have {{invokePostConstruct}} return a
special (constant) {{Result}} object (let's say called {{NULL}}) which then the
methods which use the {{Result}} object could check for to determine what to
return/throw/log (which yes, would mean {{invokePostConstruct}} returning a
{{Result}} object rather than it being constructed in {{createObject}}). In the
case of {{getAdapter}} this should be logged and {{null}} returned. In the case
of {{createModel}}, an exception should be thrown -- there's also some other
cases (like adapting an injected field object). But IMO throwing an exception
internally smells like using an exception for control flow and it would be best
to somehow represent this state explicitly.
> Returning false in a model PostConstruct causes an
> java.lang.IllegalStateException
> ----------------------------------------------------------------------------------
>
> Key: SLING-8079
> URL: https://issues.apache.org/jira/browse/SLING-8079
> Project: Sling
> Issue Type: Bug
> Components: Sling Models
> Affects Versions: Sling Models Impl 1.4.6
> Reporter: Santiago García Pimentel
> Priority: Major
> Fix For: Sling Models Impl 1.4.14
>
>
> I was just trying the exporter framework and the feature from SLING-7124,
> where you can return false in a post construct to prevent a model to being
> returned.
> Unfortunately I found myself with an IllegalStateException:
>
> {quote}java.lang.IllegalStateException: No throwable available at
> org.apache.sling.models.impl.Result.getThrowable(Result.java:61) at
> org.apache.sling.models.impl.ModelAdapterFactory.createModel(ModelAdapterFactory.java:316)
> at
> org.apache.sling.models.impl.ExportServlet$RequestAccessor.getExportedString(ExportServlet.java:202)
> at org.apache.sling.models.impl.ExportServlet.doGet(ExportServlet.java:106)
> at
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:266)
> at
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342)
> at
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374)
> at
> org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552){quote}
> It seems like the ModelAdapterFactory assumes that there should be an
> exception if a model was not returned, which is no longer the case. I don't
> think this exception should be thrown.
> The easiest solution I think is to make o.a.s.models.impl.Result not throw
> that exception and let the ModelAdapterFactory handle it, but Im not sure
> that would the be most appropriate way.
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)