You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Konrad Windszus (Jira)" <ji...@apache.org> on 2020/02/19 11:13:00 UTC

[jira] [Comment Edited] (SLING-8079) Returning false in a model PostConstruct causes an java.lang.IllegalStateException

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

Konrad Windszus edited comment on SLING-8079 at 2/19/20 11:12 AM:
------------------------------------------------------------------

Hi, I'm having the same issue using resource.adaptTo, as Santiago says createObject method doesn't expect a null value, so therefore it returns new Result(object) (being object null) and therefore, in the method getAdapter when doing log.warn("Could not adapt to model", result.getThrowable()); it returns this no throwable available. I would suggest to either:
 * At invokePostConstruct to return an object of a new.custom exception, like ModelClassException
 * At createObject if object is null (line 644) return a new Result with a new Exception class 

 

Here is the stacktrace of my log:
{code}
19.02.2020 10:08:02.880 *WARN* [10.43.0.13 [1582103173233] GET /content/europe/master/en/bikes-and-vehicles/supersport_and_sport/ninja-zx-10r-krt-replica.html HTTP/1.1] org.apache.sling.models.impl.ModelAdapterFactory Could not adapt to model
java.lang.IllegalStateException: No throwable available
	at org.apache.sling.models.impl.Result.getThrowable(Result.java:61) [org.apache.sling.models.impl:1.4.7.T20180205124646-b0647a3]
	at org.apache.sling.models.impl.ModelAdapterFactory.getAdapter(ModelAdapterFactory.java:251) [org.apache.sling.models.impl:1.4.7.T20180205124646-b0647a3]
	at org.apache.sling.adapter.internal.AdapterManagerImpl.getAdapter(AdapterManagerImpl.java:143) [org.apache.sling.adapter:2.1.10]
	at org.apache.sling.api.adapter.SlingAdaptable.adaptTo(SlingAdaptable.java:104) [org.apache.sling.api:2.16.4]
	at org.apache.sling.jcr.resource.internal.helper.jcr.JcrNodeResource.adaptTo(JcrNodeResource.java:156) [org.apache.sling.jcr.resource:3.0.8]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.createFeature(CompleteProductItem.java:99) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.setFeatures(CompleteProductItem.java:87) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.enrichProduct(CompleteProductItem.java:72) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.enrichProductInformation(CompleteProductItem.java:66) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.AbstractProductItem.<init>(AbstractProductItem.java:145) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.AbstractProductItem.<init>(AbstractProductItem.java:176) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
{code}


was (Author: eric.jaen):
Hi, I'm having the same issue using resource.adaptTo, as Santiago says createObject method doesn't expect a null value, so therefore it returns new Result(object) (being object null) and therefore, in the method getAdapter when doing log.warn("Could not adapt to model", result.getThrowable()); it returns this no throwable available. I would suggest to either:
 * At invokePostConstruct to return an object of a new.custom exception, like ModelClassException
 * At createObject if object is null (line 644) return a new Result with a new Exception class 

 

Here is the stacktrace of my log:
19.02.2020 10:08:02.880 *WARN* [10.43.0.13 [1582103173233] GET /content/europe/master/en/bikes-and-vehicles/supersport_and_sport/ninja-zx-10r-krt-replica.html HTTP/1.1] org.apache.sling.models.impl.ModelAdapterFactory Could not adapt to model
java.lang.IllegalStateException: No throwable available
	at org.apache.sling.models.impl.Result.getThrowable(Result.java:61) [org.apache.sling.models.impl:1.4.7.T20180205124646-b0647a3]
	at org.apache.sling.models.impl.ModelAdapterFactory.getAdapter(ModelAdapterFactory.java:251) [org.apache.sling.models.impl:1.4.7.T20180205124646-b0647a3]
	at org.apache.sling.adapter.internal.AdapterManagerImpl.getAdapter(AdapterManagerImpl.java:143) [org.apache.sling.adapter:2.1.10]
	at org.apache.sling.api.adapter.SlingAdaptable.adaptTo(SlingAdaptable.java:104) [org.apache.sling.api:2.16.4]
	at org.apache.sling.jcr.resource.internal.helper.jcr.JcrNodeResource.adaptTo(JcrNodeResource.java:156) [org.apache.sling.jcr.resource:3.0.8]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.createFeature(CompleteProductItem.java:99) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.setFeatures(CompleteProductItem.java:87) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.enrichProduct(CompleteProductItem.java:72) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.CompleteProductItem.enrichProductInformation(CompleteProductItem.java:66) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.AbstractProductItem.<init>(AbstractProductItem.java:145) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]
	at eu.kawasaki.aem.website.commerce.models.AbstractProductItem.<init>(AbstractProductItem.java:176) [eu.kawasaki.aem.website.components.kaw-website-components-core:2.1.2]

> 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)