[ http://issues.apache.org/jira/browse/JCR-195?page=all ]
     
Stefan Guggisberg closed JCR-195:
---------------------------------

    Resolution: Fixed

fixed as suggested (r239383).

excellent job ernest, thanks!

> ArrayIndexOutOfBounds thrown on re-index of repository
> ------------------------------------------------------
>
>          Key: JCR-195
>          URL: http://issues.apache.org/jira/browse/JCR-195
>      Project: Jackrabbit
>         Type: Bug
>   Components: core
>     Versions: 1.0
>  Environment: Windows 2003, Java 1.5, Pentinum Xeon system
>     Reporter: Ernest Evans
>     Assignee: Stefan Guggisberg
>     Priority: Minor
>      Fix For: 1.0

>
> I encountered a problem with the Lucene NodeIndexer when forcing the 
> repository to re-index itself.
> Using the default repository.xml file provided with the examples 
> contribution, I loaded a number of PDF files using the sample application 
> FSImport.  In this utility, the "encoding" property is set to the empty 
> string "" for all the files.  The system appeared to index everything 
> properly.  I then stopped the repository, deleted the index files and then 
> restarted the repositoyr.  Re-indexing was initiated and a 
> "ArrayIndexOutOfBoundsException" was thrown from the 
> org.apache.jackrabbit.core.query.lucene.NodeIndexer.java
> The code in question:
>                 // jcr:encoding is not mandatory
>                 String encoding = null;
>                 if (node.hasPropertyName(JCR_ENCODING)) {
>                     PropertyState encodingProp =
>                             (PropertyState) stateProvider.getItemState(new 
> PropertyId(node.getUUID(), JCR_ENCODING));
>                     encodingProp.getValues()[0].internalValue().toString();
>                 }
> Expects the encodingProperty to be set if the property exists.  However, the 
> node has the property, but the XMLPersistenceManager did not create any 
> entries in the property array.  Either there is a problem in the 
> XMLPersistenceManager (zero length string issues), or the NodeIndexer needs 
> to be altered to verify that there is actually a value for a particular 
> property.
> Since the jcr:encoding property is not considered a multi-value property, the 
> requirement to check for an initialized array is probably not the correct 
> route.
> Looking at the code for the XMLPersistenceManager readState(DOMWalker walker, 
> PropertyState state) method (line 294), it indicates that if the content 
> length for a property is zero, the property will not have a value added.  
> However, our encoding property is configured as the empty string and should 
> be created.  Therefore, a suggested alteration is to check if the property is 
> a string, and, even if zero length, add the property value.
>         ArrayList values = new ArrayList();
>         if (walker.enterElement(VALUES_ELEMENT)) {
>             while (walker.iterateElements(VALUE_ELEMENT)) {
>                 // read serialized value
>                 String content = walker.getContent();
>                 if ((content.length() > 0) || (PropertyType.STRING == type)) 
> {   // <==== suggested update
>                     if (type == PropertyType.BINARY) {
>                         // special handling required for binary value:
>                         // the value stores the path to the actual binary 
> file in the blob store
>                         try {
>                             values.add(InternalValue.create(new 
> FileSystemResource(blobStore, content)));
>                         } catch (IOException ioe) {
>                             String msg = "error while reading serialized 
> binary value";
>                             log.debug(msg);
>                             throw new ItemStateException(msg, ioe);
>                         }
>                     } else {
>                         values.add(InternalValue.valueOf(content, type));
>                     }
>                 }
>             }
>             walker.leaveElement();
>         }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to