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 00000000000..1ad7bbfed3d --- /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 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 3a8f60d84e7..a47f0dc6597 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 54d44fd80be..c010e3b7829 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.