You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ry...@apache.org on 2007/10/05 19:11:25 UTC

svn commit: r582349 - /lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java

Author: ryan
Date: Fri Oct  5 10:11:24 2007
New Revision: 582349

URL: http://svn.apache.org/viewvc?rev=582349&view=rev
Log:
Like SOLR-360, the solrj XMLInputFactory needs to be thread safe...

Modified:
    lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java

Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java?rev=582349&r1=582348&r2=582349&view=diff
==============================================================================
--- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java (original)
+++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/impl/XMLResponseParser.java Fri Oct  5 10:11:24 2007
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamConstants;
@@ -41,11 +42,27 @@
  */
 public class XMLResponseParser implements ResponseParser
 {
+  public static Logger log = Logger.getLogger(XMLResponseParser.class.getName());
+  
   XMLInputFactory factory;
   
   public XMLResponseParser()
   {
     factory = XMLInputFactory.newInstance();
+    try {
+      // The java 1.6 bundled stax parser (sjsxp) does not currently have a thread-safe
+      // XMLInputFactory, as that implementation tries to cache and reuse the
+      // XMLStreamReader.  Setting the parser-specific "reuse-instance" property to false
+      // prevents this.
+      // All other known open-source stax parsers (and the bea ref impl)
+      // have thread-safe factories.
+      factory.setProperty("reuse-instance", Boolean.FALSE);
+    }
+    catch( IllegalArgumentException ex ) {
+      // Other implementations will likely throw this exception since "reuse-instance"
+      // isimplementation specific.
+      log.fine( "Unable to set the 'reuse-instance' property for the input factory: "+factory );
+    }
   }
   
   public String getWriterType()