You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Roland Kofler <ro...@systemone.at> on 2006/01/22 23:20:13 UTC

For restoring a node, a IGNOREed child node throws ConstrainViolationException

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










Re: For restoring a node, a IGNOREed child node throws ConstrainViolationException

Posted by Tobias Bocanegra <to...@day.com>.
hi roland,
thanks for finding this. i created a jira issue for this bug:
http://issues.apache.org/jira/browse/JCR-308

regards, toby

On 1/22/06, Roland Kofler <ro...@systemone.at> wrote:
> 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
>
>
>
>
>
>
>
>
>
>


--
-----------------------------------------< tobias.bocanegra@day.com >---
Tobias Bocanegra, Day Management AG, Barfuesserplatz 6, CH - 4001 Basel
T +41 61 226 98 98, F +41 61 226 98 97
-----------------------------------------------< http://www.day.com >---