You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2017/02/08 16:49:36 UTC

svn commit: r1782217 - in /manifoldcf/trunk: CHANGES.txt framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java

Author: kwright
Date: Wed Feb  8 16:49:35 2017
New Revision: 1782217

URL: http://svn.apache.org/viewvc?rev=1782217&view=rev
Log:
Fix for CONNECTORS-1372.

Modified:
    manifoldcf/trunk/CHANGES.txt
    manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java

Modified: manifoldcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1782217&r1=1782216&r2=1782217&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Wed Feb  8 16:49:35 2017
@@ -3,6 +3,11 @@ $Id$
 
 ======================= 2.7-dev =====================
 
+CONNECTORS-1372: Bizarre errors while reading data out of a RepositoryDocument
+in some cases.  This was due to the implicit conversion of Readers to
+Strings.
+(Karl Wright)
+
 CONNECTORS-1375: Add email attachment support, done as separate
 documents.
 (Cihad Guzel, Karl Wright)

Modified: manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java?rev=1782217&r1=1782216&r2=1782217&view=diff
==============================================================================
--- manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java (original)
+++ manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/RepositoryDocument.java Wed Feb  8 16:49:35 2017
@@ -46,6 +46,7 @@ public class RepositoryDocument
   // Member variables.
   protected InputStream binaryFieldData = null;
   protected long binaryLength = 0;
+  protected final Set<String> fieldSet = new HashSet<String>(); // MUST be independent of fields map because we iterate over this and may change fields
   protected final Map<String,Object> fields = new HashMap<String,Object>();
   protected final Map<String,String[]> stringFields = new HashMap<String,String[]>();
   protected final Map<String,Reader[]> readerFields = new HashMap<String,Reader[]>();
@@ -81,6 +82,10 @@ public class RepositoryDocument
     rval.modifiedDate = modifiedDate;
     rval.indexingDate = indexingDate;
     rval.originalSize = originalSize;
+    for (String key : fieldSet)
+    {
+      rval.fieldSet.add(key);
+    }
     for (String key : fields.keySet())
     {
       rval.fields.put(key,fields.get(key));
@@ -332,6 +337,7 @@ public class RepositoryDocument
   */
   public void removeField(String fieldName)
   {
+    fieldSet.remove(fieldName);
     fields.remove(fieldName);
     stringFields.remove(fieldName);
     readerFields.remove(fieldName);
@@ -348,6 +354,7 @@ public class RepositoryDocument
   {
     if (fieldData == null)
     {
+      fieldSet.remove(fieldName);
       fields.remove(fieldName);
       stringFields.remove(fieldName);
       readerFields.remove(fieldName);
@@ -355,6 +362,7 @@ public class RepositoryDocument
     }
     else
     {
+      fieldSet.add(fieldName);
       fields.put(fieldName,fieldData);
       stringFields.remove(fieldName);
       readerFields.remove(fieldName);
@@ -388,6 +396,7 @@ public class RepositoryDocument
   {
     if (fieldData == null)
     {
+      fieldSet.remove(fieldName);
       fields.remove(fieldName);
       stringFields.remove(fieldName);
       readerFields.remove(fieldName);
@@ -395,6 +404,7 @@ public class RepositoryDocument
     }
     else
     {
+      fieldSet.add(fieldName);
       fields.put(fieldName,fieldData);
       stringFields.remove(fieldName);
       readerFields.put(fieldName,fieldData);
@@ -428,6 +438,7 @@ public class RepositoryDocument
   {
     if (fieldData == null)
     {
+      fieldSet.remove(fieldName);
       fields.remove(fieldName);
       stringFields.remove(fieldName);
       readerFields.remove(fieldName);
@@ -435,6 +446,7 @@ public class RepositoryDocument
     }
     else
     {
+      fieldSet.add(fieldName);
       fields.put(fieldName,fieldData);
       readerFields.remove(fieldName);
       stringFields.put(fieldName,fieldData);
@@ -568,14 +580,14 @@ public class RepositoryDocument
   */
   public int fieldCount()
   {
-    return fields.size();
+    return fieldSet.size();
   }
 
   /** Iterate through the field name Strings.
   */
   public Iterator<String> getFields()
   {
-    return fields.keySet().iterator();
+    return fieldSet.iterator();
   }
 
   /** This class describes allow and deny tokens for a specific security class. */