-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 22 Nov 2005, Sylvain Wallez (JIRA) wrote:

Date: Tue, 22 Nov 2005 16:14:42 +0100 (CET)
From: "Sylvain Wallez (JIRA)" <[EMAIL PROTECTED]>
Reply-To: dev@cocoon.apache.org
To: dev@cocoon.apache.org
Subject: [jira] Commented: (COCOON-1689) Cannot save a cform containing a
    multivalued field with more than 9 values !

   [ 
http://issues.apache.org/jira/browse/COCOON-1689?page=comments#action_12358249 ]

Sylvain Wallez commented on COCOON-1689:
----------------------------------------

We have no indication of the JXPath problem that led to avoiding the use of 
jxpathContext.removePath(). Giacomo, as the author of this change, can you give 
us more indications on what motivated it ?

This was a workaround due to a bug in JXPath removePath() method reported by Jeremy and me prior to ApacheCon in Stuttgart. At that time it was fixed in their repository but not released (and we do not want to have unreleased jars in our repository). I'll check whether it works with current jxpath jar.


Cannot save a cform containing a multivalued field with more than 9 values !
----------------------------------------------------------------------------

         Key: COCOON-1689
         URL: http://issues.apache.org/jira/browse/COCOON-1689
     Project: Cocoon
        Type: Bug
  Components: Blocks: Forms
    Versions: 2.1.8, 2.1.9-dev (current SVN), 2.2-dev (Current SVN)
    Reporter: Philippe Gassmann
    Priority: Minor


An UnsupportedOperationException occurs when trying to save a form containing a 
multivalued field with more that 9 values. Here is the explanation :
here is the incriminated code in MultiValueJXPathBinding.java:doSave():
Iterator rowPointers = multiValueContext.iteratePointers(this.rowPath);
        List l = new ArrayList();
        while( rowPointers.hasNext() )
        {
            Pointer p = (Pointer)rowPointers.next();
            l.add(p.asPath());
        }
        Collections.sort(l);
        for( int i = l.size()-1; i >= 0; i-- )
        {
            multiValueContext.removePath((String)l.get(i));
        }
This code is wrong :
The p.asPath returns something like "/doc/node[x]"
if the iterator contains more than 9 values x will be written in TWO characters 
so, the result of Collections.sort(l) return for 10 values :
/doc/node[10]
/doc/node[1]
/doc/node[2]
/doc/node[3]
/doc/node[4]
/doc/node[5]
/doc/node[6]
/doc/node[7]
/doc/node[8]
/doc/node[9]
so the first node to be deleted is 9. the last is 10. but when trying to delete 
the 10th node it does not exist anymore !
A UnsupportedOperationException is thrown.



- -- Giacomo Pati
Otego AG, Switzerland - http://www.otego.com
Orixo, the XML business alliance - http://www.orixo.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)

iD8DBQFDg0PcLNdJvZjjVZARAsQXAKCm7XPfp3RNl61DV9rpUMg39/htSQCfSk2c
ZD+i347W6Rm0F1RvJrn+cJY=
=RRC0
-----END PGP SIGNATURE-----

Reply via email to