https://issues.apache.org/jira/browse/SOLR-18196


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.)

Reply via email to