You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by no...@apache.org on 2023/04/25 07:30:34 UTC

[solr] branch branch_9x updated: Revert "SOLR-16691 : Use Jackson for JSON serialization (#1440)"

This is an automated email from the ASF dual-hosted git repository.

noble pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new 81ee04c838d Revert "SOLR-16691 : Use Jackson for JSON serialization (#1440)"
81ee04c838d is described below

commit 81ee04c838d933db87c15fa237acf7631921cc3f
Author: Noble Paul <no...@gmail.com>
AuthorDate: Tue Apr 25 17:29:28 2023 +1000

    Revert "SOLR-16691 : Use Jackson for JSON serialization (#1440)"
    
    This reverts commit c23a388759e42d3b0595882f71b664bdcc7e348f.
---
 .../src/java/org/apache/solr/core/SolrCore.java    |   4 +-
 .../apache/solr/handler/export/ExportWriter.java   |   5 +-
 .../solr/response/BinaryQueryResponseWriter.java   |  14 +-
 .../apache/solr/response/JacksonJsonWriter.java    | 234 ---------------------
 .../response/transform/GeoTransformerFactory.java  |   4 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |  11 +-
 .../solr/response/TestRawResponseWriter.java       |   7 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |  10 -
 8 files changed, 14 insertions(+), 275 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index c77b885beb4..ed3b00f97a9 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -126,7 +126,7 @@ import org.apache.solr.response.BinaryResponseWriter;
 import org.apache.solr.response.CSVResponseWriter;
 import org.apache.solr.response.GeoJSONResponseWriter;
 import org.apache.solr.response.GraphMLResponseWriter;
-import org.apache.solr.response.JacksonJsonWriter;
+import org.apache.solr.response.JSONResponseWriter;
 import org.apache.solr.response.PHPResponseWriter;
 import org.apache.solr.response.PHPSerializedResponseWriter;
 import org.apache.solr.response.PythonResponseWriter;
@@ -3024,7 +3024,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
   static {
     HashMap<String, QueryResponseWriter> m = new HashMap<>(15, 1);
     m.put("xml", new XMLResponseWriter());
-    m.put(CommonParams.JSON, new JacksonJsonWriter());
+    m.put(CommonParams.JSON, new JSONResponseWriter());
     m.put("standard", m.get(CommonParams.JSON));
     m.put("geojson", new GeoJSONResponseWriter());
     m.put("graphml", new GraphMLResponseWriter());
diff --git a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
index 8f38c94942e..6b40fc69175 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
@@ -60,7 +60,6 @@ import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.response.BinaryResponseWriter;
 import org.apache.solr.response.JSONResponseWriter;
-import org.apache.solr.response.JacksonJsonWriter;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.BoolField;
@@ -186,9 +185,7 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
 
   private void _write(OutputStream os) throws IOException {
     QueryResponseWriter rw = req.getCore().getResponseWriters().get(wt);
-    if (rw instanceof JacksonJsonWriter) {
-      writer = ((JacksonJsonWriter) rw).getWriter(os, req, res);
-    } else if (rw instanceof BinaryResponseWriter) {
+    if (rw instanceof BinaryResponseWriter) {
       // todo add support for other writers after testing
       writer = new JavaBinCodec(os, null);
     } else {
diff --git a/solr/core/src/java/org/apache/solr/response/BinaryQueryResponseWriter.java b/solr/core/src/java/org/apache/solr/response/BinaryQueryResponseWriter.java
index c9ecfb8c55d..cb38190069f 100644
--- a/solr/core/src/java/org/apache/solr/response/BinaryQueryResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/BinaryQueryResponseWriter.java
@@ -18,7 +18,6 @@ package org.apache.solr.response;
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
 import org.apache.solr.request.SolrQueryRequest;
 
 /**
@@ -32,17 +31,6 @@ import org.apache.solr.request.SolrQueryRequest;
 public interface BinaryQueryResponseWriter extends QueryResponseWriter {
 
   /** Use it to write the response in a binary format */
-  void write(OutputStream out, SolrQueryRequest request, SolrQueryResponse response)
+  public void write(OutputStream out, SolrQueryRequest request, SolrQueryResponse response)
       throws IOException;
-
-  default String serializeResponse(SolrQueryRequest req, SolrQueryResponse rsp) {
-    java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
-    try {
-      write(baos, req, rsp);
-      return baos.toString(StandardCharsets.UTF_8);
-    } catch (IOException e) {
-      // unlikely
-      throw new RuntimeException(e);
-    }
-  }
 }
diff --git a/solr/core/src/java/org/apache/solr/response/JacksonJsonWriter.java b/solr/core/src/java/org/apache/solr/response/JacksonJsonWriter.java
deleted file mode 100644
index 58c4e713216..00000000000
--- a/solr/core/src/java/org/apache/solr/response/JacksonJsonWriter.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.response;
-
-import com.fasterxml.jackson.core.JsonEncoding;
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.PrettyPrinter;
-import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import org.apache.solr.common.PushWriter;
-import org.apache.solr.request.SolrQueryRequest;
-
-public class JacksonJsonWriter extends BinaryResponseWriter {
-
-  protected final JsonFactory jsonfactory;
-  protected static final PrettyPrinter pretty =
-      new DefaultPrettyPrinter()
-          .withoutSpacesInObjectEntries()
-          .withArrayIndenter(DefaultPrettyPrinter.NopIndenter.instance);
-
-  public JacksonJsonWriter() {
-    super();
-    jsonfactory = new JsonFactory();
-  }
-
-  @Override
-  public void write(OutputStream out, SolrQueryRequest request, SolrQueryResponse response)
-      throws IOException {
-    try (WriterImpl sw = new WriterImpl(jsonfactory, out, request, response)) {
-      sw.writeResponse();
-    }
-  }
-
-  public PushWriter getWriter(
-      OutputStream out, SolrQueryRequest request, SolrQueryResponse response) {
-    return new WriterImpl(jsonfactory, out, request, response);
-  }
-
-  @Override
-  public String getContentType(SolrQueryRequest request, SolrQueryResponse response) {
-    return JSONResponseWriter.CONTENT_TYPE_JSON_UTF8;
-  }
-  // So we extend JSONWriter and override the relevant methods
-
-  public static class WriterImpl extends JSONWriter {
-
-    protected JsonGenerator gen;
-
-    public WriterImpl(
-        JsonFactory j, OutputStream out, SolrQueryRequest req, SolrQueryResponse rsp) {
-      super(null, req, rsp);
-      try {
-        gen = j.createGenerator(out, JsonEncoding.UTF8);
-        if (doIndent) {
-          gen.setPrettyPrinter(pretty);
-        }
-      } catch (IOException e) {
-        throw new RuntimeException(e);
-      }
-    }
-
-    @Override
-    public void writeResponse() throws IOException {
-      super.writeNamedList(null, rsp.getValues());
-      gen.close();
-    }
-
-    @Override
-    public void writeNumber(String name, Number val) throws IOException {
-      if (val instanceof Integer) {
-        gen.writeNumber(val.intValue());
-      } else if (val instanceof Long) {
-        gen.writeNumber(val.longValue());
-      } else if (val instanceof Float) {
-        gen.writeNumber(val.floatValue());
-      } else if (val instanceof Double) {
-        gen.writeNumber(val.doubleValue());
-      } else if (val instanceof Short) {
-        gen.writeNumber(val.shortValue());
-      } else if (val instanceof Byte) {
-        gen.writeNumber(val.byteValue());
-      } else if (val instanceof BigInteger) {
-        gen.writeNumber((BigInteger) val);
-      } else if (val instanceof BigDecimal) {
-        gen.writeNumber((BigDecimal) val);
-      } else {
-        gen.writeString(val.getClass().getName() + ':' + val.toString());
-        // default... for debugging only
-      }
-    }
-
-    @Override
-    public void writeBool(String name, Boolean val) throws IOException {
-      gen.writeBoolean(val);
-    }
-
-    @Override
-    public void writeNull(String name) throws IOException {
-      gen.writeNull();
-    }
-
-    @Override
-    public void writeStr(String name, String val, boolean needsEscaping) throws IOException {
-      if (needsEscaping) {
-        gen.writeString(val);
-      } else {
-        gen.writeRawValue(val);
-      }
-    }
-
-    @Override
-    public void writeLong(String name, long val) throws IOException {
-      gen.writeNumber(val);
-    }
-
-    @Override
-    public void writeInt(String name, int val) throws IOException {
-      gen.writeNumber(val);
-    }
-
-    @Override
-    public void writeBool(String name, boolean val) throws IOException {
-      gen.writeBoolean(val);
-    }
-
-    @Override
-    public void writeFloat(String name, float val) throws IOException {
-      gen.writeNumber(val);
-    }
-
-    @Override
-    public void writeArrayCloser() throws IOException {
-      gen.writeEndArray();
-    }
-
-    @Override
-    public void writeArraySeparator() {
-      // do nothing
-    }
-
-    @Override
-    public void writeArrayOpener(int size) throws IOException, IllegalArgumentException {
-      gen.writeStartArray();
-    }
-
-    @Override
-    public void writeMapCloser() throws IOException {
-      gen.writeEndObject();
-    }
-
-    @Override
-    public void writeMapSeparator() {
-      // do nothing
-    }
-
-    @Override
-    public void writeMapOpener(int size) throws IOException, IllegalArgumentException {
-      gen.writeStartObject();
-    }
-
-    @Override
-    public void writeKey(String fname, boolean needsEscaping) throws IOException {
-      gen.writeFieldName(fname);
-    }
-
-    @Override
-    public void writeByteArr(String name, byte[] buf, int offset, int len) throws IOException {
-      gen.writeBinary(buf, offset, len);
-    }
-
-    @Override
-    public void setLevel(int level) {
-      // do nothing
-    }
-
-    @Override
-    public int level() {
-      return 0;
-    }
-
-    @Override
-    public void indent() throws IOException {
-      // do nothing
-    }
-
-    @Override
-    public void indent(int lev) throws IOException {
-      // do nothing
-    }
-
-    @Override
-    public int incLevel() {
-      return 0;
-    }
-
-    @Override
-    public int decLevel() {
-      return 0;
-    }
-
-    @Override
-    public void close() throws IOException {
-      gen.close();
-    }
-
-    @Override
-    public void writeStrRaw(String name, String val) throws IOException {
-      gen.writeRawValue(val);
-    }
-
-    @Override
-    public void writeDate(String name, String val) throws IOException {
-      gen.writeString(val);
-    }
-  }
-}
diff --git a/solr/core/src/java/org/apache/solr/response/transform/GeoTransformerFactory.java b/solr/core/src/java/org/apache/solr/response/transform/GeoTransformerFactory.java
index 443426a1d68..1e971021b69 100644
--- a/solr/core/src/java/org/apache/solr/response/transform/GeoTransformerFactory.java
+++ b/solr/core/src/java/org/apache/solr/response/transform/GeoTransformerFactory.java
@@ -37,7 +37,6 @@ import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.JSONResponseWriter;
-import org.apache.solr.response.JacksonJsonWriter;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.schema.AbstractSpatialFieldType;
 import org.apache.solr.schema.SchemaField;
@@ -135,8 +134,7 @@ public class GeoTransformerFactory extends TransformerFactory
 
     QueryResponseWriter qw = req.getCore().getQueryResponseWriter(req);
     updater.isJSON =
-        (qw.getClass() == JSONResponseWriter.class || qw.getClass() == JacksonJsonWriter.class)
-            && (updater.writer instanceof GeoJSONWriter);
+        (qw.getClass() == JSONResponseWriter.class) && (updater.writer instanceof GeoJSONWriter);
 
     // Using ValueSource
     if (shapes != null) {
diff --git a/solr/core/src/java/org/apache/solr/servlet/DirectSolrConnection.java b/solr/core/src/java/org/apache/solr/servlet/DirectSolrConnection.java
index f7b5f59b48a..7cc7f798d57 100644
--- a/solr/core/src/java/org/apache/solr/servlet/DirectSolrConnection.java
+++ b/solr/core/src/java/org/apache/solr/servlet/DirectSolrConnection.java
@@ -30,7 +30,6 @@ import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.request.SolrRequestInfo;
-import org.apache.solr.response.BinaryResponseWriter;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.response.SolrQueryResponse;
 
@@ -117,13 +116,9 @@ public class DirectSolrConnection {
 
       // Now write it out
       QueryResponseWriter responseWriter = core.getQueryResponseWriter(req);
-      if (responseWriter instanceof BinaryResponseWriter) {
-        return ((BinaryResponseWriter) responseWriter).serializeResponse(req, rsp);
-      } else {
-        StringWriter out = new StringWriter();
-        responseWriter.write(out, req, rsp);
-        return out.toString();
-      }
+      StringWriter out = new StringWriter();
+      responseWriter.write(out, req, rsp);
+      return out.toString();
     } finally {
       if (req != null) {
         req.close();
diff --git a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
index adf15bdb706..07560024089 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
@@ -155,7 +155,12 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
 
     // json
     String json = "{\n" + "  \"content\":\"test\",\n" + "  \"foo\":\"bar\"}\n";
-    assertJSONEquals(json, writerJsonBase.serializeResponse(req(), rsp));
+    StringWriter jsonSout = new StringWriter();
+    writerJsonBase.write(jsonSout, req(), rsp);
+    assertEquals(json, jsonSout.toString());
+    ByteArrayOutputStream jsonBout = new ByteArrayOutputStream();
+    writerJsonBase.write(jsonBout, req(), rsp);
+    assertEquals(json, jsonBout.toString(StandardCharsets.UTF_8.toString()));
 
     // javabin
     ByteArrayOutputStream bytes = new ByteArrayOutputStream();
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
index d9566648bf8..3858f8cb959 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
@@ -18,7 +18,6 @@
 package org.apache.solr;
 
 import static com.carrotsearch.randomizedtesting.RandomizedTest.systemPropertyAsBoolean;
-import static org.apache.solr.common.util.Utils.fromJSONString;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -27,7 +26,6 @@ import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
 import java.io.File;
 import java.lang.invoke.MethodHandles;
 import java.util.List;
-import java.util.Objects;
 import java.util.regex.Pattern;
 import org.apache.lucene.tests.util.LuceneTestCase;
 import org.apache.lucene.tests.util.LuceneTestCase.SuppressSysoutChecks;
@@ -41,7 +39,6 @@ import org.apache.solr.util.StartupLoggingUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
-import org.junit.ComparisonFailure;
 import org.junit.rules.RuleChain;
 import org.junit.rules.TestRule;
 import org.slf4j.Logger;
@@ -186,11 +183,4 @@ public class SolrTestCase extends LuceneTestCase {
     final String PROP = "tests.force.assumption.failure.before";
     assumeFalse(PROP + " == true", systemPropertyAsBoolean(PROP, false));
   }
-
-  public static void assertJSONEquals(String expected, String actual) {
-    Object json1 = fromJSONString(expected);
-    Object json2 = fromJSONString(actual);
-    if (Objects.equals(json2, json1)) return;
-    throw new ComparisonFailure("", expected, actual);
-  }
 }