diff --git a/rollbar-android/src/main/java/com/rollbar/android/Rollbar.java b/rollbar-android/src/main/java/com/rollbar/android/Rollbar.java index 7e69c99f..5ec2e2d0 100644 --- a/rollbar-android/src/main/java/com/rollbar/android/Rollbar.java +++ b/rollbar-android/src/main/java/com/rollbar/android/Rollbar.java @@ -793,6 +793,15 @@ public void log(final Throwable error, final Map custom, final S rollbar.log(error, custom, description, level); } + /** + * Send payload to Rollbar. + * + * @param payload JSON payload string. + */ + public void sendJsonPayload(String json) { + rollbar.sendJsonPayload(json); + } + /** * report an exception to Rollbar * @param throwable the exception that occurred. diff --git a/rollbar-api/src/main/java/com/rollbar/api/payload/Payload.java b/rollbar-api/src/main/java/com/rollbar/api/payload/Payload.java index e9bf53b1..6248faa5 100755 --- a/rollbar-api/src/main/java/com/rollbar/api/payload/Payload.java +++ b/rollbar-api/src/main/java/com/rollbar/api/payload/Payload.java @@ -15,9 +15,23 @@ public class Payload implements JsonSerializable { private final Data data; + public final String json; + private Payload(Builder builder) { this.accessToken = builder.accessToken; this.data = builder.data; + this.json = null; + } + + /** + * Constructor. + * + * @param json the JSON payload. + */ + public Payload(String json) { + this.accessToken = null; + this.data = null; + this.json = json; } /** diff --git a/rollbar-api/src/test/java/com/rollbar/api/payload/PayloadTest.java b/rollbar-api/src/test/java/com/rollbar/api/payload/PayloadTest.java index 53b1a150..868a0afb 100644 --- a/rollbar-api/src/test/java/com/rollbar/api/payload/PayloadTest.java +++ b/rollbar-api/src/test/java/com/rollbar/api/payload/PayloadTest.java @@ -52,4 +52,13 @@ public void shouldReturnAsJson() { assertEquals(expected, payload.asJson()); } -} \ No newline at end of file + + @Test + public void shouldReturnJsonAsJson() { + String json = "{\"foo\":\"bar\"}"; + + Payload payload = new Payload(json); + + assertEquals(json, payload.json); + } +} diff --git a/rollbar-java/src/main/java/com/rollbar/notifier/Rollbar.java b/rollbar-java/src/main/java/com/rollbar/notifier/Rollbar.java index 7cc21105..e477f682 100644 --- a/rollbar-java/src/main/java/com/rollbar/notifier/Rollbar.java +++ b/rollbar-java/src/main/java/com/rollbar/notifier/Rollbar.java @@ -642,6 +642,23 @@ public void close(boolean wait) throws Exception { this.config.sender().close(wait); } + /** + * Send JSON payload. + * + * @param json the json payload. + */ + public void sendJsonPayload(String json) { + try { + this.configReadLock.lock(); + Config config = this.config; + this.configReadLock.unlock(); + + sendPayload(config, new Payload(json)); + } catch (Exception e) { + LOGGER.error("Error while sending payload to Rollbar: {}", e); + } + } + private void process(ThrowableWrapper error, Map custom, String description, Level level, boolean isUncaught) { this.configReadLock.lock(); @@ -652,7 +669,7 @@ private void process(ThrowableWrapper error, Map custom, String LOGGER.debug("Notifier disabled."); return; } - + // Pre filter if (config.filter() != null && config.filter().preProcess(level, error.getThrowable(), custom, description)) { diff --git a/rollbar-java/src/main/java/com/rollbar/notifier/sender/json/JsonSerializerImpl.java b/rollbar-java/src/main/java/com/rollbar/notifier/sender/json/JsonSerializerImpl.java index 409b8605..0414ccda 100755 --- a/rollbar-java/src/main/java/com/rollbar/notifier/sender/json/JsonSerializerImpl.java +++ b/rollbar-java/src/main/java/com/rollbar/notifier/sender/json/JsonSerializerImpl.java @@ -59,6 +59,10 @@ public JsonSerializerImpl(boolean prettyPrint) { @Override public String toJson(Payload payload) { + if (payload.json != null) { + return payload.json; + } + StringBuilder builder = new StringBuilder(); serializeValue(builder, payload, 0); return builder.toString(); diff --git a/rollbar-java/src/test/java/com/rollbar/notifier/RollbarTest.java b/rollbar-java/src/test/java/com/rollbar/notifier/RollbarTest.java index 26939d3b..86de3b46 100644 --- a/rollbar-java/src/test/java/com/rollbar/notifier/RollbarTest.java +++ b/rollbar-java/src/test/java/com/rollbar/notifier/RollbarTest.java @@ -410,6 +410,20 @@ public Data transform(Data data) { sut.log(error, null, null, Level.ERROR); } + @Test + public void shouldSendPayloadAsJson() { + Config config = withAccessToken("access_token") + .sender(sender) + .build(); + Rollbar sut = new Rollbar(config); + String json = "{\"foo\":\"bar\"}"; + Payload payload = new Payload(json); + + sut.sendJsonPayload(json); + + verify(sender).send(payload); + } + @Test public void shouldLogWithLogMethod() { Config config = withAccessToken(ACCESS_TOKEN) diff --git a/rollbar-java/src/test/java/com/rollbar/notifier/sender/json/JsonSerializerImplTest.java b/rollbar-java/src/test/java/com/rollbar/notifier/sender/json/JsonSerializerImplTest.java index b0b43baf..62d1816a 100644 --- a/rollbar-java/src/test/java/com/rollbar/notifier/sender/json/JsonSerializerImplTest.java +++ b/rollbar-java/src/test/java/com/rollbar/notifier/sender/json/JsonSerializerImplTest.java @@ -4,6 +4,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; +import com.rollbar.api.payload.Payload; import com.rollbar.notifier.sender.result.Result; import org.junit.Test; @@ -42,4 +43,15 @@ public void shouldDeserializeSuccessResponse() { assertThat(sut.resultFrom(SUCCESS_RESPONSE), is(result)); } -} \ No newline at end of file + + @Test + public void shouldSerializeJsonPayload() { + String json = "{\"foo\":\"bar\"}"; + + Payload payload = new Payload(json); + + JsonSerializerImpl sut = new JsonSerializerImpl(); + + assertThat(sut.toJson(payload), is(json)); + } +}