Skip to content

Commit 887e01a

Browse files
committed
java-0.8.0 - fix adapters initialization, add pojo adapter, fix jsonorg adapter, fix uuid func to return string instead of UUID
1 parent 4f594a1 commit 887e01a

File tree

54 files changed

+1289
-223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1289
-223
lines changed

java/json-transform/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group 'co.nlighten'
12-
version = '0.7.0'
12+
version = '0.8.0'
1313

1414
ext {
1515
gsonVersion = "2.10.1"

java/json-transform/src/main/java/co/nlighten/jsontransform/JsonTransformerConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package co.nlighten.jsontransform;
22

33
import co.nlighten.jsontransform.adapters.JsonAdapter;
4+
import co.nlighten.jsontransform.adapters.pojo.PojoJsonTransformerConfiguration;
45
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
67

@@ -10,7 +11,7 @@ public abstract class JsonTransformerConfiguration {
1011
static volatile JsonTransformerConfiguration current = null;
1112

1213
public synchronized static void set(JsonTransformerConfiguration configuration) {
13-
if(configuration == null) {
14+
if (configuration == null) {
1415
throw new ExceptionInInitializerError("Cannot set empty configuration");
1516
}
1617
log.debug("Setting configuration to {}", configuration);
@@ -19,7 +20,8 @@ public synchronized static void set(JsonTransformerConfiguration configuration)
1920

2021
public static JsonTransformerConfiguration get() {
2122
if (current == null) {
22-
throw new ExceptionInInitializerError("Configuration not set");
23+
log.debug("Json transformers configuration was not set. Using default Pojo implementation.");
24+
set(new PojoJsonTransformerConfiguration());
2325
}
2426
return current;
2527
}

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/JsonAdapter.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.time.Instant;
1111
import java.time.format.DateTimeFormatter;
1212
import java.util.*;
13-
import java.util.function.Function;
1413
import java.util.function.Supplier;
1514
import java.util.stream.Collectors;
1615
import java.util.stream.Stream;
@@ -31,17 +30,16 @@ public abstract class JsonAdapter<JE, JA extends Iterable<JE>, JO extends JE> {
3130

3231
private final JsonObjectAdapter<JE, JA, JO> jObject;
3332
private final JsonArrayAdapter<JE, JA, JO> jArray;
34-
public final Class<JE> type;
3533

3634
public JsonAdapter(
37-
Class<JE> jsonElementType,
38-
Function<JsonAdapter<JE, JA, JO>, JsonObjectAdapter<JE, JA, JO>> objectAdapterSupplier,
39-
Function<JsonAdapter<JE, JA, JO>, JsonArrayAdapter<JE, JA, JO>> arrayAdapterSupplier) {
40-
this.jObject = objectAdapterSupplier.apply(this);
41-
this.jArray = arrayAdapterSupplier.apply(this);
42-
this.type = jsonElementType;
35+
Supplier<JsonObjectAdapter<JE, JA, JO>> objectAdapterSupplier,
36+
Supplier<JsonArrayAdapter<JE, JA, JO>> arrayAdapterSupplier) {
37+
this.jObject = objectAdapterSupplier.get();
38+
this.jArray = arrayAdapterSupplier.get();
4339
}
4440

41+
public abstract String getName();
42+
4543
/**
4644
* Checks if the given object is a Json element
4745
* @param value the object to check
@@ -621,7 +619,7 @@ public ParameterResolver createPayloadResolver(Object payload, Map<String, Objec
621619
res = json.read(name);
622620
}
623621
if (unwrap) {
624-
res = unwrap(type.cast(res), true);
622+
res = unwrap(res, true);
625623
}
626624
return res;
627625
}

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/JsonArrayAdapter.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,6 @@
33
import java.util.stream.Stream;
44

55
public abstract class JsonArrayAdapter<JE, JA extends Iterable<JE>, JO extends JE> {
6-
public final Class<JA> type;
7-
protected JsonAdapter<JE, JA, JO> adapter;
8-
9-
public JsonArrayAdapter(Class<JA> type, JsonAdapter<JE, JA, JO> adapter) {
10-
this.type = type;
11-
this.adapter = adapter;
12-
}
136

147
public abstract JA create();
158
public abstract JA create(int capacity);

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/JsonObjectAdapter.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,7 @@
44
import java.util.Set;
55

66
public abstract class JsonObjectAdapter<JE, JA extends Iterable<JE>, JO extends JE> {
7-
public final Class<JO> type;
8-
protected JsonAdapter<JE, JA, JO> adapter;
97

10-
public JsonObjectAdapter(Class<JO> type, JsonAdapter<JE, JA, JO> adapter) {
11-
this.type = type;
12-
this.adapter = adapter;
13-
}
14-
15-
public void setAdapter(JsonAdapter<JE, JA, JO> adapter) {
16-
this.adapter = adapter;
17-
}
188
public abstract JO create();
199

2010
public abstract void add(JO object, String key, String value);
@@ -34,7 +24,6 @@ public boolean isEmpty(JO object) {
3424

3525
public abstract boolean is(Object value);
3626

37-
public abstract JO convert(Object value);
3827
public abstract Set<Map.Entry<String, JE>> entrySet(JO object);
3928
public abstract Set<String> keySet(JO object);
4029
}

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/gson/GsonArrayAdapter.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package co.nlighten.jsontransform.adapters.gson;
22

3-
import co.nlighten.jsontransform.adapters.JsonAdapter;
43
import co.nlighten.jsontransform.adapters.JsonArrayAdapter;
54
import com.google.gson.JsonArray;
65
import com.google.gson.JsonElement;
@@ -10,11 +9,6 @@
109
import java.util.stream.StreamSupport;
1110

1211
public class GsonArrayAdapter extends JsonArrayAdapter<JsonElement, JsonArray, JsonObject> {
13-
14-
public GsonArrayAdapter(JsonAdapter<JsonElement, JsonArray, JsonObject> adapter) {
15-
super(JsonArray.class, adapter);
16-
}
17-
1812
@Override
1913
public JsonArray create() {
2014
return new JsonArray();

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/gson/GsonHelpers.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public static Gson GSON() {
1515

1616
public static void setGson(Supplier<Gson> supplier) {
1717
GsonHelpers.threadSafeGsonBuilder = ThreadLocal.withInitial(supplier);
18+
GsonJsonPathConfigurator.setConfigurationDefaults(new GsonJsonPathConfigurator.JaywayGSONConfiguration(GSON()));
1819
}
1920

2021
public static JsonElement wrap(final Object value) {

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/gson/GsonJsonAdapter.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package co.nlighten.jsontransform.adapters.gson;
22

33
import co.nlighten.jsontransform.adapters.JsonAdapter;
4+
import co.nlighten.jsontransform.adapters.gson.adapters.ISODateAdapter;
5+
import co.nlighten.jsontransform.adapters.gson.adapters.InstantTypeAdapter;
6+
import co.nlighten.jsontransform.adapters.gson.adapters.LocalDateTypeAdapter;
47
import com.google.gson.*;
58
import com.jayway.jsonpath.DocumentContext;
69
import com.jayway.jsonpath.JsonPath;
710

811
import java.math.BigDecimal;
12+
import java.time.Instant;
13+
import java.time.LocalDate;
14+
import java.util.Date;
915

1016
public class GsonJsonAdapter extends JsonAdapter<JsonElement, JsonArray, JsonObject> {
1117

@@ -14,12 +20,20 @@ public class GsonJsonAdapter extends JsonAdapter<JsonElement, JsonArray, JsonObj
1420
public static GsonBuilder gsonBuilder() {
1521
return new GsonBuilder()
1622
.setDateFormat(ISO_DATETIME_FORMAT)
23+
.registerTypeAdapter(Date.class, new ISODateAdapter())
24+
.registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter())
25+
.registerTypeAdapter(Instant.class, new InstantTypeAdapter())
1726
.setNumberToNumberStrategy(ToNumberPolicy.BIG_DECIMAL)
1827
.setObjectToNumberStrategy(ToNumberPolicy.BIG_DECIMAL);
1928
}
2029

2130
public GsonJsonAdapter() {
22-
super(JsonElement.class, GsonObjectAdapter::new, GsonArrayAdapter::new);
31+
super(GsonObjectAdapter::new, GsonArrayAdapter::new);
32+
}
33+
34+
@Override
35+
public String getName() {
36+
return "gson";
2337
}
2438

2539
@Override
@@ -64,7 +78,7 @@ public Object unwrap(Object value, boolean reduceBigDecimals) {
6478

6579
@Override
6680
public JsonElement parse(String value) {
67-
return GsonHelpers.GSON().fromJson(value, JsonElement.class);
81+
return (JsonElement)GsonJsonPathConfigurator.configuration().jsonProvider().parse(value);
6882
}
6983

7084
@Override
@@ -103,6 +117,6 @@ public DocumentContext getDocumentContext(Object payload) {
103117
}
104118
@Override
105119
public String toString(Object value) {
106-
return GsonHelpers.GSON().toJson(value);
120+
return GsonJsonPathConfigurator.configuration().jsonProvider().toJson(value);
107121
}
108122
}

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/gson/GsonJsonPathConfigurator.java

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package co.nlighten.jsontransform.adapters.gson;
22

3+
import com.google.gson.Gson;
4+
import com.jayway.jsonpath.Configuration;
35
import com.jayway.jsonpath.Option;
46
import com.jayway.jsonpath.spi.json.GsonJsonProvider;
57
import com.jayway.jsonpath.spi.json.JsonProvider;
@@ -16,13 +18,19 @@ public class GsonJsonPathConfigurator {
1618

1719
private static boolean initialized = false;
1820

19-
private static class JaywayGSONConfiguration implements com.jayway.jsonpath.Configuration.Defaults {
21+
public static class JaywayGSONConfiguration implements com.jayway.jsonpath.Configuration.Defaults {
2022

21-
private static final JsonProvider jsonProvider = new GsonJsonProvider();
22-
private static final Set<Option> options = Set.of(
23-
Option.SUPPRESS_EXCEPTIONS
24-
);
25-
private static final MappingProvider mappingProvider = new GsonMappingProvider();
23+
private final JsonProvider jsonProvider;
24+
private final Set<Option> options;
25+
private final MappingProvider mappingProvider;
26+
27+
public JaywayGSONConfiguration(Gson gson) {
28+
jsonProvider = new GsonJsonProvider(gson);
29+
options = Set.of(
30+
Option.SUPPRESS_EXCEPTIONS
31+
);
32+
mappingProvider = new GsonMappingProvider();
33+
}
2634

2735
@Override
2836
public JsonProvider jsonProvider() {
@@ -40,9 +48,10 @@ public MappingProvider mappingProvider() {
4048
}
4149
}
4250

43-
private static com.jayway.jsonpath.Configuration.Defaults configurationDefaults = new JaywayGSONConfiguration();
51+
private static com.jayway.jsonpath.Configuration.Defaults configurationDefaults = new JaywayGSONConfiguration(GsonHelpers.GSON());
52+
private static com.jayway.jsonpath.Configuration configuration = createConfiguration();
4453

45-
public static void setup() {
54+
public static synchronized void setup() {
4655
if (initialized) return;
4756
log.info("Setting com.jayway.jsonpath defaults with {}", configurationDefaults.getClass());
4857
com.jayway.jsonpath.Configuration.setDefaults(configurationDefaults);
@@ -52,8 +61,20 @@ public static void setup() {
5261
/**
5362
* Override the default com.jayway.jsonpath configuration (and reset initialization)
5463
*/
55-
public static void setConfigurationDefaults(com.jayway.jsonpath.Configuration.Defaults configurationDefaults) {
56-
GsonJsonPathConfigurator.configurationDefaults = configurationDefaults;
64+
public static synchronized void setConfigurationDefaults(com.jayway.jsonpath.Configuration.Defaults defaults) {
65+
configurationDefaults = defaults;
66+
configuration = createConfiguration();
5767
initialized = false;
5868
}
69+
70+
public static com.jayway.jsonpath.Configuration createConfiguration() {
71+
return new Configuration.ConfigurationBuilder().jsonProvider(configurationDefaults.jsonProvider())
72+
.mappingProvider(configurationDefaults.mappingProvider())
73+
.options(configurationDefaults.options())
74+
.build();
75+
}
76+
77+
public static com.jayway.jsonpath.Configuration configuration() {
78+
return configuration;
79+
}
5980
}

java/json-transform/src/main/java/co/nlighten/jsontransform/adapters/gson/GsonObjectAdapter.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package co.nlighten.jsontransform.adapters.gson;
22

3-
import co.nlighten.jsontransform.adapters.JsonAdapter;
43
import co.nlighten.jsontransform.adapters.JsonObjectAdapter;
54
import com.google.gson.JsonArray;
65
import com.google.gson.JsonElement;
@@ -10,11 +9,6 @@
109
import java.util.Set;
1110

1211
public class GsonObjectAdapter extends JsonObjectAdapter<JsonElement, JsonArray, JsonObject> {
13-
14-
public GsonObjectAdapter(JsonAdapter<JsonElement, JsonArray, JsonObject> adapter) {
15-
super(JsonObject.class, adapter);
16-
}
17-
1812
@Override
1913
public JsonObject create() {
2014
return new JsonObject();
@@ -74,13 +68,6 @@ public int size(JsonObject object) {
7468
public boolean is(Object value) {
7569
return value instanceof JsonObject;
7670
}
77-
78-
@Override
79-
public JsonObject convert(Object value) {
80-
if (value instanceof JsonObject jo) return jo;
81-
var je = adapter.wrap(value);
82-
return je instanceof JsonObject jo ? jo : null;
83-
}
8471

8572
@Override
8673
public Set<Map.Entry<String, JsonElement>> entrySet(JsonObject object) {

0 commit comments

Comments
 (0)