You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2014/08/02 20:40:43 UTC

svn commit: r1615345 - in /lucene/dev/trunk/solr: ./ contrib/morphlines-core/src/test-files/solr/collection1/conf/ contrib/morphlines-core/src/test-files/solr/minimr/conf/ contrib/morphlines-core/src/test-files/solr/mrunit/conf/ contrib/morphlines-core...

Author: noble
Date: Sat Aug  2 18:40:42 2014
New Revision: 1615345

URL: http://svn.apache.org/r1615345
Log:
SOLR-6294 ,SOLR-6302

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/collection1/conf/solrconfig.xml
    lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/minimr/conf/solrconfig.xml
    lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/mrunit/conf/solrconfig.xml
    lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/solrcloud/conf/solrconfig.xml
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/RequestHandlersTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
    lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml
    lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Aug  2 18:40:42 2014
@@ -166,6 +166,12 @@ New Features
   a UUID into the unique Key field.
   (Vitaliy Zhovtyuk, hossman, Steve Rowe, Erik Hatcher, shalin)
 
+* SOLR-6294: Remove the restriction of adding json by only wrapping it in an array in a
+  new path /update/json/docs (Noble Paul , hossman, Yonik Seeley, Steve Rowe)
+
+* SOLR-6302: UpdateRequestHandlers are registered implicitly /update ,
+  /update/json, /update/csv , /update/json/docs (Noble Paul)
+
 
 Bug Fixes
 ----------------------

Modified: lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/collection1/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/collection1/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -947,8 +947,8 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
+  <!-- Update Request Handler.
+
        http://wiki.apache.org/solr/UpdateXmlMessages
 
        The canonical Request Handler for Modifying the Index through
@@ -957,17 +957,17 @@
        Note: Since solr1.1 requestHandlers requires a valid content
        type header if posted in the body. For example, curl now
        requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
+
+       To override the request content type and force a specific
+       Content-type, use the request parameter:
          ?update.contentType=text/csv
-       
+
        This handler will pick a response format to match the input
        if the 'wt' parameter is not explicit
     -->
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
+    <!-- See below for information on defining
+         updateRequestProcessorChains that can be used by name
          on each Update Request
       -->
     <!--
@@ -976,19 +976,6 @@
        </lst>
        -->
   </requestHandler>
-
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.CSVRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Field Analysis Request Handler
 
        RequestHandler that provides much the same functionality as

Modified: lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/minimr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/minimr/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/minimr/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/minimr/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -965,8 +965,8 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
+  <!-- Update Request Handler.
+
        http://wiki.apache.org/solr/UpdateXmlMessages
 
        The canonical Request Handler for Modifying the Index through
@@ -975,17 +975,17 @@
        Note: Since solr1.1 requestHandlers requires a valid content
        type header if posted in the body. For example, curl now
        requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
+
+       To override the request content type and force a specific
+       Content-type, use the request parameter:
          ?update.contentType=text/csv
-       
+
        This handler will pick a response format to match the input
        if the 'wt' parameter is not explicit
     -->
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
+    <!-- See below for information on defining
+         updateRequestProcessorChains that can be used by name
          on each Update Request
       -->
     <!--
@@ -995,18 +995,6 @@
        -->
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.CSVRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Field Analysis Request Handler
 
        RequestHandler that provides much the same functionality as

Modified: lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/mrunit/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/mrunit/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/mrunit/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/mrunit/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -970,48 +970,6 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
-       http://wiki.apache.org/solr/UpdateXmlMessages
-
-       The canonical Request Handler for Modifying the Index through
-       commands specified using XML, JSON, CSV, or JAVABIN
-
-       Note: Since solr1.1 requestHandlers requires a valid content
-       type header if posted in the body. For example, curl now
-       requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
-         ?update.contentType=text/csv
-       
-       This handler will pick a response format to match the input
-       if the 'wt' parameter is not explicit
-    -->
-  <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
-         on each Update Request
-      -->
-    <!--
-       <lst name="defaults">
-         <str name="update.chain">dedupe</str>
-       </lst>
-       -->
-  </requestHandler>
-
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.CSVRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Field Analysis Request Handler
 
        RequestHandler that provides much the same functionality as

Modified: lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/solrcloud/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/solrcloud/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/solrcloud/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/contrib/morphlines-core/src/test-files/solr/solrcloud/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -967,49 +967,6 @@
      </arr>
   </requestHandler>
 
-
-  <!-- Update Request Handler.  
-       
-       http://wiki.apache.org/solr/UpdateXmlMessages
-
-       The canonical Request Handler for Modifying the Index through
-       commands specified using XML, JSON, CSV, or JAVABIN
-
-       Note: Since solr1.1 requestHandlers requires a valid content
-       type header if posted in the body. For example, curl now
-       requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
-         ?update.contentType=text/csv
-       
-       This handler will pick a response format to match the input
-       if the 'wt' parameter is not explicit
-    -->
-  <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
-         on each Update Request
-      -->
-    <!--
-       <lst name="defaults">
-         <str name="update.chain">dedupe</str>
-       </lst>
-       -->
-  </requestHandler>
-
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.CSVRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Field Analysis Request Handler
 
        RequestHandler that provides much the same functionality as

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestHandlers.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestHandlers.java Sat Aug  2 18:40:42 2014
@@ -18,9 +18,12 @@
 package org.apache.solr.core;
 
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -135,10 +138,12 @@ public final class RequestHandlers {
    * Handlers will be registered and initialized in the order they appear in solrconfig.xml
    */
 
-  void initHandlersFromConfig(SolrConfig config ){
+  void initHandlersFromConfig(SolrConfig config, List<PluginInfo> implicits){
     // use link map so we iterate in the same order
     Map<PluginInfo,SolrRequestHandler> handlers = new LinkedHashMap<>();
-    for (PluginInfo info : config.getPluginInfos(SolrRequestHandler.class.getName())) {
+    ArrayList<PluginInfo> infos = new ArrayList<>(implicits);
+    infos.addAll(config.getPluginInfos(SolrRequestHandler.class.getName()));
+    for (PluginInfo info : infos) {
       try {
         SolrRequestHandler requestHandler;
         String startup = info.attributes.get("startup") ;

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java Sat Aug  2 18:40:42 2014
@@ -39,6 +39,7 @@ import org.apache.solr.common.util.Named
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.DirectoryFactory.DirContext;
 import org.apache.solr.handler.SnapPuller;
+import org.apache.solr.handler.UpdateRequestHandler;
 import org.apache.solr.handler.admin.ShowFileRequestHandler;
 import org.apache.solr.handler.component.AnalyticsComponent;
 import org.apache.solr.handler.component.DebugComponent;
@@ -802,7 +803,9 @@ public final class SolrCore implements S
       // Processors initialized before the handlers
       updateProcessorChains = loadUpdateProcessorChains();
       reqHandlers = new RequestHandlers(this);
-      reqHandlers.initHandlersFromConfig(solrConfig);
+      List<PluginInfo> implicitReqHandlerInfo = new ArrayList<>();
+      UpdateRequestHandler.addImplicits(implicitReqHandlerInfo);
+      reqHandlers.initHandlersFromConfig(solrConfig, implicitReqHandlerInfo);
 
       // Handle things that should eventually go away
       initDeprecatedSupport();

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java Sat Aug  2 18:40:42 2014
@@ -17,12 +17,15 @@
 
 package org.apache.solr.handler;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
@@ -30,6 +33,7 @@ import org.apache.solr.common.params.Sol
 import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.PluginInfo;
 import org.apache.solr.handler.loader.CSVLoader;
 import org.apache.solr.handler.loader.ContentStreamLoader;
 import org.apache.solr.handler.loader.JavabinLoader;
@@ -41,6 +45,9 @@ import org.apache.solr.update.processor.
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Collections.singletonMap;
+import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
+
 /**
  * UpdateHandler that uses content-type to pick the right Loader
  */
@@ -57,9 +64,9 @@ public class UpdateRequestHandler extend
   public static final String SOFT_COMMIT = "softCommit";
 
   public static final String OVERWRITE = "overwrite";
-  
+
   public static final String VERSION = "version";
-  
+
   // NOTE: This constant is for use with the <add> XML tag, not the HTTP param with same name
   public static final String COMMIT_WITHIN = "commitWithin";
 
@@ -69,7 +76,7 @@ public class UpdateRequestHandler extend
     @Override
     public void load(SolrQueryRequest req, SolrQueryResponse rsp,
         ContentStream stream, UpdateRequestProcessor processor) throws Exception {
-      
+
       String type = req.getParams().get(UpdateParams.ASSUME_CONTENT_TYPE);
       if(type == null) {
         type = stream.getContentType();
@@ -91,7 +98,7 @@ public class UpdateRequestHandler extend
       }
       loader.load(req, rsp, stream, processor);
     }
-    
+
     private void setDefaultWT(SolrQueryRequest req, ContentStreamLoader loader) {
       SolrParams params = req.getParams();
       if( params.get(CommonParams.WT) == null ) {
@@ -100,21 +107,21 @@ public class UpdateRequestHandler extend
         if(req.getCore().getQueryResponseWriter(wt)!=null) {
           Map<String,String> map = new HashMap<>(1);
           map.put(CommonParams.WT, wt);
-          req.setParams(SolrParams.wrapDefaults(params, 
+          req.setParams(SolrParams.wrapDefaults(params,
               new MapSolrParams(map)));
         }
       }
     }
   };
-  
+
   @Override
   public void init(NamedList args) {
     super.init(args);
-    
+
     // Since backed by a non-thread safe Map, it should not be modifiable
     loaders = Collections.unmodifiableMap(createDefaultLoaders(args));
   }
-  
+
   protected void setAssumeContentType(String ct) {
     if(invariants==null) {
       Map<String,String> map = new HashMap<>();
@@ -127,7 +134,7 @@ public class UpdateRequestHandler extend
       invariants = params;
     }
   }
-  
+
   protected Map<String,ContentStreamLoader> createDefaultLoaders(NamedList args) {
     SolrParams p = null;
     if(args!=null) {
@@ -143,13 +150,13 @@ public class UpdateRequestHandler extend
     registry.put("text/json", registry.get("application/json") );
     return registry;
   }
-  
+
 
   @Override
   protected ContentStreamLoader newLoader(SolrQueryRequest req, final UpdateRequestProcessor processor) {
     return instance;
   }
-  
+
   //////////////////////// SolrInfoMBeans methods //////////////////////
 
   @Override
@@ -161,6 +168,20 @@ public class UpdateRequestHandler extend
   public String getSource() {
     return "$URL$";
   }
+
+  public static void addImplicits(List<PluginInfo> implicits) {
+    implicits.add(getPluginInfo("/update",Collections.emptyMap()));
+    implicits.add(getPluginInfo("/update/json", singletonMap("update.contentType", "application/json")));
+    implicits.add(getPluginInfo("/update/csv", singletonMap("update.contentType", "application/csv")));
+    implicits.add(getPluginInfo("/update/json/docs", makeMap("update.contentType", "application/json", "json.command","false")));
+  }
+
+  static PluginInfo getPluginInfo(String name, Map defaults){
+    Map m = makeMap("name", name, "class", UpdateRequestHandler.class.getName());
+    return new PluginInfo("requestHandler", m, new NamedList<>( singletonMap("defaults", new NamedList(defaults))) ,null);
+
+  }
+
 }
 
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java Sat Aug  2 18:40:42 2014
@@ -109,6 +109,10 @@ public class JsonLoader extends ContentS
     @SuppressWarnings("fallthrough")
     void processUpdate() throws IOException
     {
+      if("false".equals( req.getParams().get("json.command"))){
+        handleStreamingSingleDocs();
+        return;
+      }
       int ev = parser.nextEvent();
       while( ev != JSONParser.EOF ) {
         
@@ -178,6 +182,26 @@ public class JsonLoader extends ContentS
       }
     }
 
+    private void handleStreamingSingleDocs() throws IOException
+    {
+      while( true ) {
+        int ev = parser.nextEvent();
+        if(ev == JSONParser.EOF) return;
+        if(ev == JSONParser.OBJECT_START) {
+          assertEvent(ev, JSONParser.OBJECT_START);
+          AddUpdateCommand cmd = new AddUpdateCommand(req);
+          cmd.commitWithin = commitWithin;
+          cmd.overwrite = overwrite;
+          cmd.solrDoc = parseDoc(ev);
+          processor.processAdd(cmd);
+        } else if(ev == JSONParser.ARRAY_START){
+          handleAdds();
+        } else{
+          throw  new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unexpected event :"+ev);
+        }
+      }
+    }
+
     //
     // "delete":"id"
     // "delete":["id1","id2"]
@@ -384,10 +408,10 @@ public class JsonLoader extends ContentS
         AddUpdateCommand cmd = new AddUpdateCommand(req);
         cmd.commitWithin = commitWithin;
         cmd.overwrite = overwrite;
-  
+
         int ev = parser.nextEvent();
         if (ev == JSONParser.ARRAY_END) break;
-  
+
         assertEvent(ev, JSONParser.OBJECT_START);
         cmd.solrDoc = parseDoc(ev);
         processor.processAdd(cmd);

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/RequestHandlersTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/RequestHandlersTest.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/RequestHandlersTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/RequestHandlersTest.java Sat Aug  2 18:40:42 2014
@@ -39,6 +39,14 @@ public class RequestHandlersTest extends
   }
 
   @Test
+  public void testImplicitRequestHandlers(){
+    SolrCore core = h.getCore();
+    assertNotNull(core.getRequestHandler( "/update/json"));
+    assertNotNull(core.getRequestHandler( "/update/json/docs"));
+    assertNotNull(core.getRequestHandler( "/update/csv"));
+  }
+
+  @Test
   public void testLazyLoading() {
     SolrCore core = h.getCore();
     SolrRequestHandler handler = core.getRequestHandler( "lazy" );

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Sat Aug  2 18:40:42 2014
@@ -255,6 +255,48 @@ public class JsonLoaderTest extends Solr
     req.close();
   }
 
+  public void testJsonDocFormat() throws Exception{
+    String doc = "\n" +
+        "\n" +
+        "{\"bool\": true,\n" +
+        " \"f0\": \"v0\",\n" +
+        " \"f2\": {\n" +
+        "    \t  \"boost\": 2.3,\n" +
+        "    \t  \"value\": \"test\"\n" +
+        "    \t   },\n" +
+        "\"array\": [ \"aaa\", \"bbb\" ],\n" +
+        "\"boosted\": {\n" +
+        "    \t      \"boost\": 6.7,\n" +
+        "    \t      \"value\": [ \"aaa\", \"bbb\" ]\n" +
+        "    \t    }\n" +
+        " }\n" +
+        "\n" +
+        "\n" +
+        " {\"f1\": \"v1\",\n" +
+        "  \"f1\": \"v2\",\n" +
+        "   \"f2\": null\n" +
+        "  }\n";
+    SolrQueryRequest req = req("json.command","false");
+    SolrQueryResponse rsp = new SolrQueryResponse();
+    BufferingRequestProcessor p = new BufferingRequestProcessor(null);
+    JsonLoader loader = new JsonLoader();
+    loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
+
+
+    assertEquals( 2, p.addCommands.size() );
+
+
+    doc = "[{'id':'1'},{'id':'2'}]".replace('\'', '"');
+    req = req("json.command","false");
+    rsp = new SolrQueryResponse();
+    p = new BufferingRequestProcessor(null);
+    loader = new JsonLoader();
+    loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
+    assertEquals( 2, p.addCommands.size() );
+
+
+  }
+
 
 
   public void testExtendedFieldValues() throws Exception {

Modified: lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-DIH/solr/db/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1013,8 +1013,8 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
+  <!-- Update Request Handler.
+
        http://wiki.apache.org/solr/UpdateXmlMessages
 
        The canonical Request Handler for Modifying the Index through
@@ -1023,17 +1023,17 @@
        Note: Since solr1.1 requestHandlers requires a valid content
        type header if posted in the body. For example, curl now
        requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
+
+       To override the request content type and force a specific
+       Content-type, use the request parameter:
          ?update.contentType=text/csv
-       
+
        This handler will pick a response format to match the input
        if the 'wt' parameter is not explicit
     -->
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
+    <!-- See below for information on defining
+         updateRequestProcessorChains that can be used by name
          on each Update Request
       -->
     <!--
@@ -1043,17 +1043,7 @@
        -->
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
+
 
   <!-- Solr Cell Update Request Handler
 

Modified: lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-DIH/solr/mail/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1015,49 +1015,6 @@
      </arr>
   </requestHandler>
 
-
-  <!-- Update Request Handler.  
-       
-       http://wiki.apache.org/solr/UpdateXmlMessages
-
-       The canonical Request Handler for Modifying the Index through
-       commands specified using XML, JSON, CSV, or JAVABIN
-
-       Note: Since solr1.1 requestHandlers requires a valid content
-       type header if posted in the body. For example, curl now
-       requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
-         ?update.contentType=text/csv
-       
-       This handler will pick a response format to match the input
-       if the 'wt' parameter is not explicit
-    -->
-  <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
-         on each Update Request
-      -->
-    <!--
-       <lst name="defaults">
-         <str name="update.chain">dedupe</str>
-       </lst>
-       -->
-  </requestHandler>
-
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Solr Cell Update Request Handler
 
        http://wiki.apache.org/solr/ExtractingRequestHandler 

Modified: lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-DIH/solr/rss/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1013,48 +1013,6 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
-       http://wiki.apache.org/solr/UpdateXmlMessages
-
-       The canonical Request Handler for Modifying the Index through
-       commands specified using XML, JSON, CSV, or JAVABIN
-
-       Note: Since solr1.1 requestHandlers requires a valid content
-       type header if posted in the body. For example, curl now
-       requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
-         ?update.contentType=text/csv
-       
-       This handler will pick a response format to match the input
-       if the 'wt' parameter is not explicit
-    -->
-  <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
-         on each Update Request
-      -->
-    <!--
-       <lst name="defaults">
-         <str name="update.chain">dedupe</str>
-       </lst>
-       -->
-  </requestHandler>
-
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Solr Cell Update Request Handler
 
        http://wiki.apache.org/solr/ExtractingRequestHandler 

Modified: lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-DIH/solr/solr/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1043,18 +1043,6 @@
        -->
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
-
   <!-- Solr Cell Update Request Handler
 
        http://wiki.apache.org/solr/ExtractingRequestHandler 

Modified: lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-DIH/solr/tika/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1016,8 +1016,8 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
+  <!-- Update Request Handler.
+
        http://wiki.apache.org/solr/UpdateXmlMessages
 
        The canonical Request Handler for Modifying the Index through
@@ -1026,17 +1026,17 @@
        Note: Since solr1.1 requestHandlers requires a valid content
        type header if posted in the body. For example, curl now
        requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
+
+       To override the request content type and force a specific
+       Content-type, use the request parameter:
          ?update.contentType=text/csv
-       
+
        This handler will pick a response format to match the input
        if the 'wt' parameter is not explicit
     -->
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
+    <!-- See below for information on defining
+         updateRequestProcessorChains that can be used by name
          on each Update Request
       -->
     <!--
@@ -1046,17 +1046,6 @@
        -->
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->  
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/json</str>
-       </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-        <lst name="defaults">
-         <str name="stream.contentType">application/csv</str>
-       </lst>
-  </requestHandler>
 
   <!-- Solr Cell Update Request Handler
 

Modified: lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/example-schemaless/solr/collection1/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1001,20 +1001,6 @@
     </lst>
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->
-  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
-    <lst name="defaults">
-      <str name="stream.contentType">application/json</str>
-      <str name="update.chain">add-unknown-fields-to-the-schema</str>
-    </lst>
-  </requestHandler>
-  <requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
-    <lst name="defaults">
-      <str name="stream.contentType">application/csv</str>
-      <str name="update.chain">add-unknown-fields-to-the-schema</str>
-    </lst>
-  </requestHandler>
-
   <!-- Solr Cell Update Request Handler
 
        http://wiki.apache.org/solr/ExtractingRequestHandler 

Modified: lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml?rev=1615345&r1=1615344&r2=1615345&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/solr/collection1/conf/solrconfig.xml Sat Aug  2 18:40:42 2014
@@ -1011,8 +1011,8 @@
   </requestHandler>
 
 
-  <!-- Update Request Handler.  
-       
+  <!-- Update Request Handler.
+
        http://wiki.apache.org/solr/UpdateXmlMessages
 
        The canonical Request Handler for Modifying the Index through
@@ -1021,17 +1021,17 @@
        Note: Since solr1.1 requestHandlers requires a valid content
        type header if posted in the body. For example, curl now
        requires: -H 'Content-type:text/xml; charset=utf-8'
-       
-       To override the request content type and force a specific 
-       Content-type, use the request parameter: 
+
+       To override the request content type and force a specific
+       Content-type, use the request parameter:
          ?update.contentType=text/csv
-       
+
        This handler will pick a response format to match the input
        if the 'wt' parameter is not explicit
     -->
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
-    <!-- See below for information on defining 
-         updateRequestProcessorChains that can be used by name 
+    <!-- See below for information on defining
+         updateRequestProcessorChains that can be used by name
          on each Update Request
       -->
     <!--
@@ -1041,7 +1041,7 @@
        -->
   </requestHandler>
 
-  <!-- for back compat with clients using /update/json and /update/csv -->  
+  <!-- The following are implicitly added
   <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
         <lst name="defaults">
          <str name="stream.contentType">application/json</str>
@@ -1052,6 +1052,7 @@
          <str name="stream.contentType">application/csv</str>
        </lst>
   </requestHandler>
+  -->
 
   <!-- Solr Cell Update Request Handler