[ http://issues.apache.org/jira/browse/JCR-195?page=all ]
Stefan Guggisberg updated JCR-195:
----------------------------------
Component: core
(was: xml)
(was: query)
Fix Version: 1.0
> 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