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 mr...@apache.org on 2012/10/31 08:58:32 UTC
svn commit: r1404014 - in /jackrabbit/oak/trunk/oak-jcr/src:
main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
Author: mreutegg
Date: Wed Oct 31 07:58:32 2012
New Revision: 1404014
URL: http://svn.apache.org/viewvc?rev=1404014&view=rev
Log:
OAK-395: Inconsistency in Node#setProperty in case of null value
- return a Property instance at the location where the property was removed
- updated tests in CRUDTest accordingly
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1404014&r1=1404013&r2=1404014&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Wed Oct 31 07:58:32 2012
@@ -1450,13 +1450,17 @@ public class NodeImpl extends ItemImpl<N
return sessionDelegate.perform(new SessionOperation<Property>() {
@Override
public Property perform() throws RepositoryException {
+ String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
if (value == null) {
- Property property = getProperty(jcrName);
- property.remove();
- return property;
+ if (hasProperty(jcrName)) {
+ Property property = getProperty(jcrName);
+ property.remove();
+ return property;
+ } else {
+ return new PropertyImpl(new PropertyDelegate(
+ sessionDelegate, dlg.getLocation().getChild(oakName)));
+ }
} else {
- String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
-
PropertyDefinition definition;
if (hasProperty(jcrName)) {
definition = getProperty(jcrName).getDefinition();
@@ -1485,13 +1489,17 @@ public class NodeImpl extends ItemImpl<N
return sessionDelegate.perform(new SessionOperation<Property>() {
@Override
public Property perform() throws RepositoryException {
+ String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
if (values == null) {
- Property p = getProperty(jcrName);
- p.remove();
- return p;
+ if (hasProperty(jcrName)) {
+ Property property = getProperty(jcrName);
+ property.remove();
+ return property;
+ } else {
+ return new PropertyImpl(new PropertyDelegate(
+ sessionDelegate, dlg.getLocation().getChild(oakName)));
+ }
} else {
- String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
-
PropertyDefinition definition;
if (hasProperty(jcrName)) {
definition = getProperty(jcrName).getDefinition();
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java?rev=1404014&r1=1404013&r2=1404014&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java Wed Oct 31 07:58:32 2012
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.jcr;
+import javax.jcr.InvalidItemStateException;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
@@ -85,11 +86,13 @@ public class CRUDTest extends AbstractRe
public void testRemoveMissingProperty() throws RepositoryException {
Session session = getAdminSession();
Node root = session.getRootNode();
+ Property p = root.setProperty("missing", (String) null);
+ assertNotNull(p);
try {
- root.setProperty("missing", (String) null);
- fail("removing a missing property should fail");
- } catch (PathNotFoundException e) {
- // success
+ p.getValue();
+ fail("must throw InvalidItemStateException");
+ } catch (InvalidItemStateException e) {
+ // expected
}
}
@@ -97,11 +100,13 @@ public class CRUDTest extends AbstractRe
public void testRemoveMissingMVProperty() throws RepositoryException {
Session session = getAdminSession();
Node root = session.getRootNode();
+ Property p = root.setProperty("missing", (String[]) null);
+ assertNotNull(p);
try {
- root.setProperty("missing", (String[]) null);
- fail("removing a missing property should fail");
- } catch (PathNotFoundException e) {
- // success
+ p.getValues();
+ fail("must throw InvalidItemStateException");
+ } catch (InvalidItemStateException e) {
+ // expected
}
}