Skip to content

Commit af65fff

Browse files
committed
feat: enable sending complete JSON payloads, as proxy for other SDKs
1 parent c057e12 commit af65fff

File tree

7 files changed

+83
-3
lines changed

7 files changed

+83
-3
lines changed

rollbar-android/src/main/java/com/rollbar/android/Rollbar.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.rollbar.notifier.config.ConfigProvider;
1313
import com.rollbar.android.provider.NotifierProvider;
1414
import com.rollbar.android.provider.PersonProvider;
15+
import com.rollbar.api.payload.Payload;
1516
import com.rollbar.api.payload.data.Level;
1617
import com.rollbar.notifier.config.Config;
1718
import com.rollbar.notifier.config.ConfigBuilder;
@@ -793,6 +794,15 @@ public void log(final Throwable error, final Map<String, Object> custom, final S
793794
rollbar.log(error, custom, description, level);
794795
}
795796

797+
/**
798+
* Send payload to Rollbar.
799+
*
800+
* @param payload JSON payload string.
801+
*/
802+
public void sendJsonPayload(String json) {
803+
rollbar.sendJsonPayload(json);
804+
}
805+
796806
/**
797807
* report an exception to Rollbar
798808
* @param throwable the exception that occurred.

rollbar-api/src/main/java/com/rollbar/api/payload/Payload.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,23 @@ public class Payload implements JsonSerializable {
1515

1616
private final Data data;
1717

18+
public final String json;
19+
1820
private Payload(Builder builder) {
1921
this.accessToken = builder.accessToken;
2022
this.data = builder.data;
23+
this.json = null;
24+
}
25+
26+
/**
27+
* Constructor.
28+
*
29+
* @param json the JSON payload.
30+
*/
31+
public Payload(String json) {
32+
this.accessToken = null;
33+
this.data = null;
34+
this.json = json;
2135
}
2236

2337
/**

rollbar-api/src/test/java/com/rollbar/api/payload/PayloadTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,13 @@ public void shouldReturnAsJson() {
5252

5353
assertEquals(expected, payload.asJson());
5454
}
55-
}
55+
56+
@Test
57+
public void shouldReturnJsonAsJson() {
58+
String json = "{\"foo\":\"bar\"}";
59+
60+
Payload payload = new Payload(json);
61+
62+
assertEquals(json, payload.json);
63+
}
64+
}

rollbar-java/src/main/java/com/rollbar/notifier/Rollbar.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,23 @@ public void close(boolean wait) throws Exception {
642642
this.config.sender().close(wait);
643643
}
644644

645+
/**
646+
* Send JSON payload.
647+
*
648+
* @param json the json payload.
649+
*/
650+
public void sendJsonPayload(String json) {
651+
try {
652+
this.configReadLock.lock();
653+
Config config = this.config;
654+
this.configReadLock.unlock();
655+
656+
sendPayload(config, new Payload(json));
657+
} catch (Exception e) {
658+
LOGGER.error("Error while sending payload to Rollbar: {}", e);
659+
}
660+
}
661+
645662
private void process(ThrowableWrapper error, Map<String, Object> custom, String description,
646663
Level level, boolean isUncaught) {
647664
this.configReadLock.lock();
@@ -652,7 +669,7 @@ private void process(ThrowableWrapper error, Map<String, Object> custom, String
652669
LOGGER.debug("Notifier disabled.");
653670
return;
654671
}
655-
672+
656673
// Pre filter
657674
if (config.filter() != null && config.filter().preProcess(level, error.getThrowable(), custom,
658675
description)) {

rollbar-java/src/main/java/com/rollbar/notifier/sender/json/JsonSerializerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ public JsonSerializerImpl(boolean prettyPrint) {
5959

6060
@Override
6161
public String toJson(Payload payload) {
62+
if (payload.json != null) {
63+
return payload.json;
64+
}
65+
6266
StringBuilder builder = new StringBuilder();
6367
serializeValue(builder, payload, 0);
6468
return builder.toString();

rollbar-java/src/test/java/com/rollbar/notifier/RollbarTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,20 @@ public Data transform(Data data) {
410410
sut.log(error, null, null, Level.ERROR);
411411
}
412412

413+
@Test
414+
public void shouldSendPayloadAsJson() {
415+
Config config = withAccessToken("access_token")
416+
.sender(sender)
417+
.build();
418+
Rollbar sut = new Rollbar(config);
419+
String json = "{\"foo\":\"bar\"}";
420+
Payload payload = new Payload(json);
421+
422+
sut.sendJsonPayload(json);
423+
424+
verify(sender).send(payload);
425+
}
426+
413427
@Test
414428
public void shouldLogWithLogMethod() {
415429
Config config = withAccessToken(ACCESS_TOKEN)

rollbar-java/src/test/java/com/rollbar/notifier/sender/json/JsonSerializerImplTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.hamcrest.MatcherAssert.assertThat;
55
import static org.hamcrest.core.Is.is;
66

7+
import com.rollbar.api.payload.Payload;
78
import com.rollbar.notifier.sender.result.Result;
89
import org.junit.Test;
910

@@ -42,4 +43,15 @@ public void shouldDeserializeSuccessResponse() {
4243

4344
assertThat(sut.resultFrom(SUCCESS_RESPONSE), is(result));
4445
}
45-
}
46+
47+
@Test
48+
public void shouldSerializeJsonPayload() {
49+
String json = "{\"foo\":\"bar\"}";
50+
51+
Payload payload = new Payload(json);
52+
53+
JsonSerializerImpl sut = new JsonSerializerImpl();
54+
55+
assertThat(sut.toJson(payload), is(json));
56+
}
57+
}

0 commit comments

Comments
 (0)