Uploaded image for project: 'Jackrabbit Content Repository'
  1. Jackrabbit Content Repository
  2. JCR-2581

Get NPE when custom node was updated

Agile BoardAttach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.0
    • None
    • jackrabbit-core, versioning
    • None
    • Windows XP
      JDK 1.5.12
      JBoss 4.2.3

    Description

      I try to upgrade jackrabbit version in my project from 1.6 to 2.0. Some things from 2.0 are very usable. Thank you all for your job. But after transition on new version i get "magic" problems. I often catch NPE exception from inside jackrabbit api. After some investigations and tests i had found one of many problems.

      What i do in my test?
      I declare custom node type in cnd file. Then register it.

      [my:test] > nt:folder
      orderable

      • myp:html (string)
        = ''
        autocreated
        copy

      Call method create.

      private void testCreate(String name, String html, CredentialsTO credentials){
      Node docRootNode;
      Session session = null;
      try

      { session = getSession(credentials); docRootNode = session.getRootNode(); Node testNode = docRootNode.addNode(name, "my:test"); testNode.setProperty("myp:html", html); testNode.addMixin("mix:versionable"); session.save(); session.getWorkspace().getVersionManager().checkin(testNode.getPath()); }

      catch (Exception e)

      { //do something }

      finally

      { logout(session); }
      }

      Then do update.

      private void testUpdate(String name, String html, CredentialsTO credentials){
      Session session = null;
      Node docRootNode;

      try { session = getSession(credentials); docRootNode = session.getRootNode(); Node testNode = docRootNode.getNode(name); session.getWorkspace().getVersionManager().checkout(testNode.getPath()); testNode.setProperty("myp:html", html); session.save(); session.getWorkspace().getVersionManager().checkin(testNode.getPath()); } catch (Exception e) { // do something } finally { logout(session); }

      }

      After last checkin in update method i always catch NullPointerException. I had connected src of jcr and jackrabbit and done some debug. This is method which throw exception in org.apache.jackrabbit.core.ItemManager.

      private boolean canRead(ItemData data, Path path) throws AccessDeniedException, RepositoryException {
      // JCR-1601: cached item may just have been invalidated
      ItemState state = data.getState();
      if (state == null)

      { throw new InvalidItemStateException(data.getId() + ": the item does not exist anymore"); }

      if (state.getStatus() == ItemState.STATUS_NEW &&
      !data.getDefinition().isProtected())

      { // THIS IS RIGHT PLACE data.getDefinition() = null // NEW items can always be read as long they have been added // through the API and NOT by the system (i.e. protected props). return true; }

      else

      { return (path == null) ? canRead(data.getId()) : session.getAccessManager().canRead(path); }

      }

      I don't understand when and why definition in NodeData can be null? This is my fault, wrong settings of repository or bug of jackrabbit?

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            travmik Stas

            Dates

              Created:
              Updated:

              Slack

                Issue deployment