Merge branch 'master' into feature/update-to-parent40
diff --git a/pom.xml b/pom.xml
index ca7f3ac..ef4c393 100644
--- a/pom.xml
+++ b/pom.xml
@@ -194,18 +194,18 @@
<!-- Testing -->
<dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.testing</artifactId>
- <version>2.0.24</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
<version>2.6.2</version>
@@ -222,6 +222,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ <version>2.12.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit-addons</groupId>
<artifactId>junit-addons</artifactId>
<version>1.4</version>
@@ -233,6 +239,11 @@
<version>2.1.10-1.16.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java b/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
index a6d3734..37467ab 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
@@ -455,13 +455,21 @@
node.setProperty(name, entry.convertToType(Value.class, node, this.helper.getDynamicClassLoader()));
}
} catch (final RepositoryException re) {
- throw new IllegalArgumentException("Value for key " + key + " can't be put into node: " + value, re);
+ throw new IllegalArgumentException("Value '"+ value + "' for property '" + key + "' can't be put into node '" + getNodePath(node) + "'.", re);
}
this.valueCache.put(key, value);
return oldValue;
}
+ static String getNodePath(Node node) {
+ try {
+ return node.getPath();
+ } catch (RepositoryException e) {
+ return "Could not get node path: "+ e.getMessage();
+ }
+ }
+
/**
* @see java.util.Map#putAll(java.util.Map)
*/
@@ -492,7 +500,7 @@
node.getProperty(name).remove();
}
} catch (final RepositoryException re) {
- throw new IllegalArgumentException("Value for key " + key + " can't be removed from node.", re);
+ throw new IllegalArgumentException("Property '" + key + "' can't be removed from node '" + getNodePath(node) + "'.", re);
}
return oldValue;
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
index aff00e2..eb31c37 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
@@ -97,7 +97,7 @@
final Bundle bundle = extractCallingBundle(authenticationInfo);
if (bundle != null) {
bc = bundle.getBundleContext();
- final SlingRepository repo = bc.getService(repositoryReference);
+ final SlingRepository repo = bc == null ? null : bc.getService(repositoryReference);
if (repo == null) {
logger.warn("Cannot login {} because cannot get SlingRepository on behalf of bundle {} ({})",
isLoginAdministrative ? "admin" : "service",
diff --git a/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java b/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
index 700d47a..1e93ed8 100644
--- a/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
+++ b/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
@@ -18,20 +18,24 @@
*/
package org.apache.sling.jcr.resource.internal.helper;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.NoSuchElementException;
import java.util.concurrent.atomic.AtomicReference;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.external.URIProvider;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
-import org.apache.sling.commons.testing.jcr.MockNode;
-import org.apache.sling.commons.testing.jcr.MockNodeIterator;
import org.apache.sling.jcr.resource.internal.HelperData;
import org.apache.sling.jcr.resource.internal.helper.jcr.JcrNodeResourceIterator;
+import org.apache.sling.testing.mock.jcr.MockJcr;
import junit.framework.TestCase;
@@ -42,7 +46,8 @@
}
public void testEmpty() {
- NodeIterator ni = new MockNodeIterator(null);
+ NodeIterator ni = new NodeIteratorAdapter(Collections.emptyIterator());
+
JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
assertFalse(ri.hasNext());
@@ -57,8 +62,9 @@
public void testSingle() throws RepositoryException {
String path = "/parent/path/node";
- Node node = new MockNode(path);
- NodeIterator ni = new MockNodeIterator(new Node[] { node });
+ Session session = MockJcr.newSession();
+ Node node = JcrUtils.getOrCreateByPath(path, "nt:folder", session);
+ NodeIterator ni = new NodeIteratorAdapter(Collections.singleton(node));
JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
assertTrue(ri.hasNext());
@@ -79,11 +85,12 @@
public void testMulti() throws RepositoryException {
int numNodes = 10;
String pathBase = "/parent/path/node/";
+ Session session = MockJcr.newSession();
Node[] nodes = new Node[numNodes];
for (int i=0; i < nodes.length; i++) {
- nodes[i] = new MockNode(pathBase + i, "some:type" + i);
+ nodes[i] = JcrUtils.getOrCreateByPath(pathBase + i, "nt:folder", session);
}
- NodeIterator ni = new MockNodeIterator(nodes);
+ NodeIterator ni = new NodeIteratorAdapter(Arrays.asList(nodes));
JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
for (int i=0; i < nodes.length; i++) {
@@ -105,8 +112,9 @@
public void testRoot() throws RepositoryException {
String path = "/child";
- Node node = new MockNode(path);
- NodeIterator ni = new MockNodeIterator(new Node[] { node });
+ Session session = MockJcr.newSession();
+ Node node = session.getRootNode().addNode("child");
+ NodeIterator ni = new NodeIteratorAdapter(Collections.singleton(node));
JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, "/", null, ni, getHelperData(), null);
assertTrue(ri.hasNext());