|
37 | 37 | import java.util.Map;
|
38 | 38 | import java.util.Optional;
|
39 | 39 | import java.util.Properties;
|
| 40 | +import java.util.UUID; |
40 | 41 | import java.util.concurrent.CountDownLatch;
|
41 | 42 | import java.util.concurrent.atomic.AtomicBoolean;
|
42 | 43 | import java.util.concurrent.atomic.AtomicReference;
|
|
74 | 75 | import org.springframework.messaging.MessageHeaders;
|
75 | 76 | import org.springframework.messaging.MessagingException;
|
76 | 77 | import org.springframework.messaging.handler.annotation.Header;
|
| 78 | +import org.springframework.messaging.handler.annotation.Payload; |
77 | 79 | import org.springframework.messaging.support.GenericMessage;
|
78 | 80 | import org.springframework.util.StopWatch;
|
79 | 81 |
|
@@ -809,6 +811,42 @@ public void handleMessage(Message<?> message) throws MessagingException {
|
809 | 811 | assertTrue(adviceCalled.get());
|
810 | 812 | }
|
811 | 813 |
|
| 814 | + @Test |
| 815 | + public void testProxyAndHeaderAnnotation() { |
| 816 | + final AtomicReference<Object> payloadReference = new AtomicReference<>(); |
| 817 | + final AtomicReference<UUID> idReference = new AtomicReference<>(); |
| 818 | + |
| 819 | + class MyHandler { |
| 820 | + |
| 821 | + public void handle(@Header(MessageHeaders.ID) UUID id, @Payload Object payload) { |
| 822 | + idReference.set(id); |
| 823 | + payloadReference.set(payload); |
| 824 | + } |
| 825 | + |
| 826 | + } |
| 827 | + |
| 828 | + MyHandler service = new MyHandler(); |
| 829 | + |
| 830 | + final AtomicBoolean adviceCalled = new AtomicBoolean(); |
| 831 | + ProxyFactory proxyFactory = new ProxyFactory(service); |
| 832 | + proxyFactory.addAdvice((MethodInterceptor) i -> { |
| 833 | + adviceCalled.set(true); |
| 834 | + return i.proceed(); |
| 835 | + }); |
| 836 | + service = (MyHandler) proxyFactory.getProxy(getClass().getClassLoader()); |
| 837 | + |
| 838 | + |
| 839 | + GenericMessage<String> testMessage = new GenericMessage<>("foo"); |
| 840 | + |
| 841 | + MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(service, "handle"); |
| 842 | + |
| 843 | + processor.processMessage(testMessage); |
| 844 | + |
| 845 | + assertEquals(testMessage.getPayload(), payloadReference.get()); |
| 846 | + assertEquals(testMessage.getHeaders().getId(), idReference.get()); |
| 847 | + assertTrue(adviceCalled.get()); |
| 848 | + } |
| 849 | + |
812 | 850 | @Test
|
813 | 851 | public void testUseSpelInvoker() throws Exception {
|
814 | 852 | UseSpelInvokerBean bean = new UseSpelInvokerBean();
|
|
0 commit comments