JCRAdminTree throws NullPointerException when user has insufficient permissions
on the types node
-------------------------------------------------------------------------------------------------
Key: MGNLDATA-47
URL: http://jira.magnolia-cms.com/browse/MGNLDATA-47
Project: Magnolia Data Module
Issue Type: Improvement
Affects Versions: 1.2.1
Reporter: Edgar Vonk
Assignee: Philipp Bracher
Attachments: screenshot-3.jpg
We have a dialog with an internal link field to the data module. This dialog is
used by our editors which belong to our custom editors user role. We first had
the problem that when these users try to create the link an error screen was
shown (500 error) and the Tomcat localhost log showed:
{code}
Oct 23, 2008 2:37:23 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at
info.magnolia.module.data.trees.JCRAdminTree$1.prepareTree(JCRAdminTree.java:87)
at
info.magnolia.module.admininterface.AdminTreeMVCHandler.renderTree(AdminTreeMVCHandler.java:787)
at
info.magnolia.module.admininterface.AdminTreeMVCHandler.renderHtml(AdminTreeMVCHandler.java:751)
at info.magnolia.cms.servlets.MVCServlet.doPost(MVCServlet.java:125)
at info.magnolia.cms.servlets.MVCServlet.doGet(MVCServlet.java:69)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:162)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
at
info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:115)
at
info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:75)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:57)
at
info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:118)
at
info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:84)
at
info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
at
info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:84)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:61)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:81)
at
info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:76)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:50)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:80)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:72)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
at
info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64)
at
info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
at
info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:97)
at
info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:200)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
{code}
The problem lies in this code in the JCRAdminTree class:
{code}
Content types = ContentUtil.getContent(ContentRepository.CONFIG,
DataConsts.TYPES_NODE_PATH);
for (Iterator iter =
types.getChildren(ItemType.CONTENTNODE).iterator(); iter.hasNext();) {
{code}
When the user in question has no read access to the 'types' node the second
line results in a nullpointer. It would be nice to log a more informative
message when 'types' is null?
The solution was to provide read access to the types node in our editor role.
See screenshot.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.magnolia-cms.com/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
----------------------------------------------------------------
for list details see
http://www.magnolia-cms.com/home/community/mailing-lists.html
----------------------------------------------------------------