Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Fixes

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

### Internal
Expand Down
50 changes: 50 additions & 0 deletions sentry/src/main/java/io/sentry/JsonObjectSerializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Currency;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
Expand Down Expand Up @@ -53,6 +55,54 @@ public void serialize(
((JsonSerializable) object).serialize(writer, logger);
} else if (object instanceof Collection) {
serializeCollection(writer, logger, (Collection<?>) object);
} else if (object instanceof boolean[]) {
final List<Boolean> bools = new ArrayList<>(((boolean[]) object).length);
for (boolean b : ((boolean[]) object)) {
bools.add(b);
}
serializeCollection(writer, logger, bools);
} else if (object instanceof byte[]) {
final List<Byte> bytes = new ArrayList<>(((byte[]) object).length);
for (byte b : ((byte[]) object)) {
bytes.add(b);
}
serializeCollection(writer, logger, bytes);
} else if (object instanceof short[]) {
final List<Short> shorts = new ArrayList<>(((short[]) object).length);
for (short s : ((short[]) object)) {
shorts.add(s);
}
serializeCollection(writer, logger, shorts);
} else if (object instanceof char[]) {
final List<Character> chars = new ArrayList<>(((char[]) object).length);
for (char s : ((char[]) object)) {
chars.add(s);
}
serializeCollection(writer, logger, chars);
} else if (object instanceof int[]) {
final List<Integer> ints = new ArrayList<>(((int[]) object).length);
for (int i : ((int[]) object)) {
ints.add(i);
}
serializeCollection(writer, logger, ints);
} else if (object instanceof long[]) {
final List<Long> longs = new ArrayList<>(((long[]) object).length);
for (long l : ((long[]) object)) {
longs.add(l);
}
serializeCollection(writer, logger, longs);
} else if (object instanceof float[]) {
final List<Float> floats = new ArrayList<>(((float[]) object).length);
for (float f : ((float[]) object)) {
floats.add(f);
}
serializeCollection(writer, logger, floats);
} else if (object instanceof double[]) {
final List<Double> doubles = new ArrayList<>(((double[]) object).length);
Comment on lines +91 to +101

This comment was marked as outdated.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's a good point, but we may also address it later in a different PR

for (double d : ((double[]) object)) {
doubles.add(d);
}
serializeCollection(writer, logger, doubles);
} else if (object.getClass().isArray()) {
serializeCollection(writer, logger, Arrays.asList((Object[]) object));
} else if (object instanceof Map) {
Expand Down
73 changes: 73 additions & 0 deletions sentry/src/test/java/io/sentry/JsonObjectSerializerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,79 @@ internal class JsonObjectSerializerTest {
verify(fixture.writer).endArray()
}

@Suppress("RemoveRedundantCallsOfConversionMethods")
@Test
fun `serializing primitive int array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, intArrayOf(1, 2))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1.toInt())
verify(fixture.writer).value(2.toInt())
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive boolean array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, booleanArrayOf(true, false))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(true)
verify(fixture.writer).value(false)
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive byte array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, byteArrayOf(1, 2))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1.toByte())
verify(fixture.writer).value(2.toByte())
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive short array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, shortArrayOf(1, 2))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1.toShort())
verify(fixture.writer).value(2.toShort())
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive char array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, charArrayOf('a', 'b'))
verify(fixture.writer).beginArray()
verify(fixture.writer).value("a")
verify(fixture.writer).value("b")
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive long array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, longArrayOf(1L, 2L))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1L as Number)
verify(fixture.writer).value(2L as Number)
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive float array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, floatArrayOf(1.5f, 2.5f))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1.5f as Number)
verify(fixture.writer).value(2.5f as Number)
verify(fixture.writer).endArray()
}

@Test
fun `serializing primitive double array`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, doubleArrayOf(1.5, 2.5))
verify(fixture.writer).beginArray()
verify(fixture.writer).value(1.5 as Number)
verify(fixture.writer).value(2.5 as Number)
verify(fixture.writer).endArray()
}

@Test
fun `serialize map`() {
fixture
Expand Down
Loading