You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/12/14 17:49:27 UTC
svn commit: r890401 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
Author: jukka
Date: Mon Dec 14 16:49:27 2009
New Revision: 890401
URL: http://svn.apache.org/viewvc?rev=890401&view=rev
Log:
JCR-2298: NPE in EventStateCollection
Log an error and skip the REMOVE event when the old parent of a moved node is no longer available. This is not ideal, but definitely better than the current behaviour of throwing a NullPointerException.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java?rev=890401&r1=890400&r2=890401&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java Mon Dec 14 16:49:27 2009
@@ -193,6 +193,7 @@
NodeId newParentId = n.getParentId();
if (newParentId != null && !oldParentId.equals(newParentId) &&
!n.isShareable()) {
+ Path oldPath = getZombiePath(n.getNodeId(), hmgr);
// node moved
// generate node removed & node added event
@@ -204,20 +205,29 @@
// shared item state manager
oldParent = (NodeState) stateMgr.getItemState(oldParentId);
}
-
- NodeTypeImpl oldParentNodeType = getNodeType(oldParent, session);
- Set<Name> mixins = oldParent.getMixinTypeNames();
- Path newPath = getPath(n.getNodeId(), hmgr);
- Path oldPath = getZombiePath(n.getNodeId(), hmgr);
- events.add(EventState.childNodeRemoved(oldParentId,
- getParent(oldPath), n.getNodeId(),
- oldPath.getNameElement(),
- oldParentNodeType.getQName(),
- mixins, session));
+ if (oldParent != null) {
+ NodeTypeImpl oldParentNodeType = getNodeType(oldParent, session);
+ events.add(EventState.childNodeRemoved(oldParentId,
+ getParent(oldPath), n.getNodeId(),
+ oldPath.getNameElement(),
+ oldParentNodeType.getQName(),
+ oldParent.getMixinTypeNames(), session));
+ } else {
+ // JCR-2298: In some cases the old parent node
+ // state is no longer available anywhere. Log an
+ // error since in this case we can't generate the
+ // correct REMOVE event.
+ log.error(
+ "The old parent (node id " + oldParentId
+ + ") of a moved node (old path "
+ + oldPath + ") is no longer available."
+ + " No REMOVE event generated!");
+ }
NodeState newParent = (NodeState) changes.get(newParentId);
NodeTypeImpl newParentNodeType = getNodeType(newParent, session);
- mixins = newParent.getMixinTypeNames();
+ Set<Name> mixins = newParent.getMixinTypeNames();
+ Path newPath = getPath(n.getNodeId(), hmgr);
events.add(EventState.childNodeAdded(newParentId,
getParent(newPath), n.getNodeId(),
newPath.getNameElement(),