Uploaded image for project: 'Magnolia Data Module (closed)'
  1. Magnolia Data Module (closed)
  2. MGNLDATA-47

JCRAdminTree throws NullPointerException when user has insufficient permissions on the types node

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Obsolete
    • Icon: Major Major
    • 1.3
    • 1.2.1
    • None

      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:

      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)
      

      The problem lies in this code in the JCRAdminTree class:

      Content types = ContentUtil.getContent(ContentRepository.CONFIG, DataConsts.TYPES_NODE_PATH);
                      for (Iterator iter = types.getChildren(ItemType.CONTENTNODE).iterator(); iter.hasNext();) {
      

      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.

        Acceptance criteria

              had Jan Haderka
              edgar Edgar Vonk
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: