You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/04/01 10:01:23 UTC

svn commit: r1583562 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java

Author: mduerig
Date: Tue Apr  1 08:01:23 2014
New Revision: 1583562

URL: http://svn.apache.org/r1583562
Log:
OAK-1652: Incorrect name mapping in NodeObserver

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java?rev=1583562&r1=1583561&r2=1583562&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java Tue Apr  1 08:01:23 2014
@@ -26,7 +26,6 @@ import java.util.Set;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.jcr.RepositoryException;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -119,37 +118,45 @@ public abstract class NodeObserver imple
 
     @Override
     public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo info) {
-        try {
-            if (previousRoot != null) {
-                NamePathMapper namePathMapper = new NamePathMapperImpl(
-                        new GlobalNameMapper(new ImmutableRoot(root)));
-
-                Set<String> oakPropertyNames = Sets.newHashSet();
-                for (String name : propertyNames) {
-                    oakPropertyNames.add(namePathMapper.getJcrName(name));
-                }
-                NodeState before = previousRoot;
-                NodeState after = root;
-                EventHandler handler = new FilteredHandler(
-                        new VisibleFilter(),
-                        new NodeEventHandler("/", info, namePathMapper, oakPropertyNames));
-                for (String name : PathUtils.elements(path)) {
-                    String oakName = namePathMapper.getOakName(name);
-                    before = before.getChildNode(oakName);
-                    after = after.getChildNode(oakName);
-                    handler = handler.getChildHandler(oakName, before, after);
-                }
+        if (previousRoot != null) {
+            NamePathMapper namePathMapper = new NamePathMapperImpl(
+                    new GlobalNameMapper(new ImmutableRoot(root)));
 
-                EventGenerator generator = new EventGenerator(before, after, handler);
-                while (!generator.isDone()) {
-                    generator.generate();
+            Set<String> oakPropertyNames = Sets.newHashSet();
+            for (String name : propertyNames) {
+                String oakName = namePathMapper.getOakNameOrNull(name);
+                if (oakName == null) {
+                    LOG.warn("Ignoring invalid property name: {}", name);
+                } else {
+                    oakPropertyNames.add(oakName);
                 }
             }
 
-            previousRoot = root;
-        } catch (RepositoryException e) {
-            LOG.warn("Error while handling content change", e);
+            NodeState before = previousRoot;
+            NodeState after = root;
+            EventHandler handler = new FilteredHandler(
+                    new VisibleFilter(),
+                    new NodeEventHandler("/", info, namePathMapper, oakPropertyNames));
+
+            String oakPath = namePathMapper.getOakPath(path);
+            if (oakPath == null) {
+                LOG.warn("Cannot listen for changes on invalid path: {}", path);
+                return;
+            }
+
+            for (String oakName : PathUtils.elements(oakPath)) {
+                before = before.getChildNode(oakName);
+                after = after.getChildNode(oakName);
+                handler = handler.getChildHandler(oakName, before, after);
+            }
+
+            EventGenerator generator = new EventGenerator(before, after, handler);
+            while (!generator.isDone()) {
+                generator.generate();
+            }
         }
+
+        previousRoot = root;
     }
 
     private enum EventType {ADDED, DELETED, CHANGED}