Skip to content

Commit

Permalink
HSEARCH-3725 Change GsonProvider so that there's only one implementation
Browse files Browse the repository at this point in the history
We don't need multiple implementations anymore, and we'll need to
execute complex initialization code to work around a bug in Gson
(google/gson#764).
  • Loading branch information
yrodiere committed Oct 3, 2019
1 parent 998ea4b commit 770c4b4
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 70 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,52 @@
*/
package org.hibernate.search.backend.elasticsearch.gson.spi;

import java.util.function.Supplier;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;


/**
* Centralizes the configuration of the Gson objects.
*
*/
public interface GsonProvider {
public final class GsonProvider {

public static GsonProvider create(Supplier<GsonBuilder> builderBaseSupplier, boolean logPrettyPrinting) {
return new GsonProvider( builderBaseSupplier, logPrettyPrinting );
}

private final Gson gson;

private final Gson gsonNoSerializeNulls;

private final JsonLogHelper logHelper;

private GsonProvider(Supplier<GsonBuilder> builderBaseSupplier, boolean logPrettyPrinting) {
// Null serialization needs to be enabled to index null fields
gson = builderBaseSupplier.get()
.serializeNulls()
.create();

gsonNoSerializeNulls = builderBaseSupplier.get()
.create();

logHelper = JsonLogHelper.create( builderBaseSupplier.get(), logPrettyPrinting );
}

Gson getGson();
public Gson getGson() {
return gson;
}

/**
* @return Same as {@link #getGson()}, but with null serialization turned off.
*/
Gson getGsonNoSerializeNulls();
public Gson getGsonNoSerializeNulls() {
return gsonNoSerializeNulls;
}

JsonLogHelper getLogHelper();
public JsonLogHelper getLogHelper() {
return logHelper;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchClientFactory;
import org.hibernate.search.backend.elasticsearch.dialect.model.impl.ElasticsearchModelDialect;
import org.hibernate.search.backend.elasticsearch.dialect.impl.ElasticsearchDialectFactory;
import org.hibernate.search.backend.elasticsearch.gson.impl.DefaultGsonProvider;
import org.hibernate.search.backend.elasticsearch.gson.spi.GsonProvider;
import org.hibernate.search.backend.elasticsearch.logging.impl.Log;
import org.hibernate.search.backend.elasticsearch.multitenancy.impl.DiscriminatorMultiTenancyStrategy;
Expand Down Expand Up @@ -85,7 +84,7 @@ public BackendImplementor<?> create(String name, BackendBuildContext buildContex
* vice-versa, it doesn't need a Gson instance that was specially
* configured for a particular Elasticsearch version.
*/
GsonProvider defaultGsonProvider = DefaultGsonProvider.create( GsonBuilder::new, logPrettyPrinting );
GsonProvider defaultGsonProvider = GsonProvider.create( GsonBuilder::new, logPrettyPrinting );

Optional<ElasticsearchVersion> configuredVersion = VERSION.get( propertySource );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchClientImplementor;
import org.hibernate.search.backend.elasticsearch.dialect.impl.ElasticsearchDialectFactory;
import org.hibernate.search.backend.elasticsearch.dialect.protocol.impl.ElasticsearchProtocolDialect;
import org.hibernate.search.backend.elasticsearch.gson.impl.DefaultGsonProvider;
import org.hibernate.search.backend.elasticsearch.gson.spi.GsonProvider;
import org.hibernate.search.backend.elasticsearch.link.impl.ElasticsearchLink;
import org.hibernate.search.backend.elasticsearch.logging.impl.Log;
Expand Down Expand Up @@ -105,7 +104,7 @@ void onStart(ConfigurationPropertySource propertySource) {
}

ElasticsearchProtocolDialect protocolDialect = dialectFactory.createProtocolDialect( elasticsearchVersion );
gsonProvider = DefaultGsonProvider.create( protocolDialect::createGsonBuilderBase, logPrettyPrinting );
gsonProvider = GsonProvider.create( protocolDialect::createGsonBuilderBase, logPrettyPrinting );
jsonSyntaxHelper = protocolDialect.createJsonSyntaxHelper();
workBuilderFactory = protocolDialect.createWorkBuilderFactory( gsonProvider );
searchResultExtractorFactory = protocolDialect.createSearchResultExtractorFactory();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchClientImplementor;
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchRequest;
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchResponse;
import org.hibernate.search.backend.elasticsearch.gson.impl.DefaultGsonProvider;
import org.hibernate.search.backend.elasticsearch.gson.spi.GsonProvider;
import org.hibernate.search.backend.elasticsearch.util.spi.URLEncodedString;
import org.hibernate.search.engine.cfg.spi.ConfigurationPropertySource;
import org.hibernate.search.engine.environment.bean.BeanHolder;
Expand Down Expand Up @@ -185,7 +185,7 @@ private ElasticsearchClientImplementor createClient() {
try ( BeanHolder<ElasticsearchClientFactory> factoryHolder =
beanResolver.resolve( ElasticsearchClientFactoryImpl.REFERENCE ) ) {
return factoryHolder.get().create(
backendProperties, DefaultGsonProvider.create( GsonBuilder::new, true )
backendProperties, GsonProvider.create( GsonBuilder::new, true )
);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchClientImplementor;
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchRequest;
import org.hibernate.search.backend.elasticsearch.client.spi.ElasticsearchResponse;
import org.hibernate.search.backend.elasticsearch.gson.impl.DefaultGsonProvider;
import org.hibernate.search.backend.elasticsearch.gson.spi.GsonProvider;
import org.hibernate.search.backend.elasticsearch.impl.ElasticsearchIndexNameNormalizer;
import org.hibernate.search.backend.elasticsearch.logging.impl.ElasticsearchRequestFormatter;
import org.hibernate.search.backend.elasticsearch.logging.impl.ElasticsearchResponseFormatter;
Expand Down Expand Up @@ -491,7 +491,7 @@ private void before() {
try ( BeanHolder<ElasticsearchClientFactory> factoryHolder =
beanResolver.resolve( ElasticsearchClientFactoryImpl.REFERENCE ) ) {
client = factoryHolder.get().create(
backendProperties, DefaultGsonProvider.create( GsonBuilder::new, true )
backendProperties, GsonProvider.create( GsonBuilder::new, true )
);
}
}
Expand Down

0 comments on commit 770c4b4

Please sign in to comment.