SagaMessageStream implements MessageStream { @Override public void handle(@Nonnull final Object message) throws InvocationTargetException, IllegalAccessException { checkNotNull(message, "Message to handle must not be null."); handle(message, null, null); } @Inject  SagaMessageStream(
            final HandlerInvoker invoker,
            final SagaEnvironment environment,
            final Executor executor); @Override void add(@Nonnull final Object message); @Override void add(@Nonnull final Object message, @Nullable final Map<String, Object> headers); @Override void addMessage(@Nonnull final Object message, @Nullable final Map<HeaderName<?>, Object> headers); @Override void handle(@Nonnull final Object message); @Override void handle(@Nonnull final Object message, @Nullable final ExecutionContext parentContext); @Override void handle(@Nonnull final Object message, @Nullable final Map<String, Object> headers); @Override void handleMessage(@Nonnull final Object message, @Nullable final Map<HeaderName<?>, Object> headers); @Override void handle(@Nonnull final Object message, @Nullable final Map<String, Object> headers, @Nullable final ExecutionContext parentContext); @Override void handleMessage(
            @Nonnull final Object message,
            @Nullable final Map<HeaderName<?>, Object> headers,
            @Nullable final ExecutionContext parentContext); @Override void close();  }
@Test public void handle_always_invokesSagaRightAway() throws InvocationTargetException, IllegalAccessException { String message = "theMessage"; sut.handle(message); ArgumentCaptor<InvocationContext> captor = ArgumentCaptor.forClass(InvocationContext.class); verify(invoker).invoke(captor.capture()); assertThat("Expected saga instance to be set.", captor.getValue().saga(), instanceOf(Saga.class)); assertThat("Expected message on invoker context.", captor.getValue().message(), equalTo(message)); }