You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/11/14 16:31:18 UTC
svn commit: r714034 - in /jackrabbit/trunk/jackrabbit-jcr2spi/src:
main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java
Author: angela
Date: Fri Nov 14 07:31:18 2008
New Revision: 714034
URL: http://svn.apache.org/viewvc?rev=714034&view=rev
Log:
JCR-1857: NPE with SessionImporter#checkIncludesMixReferenceable if NodeInfo doesn't contain mixin names
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java?rev=714034&r1=714033&r2=714034&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java Fri Nov 14 07:31:18 2008
@@ -634,7 +634,10 @@
private void checkIncludesMixReferenceable(Importer.NodeInfo nodeInfo) throws RepositoryException {
List l = new ArrayList();
l.add(nodeInfo.getNodeTypeName());
- l.addAll(Arrays.asList(nodeInfo.getMixinNames()));
+ Name[] mixinNames = nodeInfo.getMixinNames();
+ if (mixinNames != null && mixinNames.length > 0) {
+ l.addAll(Arrays.asList(nodeInfo.getMixinNames()));
+ }
if (l.contains(NameConstants.MIX_REFERENCEABLE)) {
// shortcut
return;
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java?rev=714034&r1=714033&r2=714034&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java Fri Nov 14 07:31:18 2008
@@ -16,21 +16,26 @@
*/
package org.apache.jackrabbit.jcr2spi.xml;
-import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.uuid.UUID;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
-import javax.jcr.RepositoryException;
import javax.jcr.ImportUUIDBehavior;
-import javax.jcr.PropertyType;
-import javax.jcr.Session;
import javax.jcr.Item;
import javax.jcr.Property;
-import java.util.List;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.ConstraintViolationException;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Arrays;
+import java.util.List;
/**
* <code>SessionImportTest</code>...
@@ -108,6 +113,73 @@
superuser.save();
}
+ /**
+ * Test case for issue <a href="https://issues.apache.org/jira/browse/JCR-1857">JCR-1857</href>
+ *
+ * @throws IOException
+ * @throws RepositoryException
+ */
+ public void testEmptyMixins() throws IOException, RepositoryException {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<sv:node xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"\n" +
+ " xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\"\n" +
+ " xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"\n" +
+ " xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"\n" +
+ " sv:name=\"testnode1\">\n" +
+ " <sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\">\n" +
+ " <sv:value>nt:unstructured</sv:value>\n" +
+ " </sv:property>\n" +
+ " <sv:property sv:name=\"jcr:title\" sv:type=\"String\">\n" +
+ " <sv:value>Test Node</sv:value>\n" +
+ " </sv:property>\n" +
+ " <sv:property sv:name=\"jcr:uuid\" sv:type=\"String\">\n" +
+ " <sv:value>1234</sv:value>\n" +
+ " </sv:property>\n" +
+ "</sv:node>";
+
+ InputStream in = new ByteArrayInputStream(xml.getBytes());
+ try {
+ superuser.importXML(testRootNode.getPath(), in, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+ fail("jcr:uuid cannot be created if mix:referenceable is not part of the effective nodetype.");
+ } catch (ConstraintViolationException e) {
+ // ok.
+ }
+ }
+
+ /**
+ * Test case for issue <a href="https://issues.apache.org/jira/browse/JCR-1857">JCR-1857</href>
+ *
+ * @throws IOException
+ * @throws RepositoryException
+ */
+ public void testEmptyMixins2() throws IOException, RepositoryException {
+ /*
+ JSR 170: nt:resource includes mix:referenceable
+ TODO: tests needs to be adjusted for JSR 283 (-> define test-property)
+ */
+ String referenceableNt = "nt:resource";
+ /*
+ TODO: retrieve valid jcr:uuid value from test-properties.
+ */
+ String uuid = UUID.randomUUID().toString();
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<sv:node xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"\n" +
+ " xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\"\n" +
+ " xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"\n" +
+ " xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"\n" +
+ " sv:name=\"testnode1\">\n" +
+ " <sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\">\n" +
+ " <sv:value>" + referenceableNt + "</sv:value>\n" +
+ " </sv:property>\n" +
+ " <sv:property sv:name=\"jcr:uuid\" sv:type=\"String\">\n" +
+ " <sv:value>" + uuid + "</sv:value>\n" +
+ " </sv:property>\n" +
+ "</sv:node>";
+
+ InputStream in = new ByteArrayInputStream(xml.getBytes());
+ superuser.importXML(testRootNode.getPath(), in, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+ }
+
private static String getUnknownURI(Session session, String uriHint) throws RepositoryException {
String uri = uriHint;
int index = 0;
@@ -122,7 +194,7 @@
/**
* Returns a prefix that is unique among the already registered prefixes.
*
- * @param uriHint namespace uri that serves as hint for the prefix generation
+ * @param session
* @return a unique prefix
*/
public static String getUniquePrefix(Session session) throws RepositoryException {