JsonMarshaller implements Marshaller { @Override public void marshal(Object obj, OutputStream out) { JsonObject jsonObj = marshal((Event)obj); JsonWriter writer = Json.createWriter(out); writer.writeObject(jsonObj); writer.close(); } JsonMarshaller(); @Activate void activate(ComponentContext componentContext); @Override void marshal(Object obj, OutputStream out); @Override String marshal(Object obj);  }
@Test public void testMarshal() throws Exception { Marshaller marshaller = new JsonMarshaller(); Map<String, Object> map = new HashMap<>(); map.put(EventConstants.TIMESTAMP, EXPECTED_TIMESTAMP); map.put("c", "d"); String jsonSt = marshaller.marshal(new Event(EXPECTED_TOPIC, map)); System.out.println(jsonSt); JsonReader reader = Json.createReader(new StringReader(jsonSt)); JsonObject jsonO = reader.readObject(); Assert.assertEquals("Timestamp string", "2016-02-02T15:59:40,634Z",jsonO.getString("@timestamp")); long ts = jsonO.getJsonNumber(EventConstants.TIMESTAMP).longValue(); Assert.assertEquals("timestamp long", EXPECTED_TIMESTAMP, ts); Assert.assertEquals("Topic", EXPECTED_TOPIC, jsonO.getString(EventConstants.EVENT_TOPIC.replace('.', '_'))); }
@Test public void testInnerMap() throws Exception { Marshaller marshaller = new JsonMarshaller(); Map<String, Object> map = new HashMap<>(); map.put(EventConstants.TIMESTAMP, EXPECTED_TIMESTAMP); map.put("test", "test"); Map<String, Object> inner = new HashMap<>(); inner.put("other", "other"); map.put("inner", inner); String jsonString = marshaller.marshal(new Event(EXPECTED_TOPIC, map)); System.out.println(jsonString); JsonReader reader = Json.createReader(new StringReader(jsonString)); JsonObject jsonObject = reader.readObject(); Assert.assertEquals("Timestamp string", "2016-02-02T15:59:40,634Z", jsonObject.getString("@timestamp")); long ts = jsonObject.getJsonNumber(EventConstants.TIMESTAMP).longValue(); Assert.assertEquals("timestamp long", EXPECTED_TIMESTAMP, ts); Assert.assertEquals("test", jsonObject.getString("test")); JsonObject innerObject = jsonObject.getJsonObject("inner"); Assert.assertEquals("other", innerObject.getString("other")); }