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 an...@apache.org on 2012/10/25 12:36:21 UTC
svn commit: r1402087 - 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: angela
Date: Thu Oct 25 10:36:21 2012
New Revision: 1402087
URL: http://svn.apache.org/viewvc?rev=1402087&view=rev
Log:
OAK-395 : Inconsistency in Node#setProperty in case of null value
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=1402087&r1=1402086&r2=1402087&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 Thu Oct 25 10:36:21 2012
@@ -302,19 +302,20 @@ public class NodeImpl extends ItemImpl<N
* @see Node#setProperty(String, javax.jcr.Value, int)
*/
@Override
- @CheckForNull
+ @Nonnull
public Property setProperty(final String jcrName, final Value value, final int type)
throws RepositoryException {
checkStatus();
- return sessionDelegate.perform(new SessionOperation<PropertyImpl>() {
+ return sessionDelegate.perform(new SessionOperation<Property>() {
@Override
- public PropertyImpl perform() throws RepositoryException {
- String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
+ public Property perform() throws RepositoryException {
if (value == null) {
- dlg.removeProperty(oakName);
- return null;
+ Property property = getProperty(jcrName);
+ property.remove();
+ return property;
} else {
+ String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
int targetType = getTargetType(value, type);
Value targetValue =
ValueHelper.convert(value, targetType, getValueFactory());
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=1402087&r1=1402086&r2=1402087&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 Thu Oct 25 10:36:21 2012
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.jcr;
import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
@@ -24,7 +25,9 @@ import javax.jcr.Session;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
public class CRUDTest extends AbstractRepositoryTest {
@@ -55,10 +58,51 @@ public class CRUDTest extends AbstractRe
}
@Test
+ public void testRemoveBySetProperty() throws RepositoryException {
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+ try {
+ root.setProperty("test", "abc");
+ assertNotNull(root.setProperty("test", (String) null));
+ } catch (PathNotFoundException e) {
+ // success
+ }
+ }
+
+ @Test
+ public void testRemoveBySetMVProperty() throws RepositoryException {
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+ try {
+ root.setProperty("test", new String[] {"abc", "def"});
+ assertNotNull(root.setProperty("test", (String[]) null));
+ } catch (PathNotFoundException e) {
+ // success
+ }
+ }
+
+ @Test
public void testRemoveMissingProperty() throws RepositoryException {
Session session = getAdminSession();
Node root = session.getRootNode();
- root.setProperty("missing", (String) null);
+ try {
+ root.setProperty("missing", (String) null);
+ fail("removing a missing property should fail");
+ } catch (PathNotFoundException e) {
+ // success
+ }
+ }
+
+ @Test
+ public void testRemoveMissingMVProperty() throws RepositoryException {
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+ try {
+ root.setProperty("missing", (String[]) null);
+ fail("removing a missing property should fail");
+ } catch (PathNotFoundException e) {
+ // success
+ }
}
@Test