Skip to content

Commit 56d8c1e

Browse files
authored
fix(serialization): Support primitive array serialization (#4968)
1 parent 106e5aa commit 56d8c1e

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Fixes
66

7+
- Support serialization of primitive arrays (boolean[], byte[], short[], char[], int[], long[], float[], double[]) ([#4968](https://github.com/getsentry/sentry-java/pull/4968))
78
- Session Replay: Improve network body parsing and truncation handling ([#4958](https://github.com/getsentry/sentry-java/pull/4958))
89

910
### Internal

sentry/src/main/java/io/sentry/JsonObjectSerializer.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import java.io.IOException;
77
import java.net.InetAddress;
88
import java.net.URI;
9+
import java.util.ArrayList;
910
import java.util.Arrays;
1011
import java.util.Calendar;
1112
import java.util.Collection;
1213
import java.util.Currency;
1314
import java.util.Date;
15+
import java.util.List;
1416
import java.util.Locale;
1517
import java.util.Map;
1618
import java.util.TimeZone;
@@ -53,6 +55,54 @@ public void serialize(
5355
((JsonSerializable) object).serialize(writer, logger);
5456
} else if (object instanceof Collection) {
5557
serializeCollection(writer, logger, (Collection<?>) object);
58+
} else if (object instanceof boolean[]) {
59+
final List<Boolean> bools = new ArrayList<>(((boolean[]) object).length);
60+
for (boolean b : ((boolean[]) object)) {
61+
bools.add(b);
62+
}
63+
serializeCollection(writer, logger, bools);
64+
} else if (object instanceof byte[]) {
65+
final List<Byte> bytes = new ArrayList<>(((byte[]) object).length);
66+
for (byte b : ((byte[]) object)) {
67+
bytes.add(b);
68+
}
69+
serializeCollection(writer, logger, bytes);
70+
} else if (object instanceof short[]) {
71+
final List<Short> shorts = new ArrayList<>(((short[]) object).length);
72+
for (short s : ((short[]) object)) {
73+
shorts.add(s);
74+
}
75+
serializeCollection(writer, logger, shorts);
76+
} else if (object instanceof char[]) {
77+
final List<Character> chars = new ArrayList<>(((char[]) object).length);
78+
for (char s : ((char[]) object)) {
79+
chars.add(s);
80+
}
81+
serializeCollection(writer, logger, chars);
82+
} else if (object instanceof int[]) {
83+
final List<Integer> ints = new ArrayList<>(((int[]) object).length);
84+
for (int i : ((int[]) object)) {
85+
ints.add(i);
86+
}
87+
serializeCollection(writer, logger, ints);
88+
} else if (object instanceof long[]) {
89+
final List<Long> longs = new ArrayList<>(((long[]) object).length);
90+
for (long l : ((long[]) object)) {
91+
longs.add(l);
92+
}
93+
serializeCollection(writer, logger, longs);
94+
} else if (object instanceof float[]) {
95+
final List<Float> floats = new ArrayList<>(((float[]) object).length);
96+
for (float f : ((float[]) object)) {
97+
floats.add(f);
98+
}
99+
serializeCollection(writer, logger, floats);
100+
} else if (object instanceof double[]) {
101+
final List<Double> doubles = new ArrayList<>(((double[]) object).length);
102+
for (double d : ((double[]) object)) {
103+
doubles.add(d);
104+
}
105+
serializeCollection(writer, logger, doubles);
56106
} else if (object.getClass().isArray()) {
57107
serializeCollection(writer, logger, Arrays.asList((Object[]) object));
58108
} else if (object instanceof Map) {

sentry/src/test/java/io/sentry/JsonObjectSerializerTest.kt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,79 @@ internal class JsonObjectSerializerTest {
101101
verify(fixture.writer).endArray()
102102
}
103103

104+
@Suppress("RemoveRedundantCallsOfConversionMethods")
105+
@Test
106+
fun `serializing primitive int array`() {
107+
fixture.getSUT().serialize(fixture.writer, fixture.logger, intArrayOf(1, 2))
108+
verify(fixture.writer).beginArray()
109+
verify(fixture.writer).value(1.toInt())
110+
verify(fixture.writer).value(2.toInt())
111+
verify(fixture.writer).endArray()
112+
}
113+
114+
@Test
115+
fun `serializing primitive boolean array`() {
116+
fixture.getSUT().serialize(fixture.writer, fixture.logger, booleanArrayOf(true, false))
117+
verify(fixture.writer).beginArray()
118+
verify(fixture.writer).value(true)
119+
verify(fixture.writer).value(false)
120+
verify(fixture.writer).endArray()
121+
}
122+
123+
@Test
124+
fun `serializing primitive byte array`() {
125+
fixture.getSUT().serialize(fixture.writer, fixture.logger, byteArrayOf(1, 2))
126+
verify(fixture.writer).beginArray()
127+
verify(fixture.writer).value(1.toByte())
128+
verify(fixture.writer).value(2.toByte())
129+
verify(fixture.writer).endArray()
130+
}
131+
132+
@Test
133+
fun `serializing primitive short array`() {
134+
fixture.getSUT().serialize(fixture.writer, fixture.logger, shortArrayOf(1, 2))
135+
verify(fixture.writer).beginArray()
136+
verify(fixture.writer).value(1.toShort())
137+
verify(fixture.writer).value(2.toShort())
138+
verify(fixture.writer).endArray()
139+
}
140+
141+
@Test
142+
fun `serializing primitive char array`() {
143+
fixture.getSUT().serialize(fixture.writer, fixture.logger, charArrayOf('a', 'b'))
144+
verify(fixture.writer).beginArray()
145+
verify(fixture.writer).value("a")
146+
verify(fixture.writer).value("b")
147+
verify(fixture.writer).endArray()
148+
}
149+
150+
@Test
151+
fun `serializing primitive long array`() {
152+
fixture.getSUT().serialize(fixture.writer, fixture.logger, longArrayOf(1L, 2L))
153+
verify(fixture.writer).beginArray()
154+
verify(fixture.writer).value(1L as Number)
155+
verify(fixture.writer).value(2L as Number)
156+
verify(fixture.writer).endArray()
157+
}
158+
159+
@Test
160+
fun `serializing primitive float array`() {
161+
fixture.getSUT().serialize(fixture.writer, fixture.logger, floatArrayOf(1.5f, 2.5f))
162+
verify(fixture.writer).beginArray()
163+
verify(fixture.writer).value(1.5f as Number)
164+
verify(fixture.writer).value(2.5f as Number)
165+
verify(fixture.writer).endArray()
166+
}
167+
168+
@Test
169+
fun `serializing primitive double array`() {
170+
fixture.getSUT().serialize(fixture.writer, fixture.logger, doubleArrayOf(1.5, 2.5))
171+
verify(fixture.writer).beginArray()
172+
verify(fixture.writer).value(1.5 as Number)
173+
verify(fixture.writer).value(2.5 as Number)
174+
verify(fixture.writer).endArray()
175+
}
176+
104177
@Test
105178
fun `serialize map`() {
106179
fixture

0 commit comments

Comments
 (0)