In my component's JSP, if I want to reference the current page node using "currentNode" object, it throws a NullPointerException and the whole component then throws a ScriptEvaluationException
My component JSP does have the 'global.jsp' included at the top.
Also, the component throws these exceptions only in a particular site. It works fine in others.
What possible could be the reason for this ? In what conditions does the "currentNode" object be NULL ?
Solved! Go to Solution.
Views
Replies
Total Likes
Riju Mahana wrote...
I didn't understand the bit "isn't adaptable to a JCR Node object". AFAIK, when we add a component using <cq:include> , it is added to the JCR below the page.
Nope. If you pass a path to <cq:include> which doesn't exist, nothing is added to the JCR (this would represent a security issue). Rather a synthetic resource is created. Since it isn't a JCR Node, it can't be adapted to the node.
My main concern is to get a Query Object for my search component. I need to use
- currentNode.getSession().getWorkspace().getQueryManager().createQuery()
in my component. With CurrentNode being null,. Is there any other way to get it done ?
resourceResolver.adaptTo(Session.class).getWorkspace().getQueryManager().createQuery() would be the correct way to do this.
Better yet would be to stay entirely in the Sling API:
Iterator<Resource> queryResults = resourceResolver.findResources(stmt, language);
Views
Replies
Total Likes
currentNode could be null if the current resource isn't adaptable to a JCR Node object, i.e. if it was from a different Resource Provider
Views
Replies
Total Likes
Hi Riju,
Can you provide the stacktrace?
Views
Replies
Total Likes
I didn't understand the bit "isn't adaptable to a JCR Node object". AFAIK, when we add a component using <cq:include> , it is added to the JCR below the page.
My main concern is to get a Query Object for my search component. I need to use
currentNode.getSession().getWorkspace().getQueryManager().createQuery()
in my component. With CurrentNode being null,. Is there any other way to get it done ?
Views
Replies
Total Likes
I've attached the stacktrace. The gist is below:
Line 72 of my component is:
Query query = currentNode.getSession().getWorkspace().getQueryManager().createQuery(stmt, Query.SQL);
--------------------------------
com.day.cq.wcm.core.impl.WCMDebugFilter Error during include of SlingRequestPathInfo: path='/content/mysite/en/insights/jcr:content/mysearch', selectorString='null', extension='html', suffix='null' org.apache.sling.api.scripting.ScriptEvaluationException: An exception occurred processing JSP page /apps/mysite/components/insights/LandingSearch/LandingSearch.jsp at line 72
....
Caused by: org.apache.sling.api.SlingException: An exception occurred processing JSP page /apps/mysite/components/insights/LandingSearch/LandingSearch.jsp at line 72
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspExceptionInternal(JspServletWrapper.java:683)
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:608)
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:533)
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:449)
at org.apache.sling.scripting.jsp.JspScriptEngineFactory.callJsp(JspScriptEngineFactory.java:241)
at org.apache.sling.scripting.jsp.JspScriptEngineFactory.access$100(JspScriptEngineFactory.java:86)
at org.apache.sling.scripting.jsp.JspScriptEngineFactory$JspScriptEngine.eval(JspScriptEngineFactory.java:441)
at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:361)
... 157 more
Caused by: java.lang.NullPointerException
at org.apache.jsp.apps.mysite.components.insights.LandingSearch.LandingSearch_jsp._jspService(LandingSearch_jsp.java:223)
at org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:502)
... 162 more
Views
Replies
Total Likes
Riju Mahana wrote...
I didn't understand the bit "isn't adaptable to a JCR Node object". AFAIK, when we add a component using <cq:include> , it is added to the JCR below the page.
Nope. If you pass a path to <cq:include> which doesn't exist, nothing is added to the JCR (this would represent a security issue). Rather a synthetic resource is created. Since it isn't a JCR Node, it can't be adapted to the node.
My main concern is to get a Query Object for my search component. I need to use
- currentNode.getSession().getWorkspace().getQueryManager().createQuery()
in my component. With CurrentNode being null,. Is there any other way to get it done ?
resourceResolver.adaptTo(Session.class).getWorkspace().getQueryManager().createQuery() would be the correct way to do this.
Better yet would be to stay entirely in the Sling API:
Iterator<Resource> queryResults = resourceResolver.findResources(stmt, language);
Views
Replies
Total Likes
Could you use this for the session instead ?
Session session = resource.getResourceResolver().adaptTo(Session.class);
/Johan
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies