Skip to content

Commit cfdd10b

Browse files
authored
Fix serialization of Long inside of Request.data (#2051)
* Fix serialization of Long inside Request data * Add changelog * Remove special handling for byte and short
1 parent ad91a62 commit cfdd10b

File tree

4 files changed

+49
-11
lines changed

4 files changed

+49
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
### Fixes
2222

2323
- SentryThread.current flag will not be overridden by DefaultAndroidEventProcessor if already set ([#2050](https://github.com/getsentry/sentry-java/pull/2050))
24+
- Fix serialization of Long inside of Request.data ([#2051](https://github.com/getsentry/sentry-java/pull/2051))
2425

2526
## 6.0.0-beta.3
2627

sentry/src/main/java/io/sentry/JsonReflectionObjectSerializer.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,7 @@ public final class JsonReflectionObjectSerializer {
3333
}
3434
if (object instanceof Character) {
3535
return object.toString();
36-
} else if (object instanceof Byte) {
37-
return ((Byte) object).intValue();
38-
} else if (object instanceof Short) {
39-
return ((Short) object).intValue();
40-
} else if (object instanceof Integer) {
41-
return object;
42-
} else if (object instanceof Float) {
43-
return object;
44-
} else if (object instanceof Double) {
36+
} else if (object instanceof Number) {
4537
return object;
4638
} else if (object instanceof Boolean) {
4739
return object;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class JsonReflectionObjectSerializerTest {
2626
true
2727
)
2828
val expected = mapOf(
29-
"byte" to 17,
30-
"short" to 3,
29+
"byte" to 17.toByte(),
30+
"short" to 3.toShort(),
3131
"char" to "x",
3232
"integer" to 9001,
3333
"float" to 0.9f,

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.nhaarman.mockitokotlin2.verify
99
import com.nhaarman.mockitokotlin2.whenever
1010
import io.sentry.exception.SentryEnvelopeException
1111
import io.sentry.protocol.Device
12+
import io.sentry.protocol.Request
1213
import io.sentry.protocol.SdkVersion
1314
import io.sentry.protocol.SentryId
1415
import io.sentry.protocol.SentrySpan
@@ -846,6 +847,50 @@ class JsonSerializerTest {
846847
assertNull(deserialized?.threads)
847848
}
848849

850+
@Test
851+
fun `Long can be serialized inside request data`() {
852+
val request = Request()
853+
854+
data class LongContainer(val longValue: Long)
855+
856+
request.data = LongContainer(10)
857+
858+
val serialized = serializeToString(request)
859+
val deserialized = fixture.serializer.deserialize(StringReader(serialized), Request::class.java)
860+
861+
val deserializedData = deserialized?.data as? Map<String, Any>
862+
assertNotNull(deserializedData)
863+
assertEquals(10, deserializedData["longValue"])
864+
}
865+
866+
@Test
867+
fun `Primitives can be serialized inside request data`() {
868+
val request = Request()
869+
870+
request.data = JsonReflectionObjectSerializerTest.ClassWithPrimitiveFields(
871+
17,
872+
3,
873+
'x',
874+
9001,
875+
0.9f,
876+
0.99,
877+
true
878+
)
879+
880+
val serialized = serializeToString(request)
881+
val deserialized = fixture.serializer.deserialize(StringReader(serialized), Request::class.java)
882+
883+
val deserializedData = deserialized?.data as? Map<String, Any>
884+
assertNotNull(deserializedData)
885+
assertEquals(17, deserializedData["byte"])
886+
assertEquals(3, deserializedData["short"])
887+
assertEquals("x", deserializedData["char"])
888+
assertEquals(9001, deserializedData["integer"])
889+
assertEquals(0.9, deserializedData["float"])
890+
assertEquals(0.99, deserializedData["double"])
891+
assertEquals(true, deserializedData["boolean"])
892+
}
893+
849894
@Test
850895
fun `json serializer uses logger set on SentryOptions`() {
851896
val logger = mock<ILogger>()

0 commit comments

Comments
 (0)