From 3f9d9eaff8ef3fa5b53d1da96e1d25e3de0f2a1d Mon Sep 17 00:00:00 2001 From: Renato Haeberli Date: Mon, 27 Apr 2026 11:46:49 +0200 Subject: [PATCH 1/2] use SolrJacksonMapper.getObjectMapper() rather than creating new ObjectMapper with default config --- .../solr/jersey/MessageBodyReaders.java | 3 +- .../jersey/PostRequestLoggingFilterTest.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/solr/core/src/java/org/apache/solr/jersey/MessageBodyReaders.java b/solr/core/src/java/org/apache/solr/jersey/MessageBodyReaders.java index 3a8f60d84e7e..a47f0dc65975 100644 --- a/solr/core/src/java/org/apache/solr/jersey/MessageBodyReaders.java +++ b/solr/core/src/java/org/apache/solr/jersey/MessageBodyReaders.java @@ -48,7 +48,8 @@ public static class CachingJsonMessageBodyReader extends CachingDelegatingMessag implements MessageBodyReader { @Override public MessageBodyReader getDelegate() { - return new JacksonJsonProvider().configure(JsonParser.Feature.ALLOW_COMMENTS, true); + return new JacksonJsonProvider(SolrJacksonMapper.getObjectMapper()) + .configure(JsonParser.Feature.ALLOW_COMMENTS, true); } } diff --git a/solr/core/src/test/org/apache/solr/jersey/PostRequestLoggingFilterTest.java b/solr/core/src/test/org/apache/solr/jersey/PostRequestLoggingFilterTest.java index 54d44fd80be8..c010e3b78290 100644 --- a/solr/core/src/test/org/apache/solr/jersey/PostRequestLoggingFilterTest.java +++ b/solr/core/src/test/org/apache/solr/jersey/PostRequestLoggingFilterTest.java @@ -22,10 +22,15 @@ import static org.mockito.Mockito.when; import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedHashMap; import jakarta.ws.rs.core.UriInfo; +import java.io.ByteArrayInputStream; +import java.lang.annotation.Annotation; +import java.nio.charset.StandardCharsets; import java.util.List; import org.apache.solr.SolrTestCaseJ4; +import org.apache.solr.client.api.model.CreateCollectionRequestBody; import org.apache.solr.client.api.model.CreateReplicaRequestBody; import org.junit.BeforeClass; import org.junit.Test; @@ -96,6 +101,30 @@ public void testBuildQueryParameterString_ExcludesFilteredParameters() { assertEquals("paramName1=paramValue1¶mName2=paramValue2", queryParamStr); } + @Test + @SuppressWarnings("unchecked") + public void testCachingJsonMessageBodyReaderDelegateUsesConfiguredObjectMapper() + throws Exception { + final var delegate = new MessageBodyReaders.CachingJsonMessageBodyReader().getDelegate(); + + final var entityStream = + new ByteArrayInputStream( + "{\"name\": \"test\", \"unknownField\": \"someValue\"}" + .getBytes(StandardCharsets.UTF_8)); + + final var result = + (CreateCollectionRequestBody) + delegate.readFrom( + (Class) (Class) CreateCollectionRequestBody.class, + CreateCollectionRequestBody.class, + new Annotation[0], + MediaType.APPLICATION_JSON_TYPE, + new MultivaluedHashMap<>(), + entityStream); + + assertEquals("test", result.name); + } + @Test public void testRequestBodyStringIsEmptyIfNoRequestBodyFound() { // NOTE: no request body is set on the context. From 29f11a8ff42d36e31d5d45fff91ceaff1ad2e5f7 Mon Sep 17 00:00:00 2001 From: Renato Haeberli Date: Mon, 27 Apr 2026 12:01:48 +0200 Subject: [PATCH 2/2] adding change log --- .../PR#4370-use-own-object-mapper-for-v2api.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 changelog/unreleased/PR#4370-use-own-object-mapper-for-v2api.yml diff --git a/changelog/unreleased/PR#4370-use-own-object-mapper-for-v2api.yml b/changelog/unreleased/PR#4370-use-own-object-mapper-for-v2api.yml new file mode 100644 index 000000000000..1ad7bbfed3d0 --- /dev/null +++ b/changelog/unreleased/PR#4370-use-own-object-mapper-for-v2api.yml @@ -0,0 +1,8 @@ +title: using object-mapper from SolrJacksonMapper for V2Api +type: fixed +authors: + - name: Renato Haeberli + +links: + - name: PR#4370 + url: https://github.com/apache/solr/pull/4370