protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer) { MessageConsumer result = consumer; if (messageTracer != null) { final PrintWriter tracer = messageTracer; result = message -> { tracer.println(message); tracer.flush(); consumer.consume(message); }; } if (validateMessages) { result = new ReflectiveMessageValidator(result); } if (messageWrapper != null) { result = messageWrapper.apply(result); } return result; }
protected MessageConsumer wrapMessageConsumer(MessageConsumer consumer) { MessageConsumer result = consumer; if (messageTracer != null) { final PrintWriter tracer = messageTracer; result = message -> { tracer.println(message); tracer.flush(); consumer.consume(message); }; } if (validateMessages) { result = new ReflectiveMessageValidator(result); } if (messageWrapper != null) { result = messageWrapper.apply(result); } return result; }
@Test public void testSkipJsonElement() { final AtomicBoolean result = new AtomicBoolean(false); ReflectiveMessageValidator validator = new ReflectiveMessageValidator((message) -> { result.set(true); }); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); message.setParams(new JsonObject()); validator.consume(message); Assert.assertTrue(result.get()); }
@Test public void testRequestValidation() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); RequestMessage message = new RequestMessage(); message.setId("1"); message.setParams(new Object()); try { validator.consume(message); Assert.fail(); } catch (MessageIssueException e) { Assert.assertEquals("The accessor 'RequestMessage.getMethod()' must return a non-null value. Path: $.method", e.getMessage()); } }
@Test public void testNoViolation() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); Foo foo = new Foo(); foo.nonNullString = "test"; foo.nested = new Foo() {{ nonNullString = "something"; }}; message.setParams(foo); validator.consume(message); }
@Test public void testReflectionOnPropertiesOnly() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); Foo foo = new Foo(); foo.nonNullString = "test"; foo.nested = new Foo() {{ nonNullString = "something"; }}; foo.foos = new ArrayList<>(); foo.foos.add(new Foo()); message.setParams(foo); try { validator.consume(message); Assert.fail(); } catch (MessageIssueException e) { Assert.assertEquals("The accessor 'Foo.getNonNullString()' must return a non-null value. Path: $.params.foos[0].nonNullString", e.getMessage()); } }
@Test public void testNonNullViolated() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); message.setParams(new Foo()); try { validator.consume(message); Assert.fail(); } catch (MessageIssueException e) { Assert.assertEquals("The accessor 'Foo.getNonNullString()' must return a non-null value. Path: $.params.nonNullString", e.getMessage()); } }
@Test public void testRecursionViolation() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); Foo foo = new Foo(); foo.nonNullString = "test"; foo.nested = foo; message.setParams(foo); try { validator.consume(message); Assert.fail(); } catch (MessageIssueException e) { Assert.assertEquals("An element of the message has a direct or indirect reference to itself. Path: $.params.nested", e.getMessage()); } }
@Test public void testNonNullViolated_nested() { ReflectiveMessageValidator validator = new ReflectiveMessageValidator(); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); Foo foo = new Foo(); foo.nonNullString = "test"; foo.nested = new Foo(); message.setParams(foo); try { validator.consume(message); Assert.fail(); } catch (MessageIssueException e) { Assert.assertEquals("The accessor 'Foo.getNonNullString()' must return a non-null value. Path: $.params.nested.nonNullString", e.getMessage()); } }