diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/lowlevel/index/mapping/impl/RoutingTypeJsonAdapter.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/lowlevel/index/mapping/impl/RoutingTypeJsonAdapter.java index 51bb6ed28d9..042499d1297 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/lowlevel/index/mapping/impl/RoutingTypeJsonAdapter.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/lowlevel/index/mapping/impl/RoutingTypeJsonAdapter.java @@ -62,6 +62,7 @@ public RoutingType read(JsonReader in) throws IOException { throw new AssertionFailure( "Unexpected property for attribute of type " + RoutingType.class + ": " + name ); } } + in.endObject(); return value; } diff --git a/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/gson/spi/GsonParsingTest.java b/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/gson/spi/GsonParsingTest.java new file mode 100644 index 00000000000..f76fc737348 --- /dev/null +++ b/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/gson/spi/GsonParsingTest.java @@ -0,0 +1,55 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.backend.elasticsearch.gson.spi; + +import static org.assertj.core.api.Assertions.assertThatCode; + +import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.RootTypeMapping; +import org.hibernate.search.util.impl.test.JsonHelper; +import org.hibernate.search.util.impl.test.annotation.TestForIssue; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +@RunWith(Parameterized.class) +@TestForIssue(jiraKey = "HSEARCH-4580") +public class GsonParsingTest { + + @Parameterized.Parameters + public static Object[][] params() { + return new Object[][] { + { "{\"_routing\": {\"required\": true}}", RootTypeMapping.class } // HSEARCH-4580 + }; + } + + private final Gson gson; + + @Parameterized.Parameter(0) + public String jsonToParse; + @Parameterized.Parameter(1) + public Class targetType; + + public GsonParsingTest() { + gson = GsonProvider.create( GsonBuilder::new, true ).getGsonNoSerializeNulls(); + } + + @Test + public void parsingWithoutException() { + assertThatCode( () -> gson.fromJson( jsonToParse, targetType ) ).doesNotThrowAnyException(); + } + + @Test + public void noInformationLoss() { + Object parsed = gson.fromJson( jsonToParse, targetType ); + String written = gson.toJson( parsed ); + JsonHelper.assertJsonEquals( jsonToParse, written ); + } +}