jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Audun Landsvik <audun_l...@hotmail.com>
Subject ReferentialIntegrityException on XML-import
Date Thu, 09 Oct 2008 10:22:21 GMT

Hi,

I am experiencing problems with the import functionality of Jackrabbit.  It appears that the
import mechanism fails when there are references to nodes that are marked as 'mandatory autocreated'
in the CND file. I have written a small Java application (with a simple CND-file) that reproduces
this problem. The ReferentialIntegrityException that is thrown states that the object being
referenced does not exist, but it does exist in the XML being imported (The 'missing' object
is the mandatory autocreated object). Is this a bug, or is this particular configuration unsupported
in Jackrabbit?

Environment:
Jackrabbit Core 1.4.6.
jdk1.6.0_07.
Fedora 9 Linux (also reproduced on Windows).
The repository configuration used by my test application uses org.apache.jackrabbit.core.fs.mem.MemoryFileSystem
and org.apache.jackrabbit.core.persistence.mem.InMemPersistenceManager.


Stacktrace, cnd-file, and Java code are listed at the bottom of this e-mail.

Regards,
Audun

----------------------------------------
The exception I am getting is:
----------------------------------------

Exception in thread "main" java.lang.IllegalStateException: oops
	at com.corporater.test.JackrabbitImportTester.main(JackrabbitImportTester.java:79)
Caused by: javax.jcr.ReferentialIntegrityException: Target node 4ac00d54-84c4-49bd-b2f9-cb3e790ce370
of REFERENCE property does not exist
	at org.apache.jackrabbit.core.state.SharedItemStateManager.checkReferentialIntegrity(SharedItemStateManager.java:1440)
	at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:557)
	at org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:843)
	at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:873)
	at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:334)
	at org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:337)
	at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:310)
	at org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:317)
	at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1247)
	at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
	at com.corporater.test.JackrabbitImportTester.main(JackrabbitImportTester.java:77)


----------------------------------------
My CND file is as follows:
----------------------------------------





[test:Container]> nt:base 
	+ * (nt:base) multiple
	
[test:Child]> nt:base, mix:referenceable
	
[test:Parent]> nt:base
	+ test:Test (test:Child) = test:Child mandatory autocreated
	
[test:Linked]> nt:base
	- test:linked (reference) mandatory


------------------------------------------------------------------------
The Java-code that reproduced the problem is as follows:
------------------------------------------------------------------------
		try {
			Node container = session.getRootNode().addNode("container", "test:Container");
			Node parentNode = container.addNode("Test", "test:Parent");
			Node childNode = parentNode.getNode("test:Test");
			Node linkedNode = container.addNode("Link", "test:Linked");
			linkedNode.setProperty("test:linked", childNode);
			session.save();
			ByteArrayOutputStream bout = new ByteArrayOutputStream();
			session.exportSystemView(session.getRootNode().getNode("container").getPath(), bout, false,
false);
			bout.flush();
			bout.close();
			container.remove();
			session.save();
			session.importXML(session.getRootNode().getPath(), new ByteArrayInputStream(bout.toByteArray()),
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
			// This save() call fails with a ReferentialIntegrityException
			session.save();
		} catch (Exception e) {
			throw new IllegalStateException("oops", e);
		}



_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx
Mime
View raw message