You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by travmik <tr...@gmail.com> on 2010/03/15 13:10:02 UTC

NPE when i update custom node

Hi all

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? 

Thx all.
-- 
View this message in context: http://n4.nabble.com/NPE-when-i-update-custom-node-tp1593270p1593270.html
Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.