Skip to content

Commit 0d29a08

Browse files
committed
jsoniter in dynamic mode is back; fixed json iter for clients model
1 parent 0d36091 commit 0d29a08

File tree

6 files changed

+40
-36
lines changed

6 files changed

+40
-36
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ dependencies {
7878
compile group: 'org.apache.tapestry', name: 'tapestry-json', version: '5.4.3'
7979
// jsoniter
8080
compile group: 'com.jsoniter', name: 'jsoniter', version: '0.9.22'
81-
//compile group: 'org.javassist', name: 'javassist', version: '3.21.0-GA'
81+
compile group: 'org.javassist', name: 'javassist', version: '3.22.0-GA'
8282
// minimal-json
8383
compile group: 'com.eclipsesource.minimal-json', name: 'minimal-json', version: '0.9.5'
8484

src/main/java/com/github/fabienrenaud/jjb/data/JsonSource.java

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,11 @@
55
import com.github.fabienrenaud.jjb.provider.JsonProvider;
66
import com.github.fabienrenaud.jjb.stream.StreamDeserializer;
77
import com.github.fabienrenaud.jjb.stream.StreamSerializer;
8-
import com.jsoniter.JsonIterator;
9-
import com.jsoniter.extra.PreciseFloatSupport;
10-
import com.jsoniter.output.EncodingMode;
11-
import com.jsoniter.output.JsonStream;
12-
import com.jsoniter.spi.DecodingMode;
138
import okio.BufferedSource;
149
import okio.ForwardingSource;
1510
import okio.Okio;
1611

1712
import java.io.ByteArrayInputStream;
18-
import java.io.IOException;
1913
import java.io.InputStream;
2014
import java.io.InputStreamReader;
2115
import java.io.Reader;
@@ -26,13 +20,7 @@
2620
public abstract class JsonSource<T> {
2721

2822
static {
29-
//TODO: disabled since it causes test compilation to fail for all libs
30-
//JsonIterator.setMode(DecodingMode.DYNAMIC_MODE_AND_MATCH_FIELD_STRICTLY);
31-
//JsonStream.setMode(EncodingMode.DYNAMIC_MODE);
32-
JsonIterator.setMode(DecodingMode.REFLECTION_MODE);
33-
JsonStream.setMode(EncodingMode.REFLECTION_MODE);
34-
// JsoniterAnnotationSupport.enable();
35-
PreciseFloatSupport.enable();
23+
JsonSourceInits.jsoniter();
3624
}
3725

3826
private final JsonProvider<T> provider;
@@ -58,17 +46,13 @@ public abstract class JsonSource<T> {
5846
this.streamDeserializer = streamDeserializer;
5947
populateFields(quantity, individualSize);
6048

61-
this.jsonAsByteArrayInputStream = new ThreadLocal<ByteArrayInputStream[]>() {
62-
63-
@Override
64-
protected ByteArrayInputStream[] initialValue() {
65-
ByteArrayInputStream[] arr = new ByteArrayInputStream[quantity];
66-
for (int i = 0; i < arr.length; i++) {
67-
arr[i] = new ByteArrayInputStream(jsonAsBytes[i]);
68-
}
69-
return arr;
49+
this.jsonAsByteArrayInputStream = ThreadLocal.withInitial(() -> {
50+
ByteArrayInputStream[] arr = new ByteArrayInputStream[quantity];
51+
for (int i = 0; i < arr.length; i++) {
52+
arr[i] = new ByteArrayInputStream(jsonAsBytes[i]);
7053
}
71-
};
54+
return arr;
55+
});
7256
}
7357

7458
private final void populateFields(final int quantity, final int individualSize) {
@@ -114,7 +98,7 @@ public Reader nextReader() {
11498
public BufferedSource nextOkioBufferedSource() {
11599
return Okio.buffer(new ForwardingSource(Okio.source(nextInputStream())) {
116100
@Override
117-
public void close() throws IOException {
101+
public void close() {
118102
}
119103
});
120104
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.fabienrenaud.jjb.data;
2+
3+
import com.jsoniter.JsonIterator;
4+
import com.jsoniter.extra.PreciseFloatSupport;
5+
import com.jsoniter.output.EncodingMode;
6+
import com.jsoniter.output.JsonStream;
7+
import com.jsoniter.spi.DecodingMode;
8+
import com.jsoniter.spi.JsoniterSpi;
9+
10+
import java.time.LocalDate;
11+
import java.time.OffsetDateTime;
12+
import java.util.UUID;
13+
14+
public final class JsonSourceInits {
15+
16+
private JsonSourceInits() {
17+
}
18+
19+
public static void jsoniter() {
20+
JsonIterator.setMode(DecodingMode.DYNAMIC_MODE_AND_MATCH_FIELD_STRICTLY);
21+
JsonStream.setMode(EncodingMode.DYNAMIC_MODE);
22+
JsoniterSpi.registerTypeEncoder(UUID.class, (obj, stream) -> stream.writeVal(obj.toString()));
23+
JsoniterSpi.registerTypeDecoder(UUID.class, iter -> UUID.fromString(iter.readString()));
24+
JsoniterSpi.registerTypeEncoder(LocalDate.class, (obj, stream) -> stream.writeVal(obj.toString()));
25+
JsoniterSpi.registerTypeDecoder(LocalDate.class, iter -> LocalDate.parse(iter.readString()));
26+
JsoniterSpi.registerTypeEncoder(OffsetDateTime.class, (obj, stream) -> stream.writeVal(obj.toString()));
27+
JsoniterSpi.registerTypeDecoder(OffsetDateTime.class, iter -> OffsetDateTime.parse(iter.readString()));
28+
PreciseFloatSupport.enable();
29+
}
30+
}

src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public enum BenchSupport {
5656
new Libapi(Library.JODD, Api.DATABIND),
5757
new Libapi(Library.MOSHI, Api.DATABIND),
5858
new Libapi(Library.TAPESTRY),
59-
new Libapi(false, Library.JSONITER, Api.DATABIND),
59+
new Libapi(Library.JSONITER, Api.DATABIND),
6060
new Libapi(Library.MINIMALJSON)
6161
);
6262

src/test/java/com/github/fabienrenaud/jjb/databind/ClientsDeserializationTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,4 @@ public void jsonsmart() throws Exception {
4141
public void johnzon() throws Exception {
4242
// FIXME: does not work
4343
}
44-
45-
@Override
46-
public void jsoniter() throws Exception {
47-
// FIXME: does not work
48-
}
4944
}

src/test/java/com/github/fabienrenaud/jjb/databind/ClientsSerializationTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ public void johnzon() throws Exception {
3737
// FIXME: does not work
3838
}
3939

40-
@Override
41-
public void jsoniter() throws Exception {
42-
// FIXME: does not work
43-
}
44-
4540
@Override
4641
public void jsonsmart() throws Exception {
4742
// FIXME: tried to access field java.time.LocalDate.month

0 commit comments

Comments
 (0)