A version IGNORED child node should remain in the node tree if you revert to a previous version. This is stated in the subchapter 8.2.11.5 of JCR170. I've found that jackrabbit removes the IGNORED child node after a revert, wich is wrong.

Neverthenless I have to say: You are great!
Roland


doing this:

public void revertToVersion(Node jcrNode, NodeHolder nodeHolder) {
       try {
jcrNode.restore((Version) (nodeHolder.getJcrNode().getParent()), false);
       } catch (RepositoryException e) {
           throw new IllegalStateException(e);
       }
   }

on that:

 <!-- PAGE -->
   <!-- page definition -->
<nodeType hasOrderableChildNodes="true" isMixin="false" name="s1NT:page" primaryItemName="">
       <supertypes>
           <supertype>nt:base</supertype>
           <supertype>mix:referenceable</supertype>
           <supertype>mix:versionable</supertype>
           <supertype>mix:lockable</supertype>
       </supertypes>
       ...
   <!-- similarity results root child node -->
<childNodeDefinition autoCreated="true" defaultPrimaryType="s1NT:similarityRoot" mandatory="true" name="s1:similarityRoot" onParentVersion="IGNORE" protected="false" sameNameSiblings="false">
       </childNodeDefinition>
   </nodeType>
...

leads to:

java.lang.IllegalStateException: javax.jcr.nodetype.ConstraintViolationException: /s1:pages/s1:page: mandatory child node {http://www.systemone.at/jcr}similarityRoot does not exist
...
at org.apache.jackrabbit.core.ItemImpl.validateTransientItems(ItemImpl.java:557)
   at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1131)
   at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:758)
at org.apache.jackrabbit.core.NodeImpl.internalRestore(NodeImpl.java:3502)
   at org.apache.jackrabbit.core.NodeImpl.restore(NodeImpl.java:2848)
at at.systemone.wiki.node.PageNodeWorker.revertToVersion(PageNodeWorker.java:21)
   ... 18 more









Reply via email to