1 package org
.asamk
.signal
;
3 import com
.fasterxml
.jackson
.annotation
.JsonAutoDetect
;
4 import com
.fasterxml
.jackson
.annotation
.PropertyAccessor
;
5 import com
.fasterxml
.jackson
.core
.JsonGenerator
;
6 import com
.fasterxml
.jackson
.databind
.DeserializationFeature
;
7 import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
8 import com
.fasterxml
.jackson
.databind
.SerializationFeature
;
9 import com
.fasterxml
.jackson
.databind
.node
.ObjectNode
;
11 import org
.asamk
.signal
.json
.JsonError
;
12 import org
.asamk
.signal
.json
.JsonMessageEnvelope
;
13 import org
.asamk
.signal
.manager
.Manager
;
14 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceContent
;
15 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceEnvelope
;
17 import java
.io
.IOException
;
19 public class JsonReceiveMessageHandler
implements Manager
.ReceiveMessageHandler
{
22 private final ObjectMapper jsonProcessor
;
24 public JsonReceiveMessageHandler(Manager m
) {
26 this.jsonProcessor
= new ObjectMapper();
27 jsonProcessor
.setVisibility(PropertyAccessor
.ALL
, JsonAutoDetect
.Visibility
.ANY
); // disable autodetect
28 jsonProcessor
.enable(SerializationFeature
.WRITE_NULL_MAP_VALUES
);
29 jsonProcessor
.disable(DeserializationFeature
.FAIL_ON_UNKNOWN_PROPERTIES
);
30 jsonProcessor
.disable(JsonGenerator
.Feature
.AUTO_CLOSE_TARGET
);
34 public void handleMessage(SignalServiceEnvelope envelope
, SignalServiceContent content
, Throwable exception
) {
35 ObjectNode result
= jsonProcessor
.createObjectNode();
36 if (exception
!= null) {
37 result
.putPOJO("error", new JsonError(exception
));
39 if (envelope
!= null) {
40 result
.putPOJO("envelope", new JsonMessageEnvelope(envelope
, content
));
43 jsonProcessor
.writeValue(System
.out
, result
);
45 } catch (IOException e
) {