You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Mikhail Khludnev (Jira)" <ji...@apache.org> on 2026/04/30 05:59:00 UTC
[jira] [Commented] (SOLR-18196) Java serialization broken for QueryResponse - SimpleOrderedMap implements Map breaks ObjectOutputStream
[ https://issues.apache.org/jira/browse/SOLR-18196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18077226#comment-18077226 ]
Mikhail Khludnev commented on SOLR-18196:
-----------------------------------------
I haven't heard there are contract for Java's serialization for SolrJ and others', just because Solr has own javabin serialization format. Maybe I miss something. So, I suppose it was a de facto never guarantee behavior, which were legally dropped in the next major release. It's sad, but that's it.
> Java serialization broken for QueryResponse - SimpleOrderedMap implements Map breaks ObjectOutputStream
> --------------------------------------------------------------------------------------------------------
>
> Key: SOLR-18196
> URL: https://issues.apache.org/jira/browse/SOLR-18196
> Project: Solr
> Issue Type: Bug
> Components: clients - java
> Affects Versions: 10.0
> Environment: Client using SolrJ on Mac OS using Java 21. Solr instances running in AWS on EC2 instances.
> Reporter: Geoffrey Slinker
> Priority: Major
>
> Bug Report: Java Serialization Broken for QueryResponse in SolrJ 10.0.0
> Summary
> -------
> org.apache.solr.client.solrj.response.QueryResponse declares "implements Serializable" (inherited from SolrResponse) but cannot be serialized using Java's ObjectOutputStream in SolrJ 10.0.0. This is a regression from SolrJ 9.x where Java serialization worked correctly.
> Affected Version
> ----------------
> SolrJ 10.0.0
> Steps to Reproduce
> ------------------
> 1. Obtain a QueryResponse from any SolrClient.query() call.
> 2. Attempt to serialize it with ObjectOutputStream:
> QueryResponse response = solrClient.query("collection", query, SolrRequest.METHOD.POST);
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> ObjectOutputStream oos = new ObjectOutputStream(baos);
> oos.writeObject(response); // FAILS
> Expected Behavior
> -----------------
> The QueryResponse object should serialize successfully, as it did in SolrJ 9.x. The class hierarchy declares Serializable:
> SolrResponse implements Serializable (with serialVersionUID)
> SolrResponseBase extends SolrResponse
> QueryResponse extends SolrResponseBase
> Actual Behavior
> ---------------
> Serialization fails with:
> java.lang.NoSuchFieldException: serialPersistentFields
> The exception is thrown during ObjectOutputStream.writeObject() when Java's serialization mechanism attempts to introspect the class hierarchy.
> Root Cause
> ----------
> In Solr 10.0.0, SimpleOrderedMap was changed to implement java.util.Map as part of SIP-22 (NamedList Reduction):
> SolrJ 9.x: public class SimpleOrderedMap<T> extends NamedList<T>
> SolrJ 10.0: public class SimpleOrderedMap<T> extends NamedList<T> implements Map<String, T>
> QueryResponse internally contains a NamedList (via SolrResponseBase.response), which at runtime is a SimpleOrderedMap. When Java's ObjectOutputStream walks the class hierarchy of SimpleOrderedMap to build serialization metadata, it encounters the Map interface and attempts to locate serialPersistentFields on the class. This introspection fails with NoSuchFieldException, which causes serialization to fail.
> Impact
> ------
> Any code that relies on Java serialization of QueryResponse (or any SolrResponse subclass containing SimpleOrderedMap instances) is broken. This includes:
> - Caching serialized Solr responses
> - Storing Solr responses for test fixtures
> - Any framework that serializes Serializable objects (session replication, distributed caches, etc.)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org