/** * */ @Override public <T> boolean send(T payload, Map<String, ?> messageHeaders, long timeout) { if (this.toSpringChannel != null){ return this.toSpringChannel.send(MessageBuilder.withPayload(payload).copyHeaders(messageHeaders).build(), timeout); } else { throw new IllegalStateException("Failed to send message to '" + this.configName + "'. There are no 'fromNiFi' channels configured which means the Application Conetxt is not set up to receive messages from NiFi"); } }
@Override public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) { if (headers != null) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { return MessageBuilder.createMessage(payload, accessor.getMessageHeaders()); } } return MessageBuilder.withPayload(payload).copyHeaders(headers).build(); }
@Test public void testCopySameHeaderValuesNotModifiedSameMessage() throws Exception { Date current = new Date(); Map<String, Object> originalHeaders = new HashMap<>(); originalHeaders.put("b", "xyz"); originalHeaders.put("c", current); Message<?> original = MessageBuilder.withPayload("foo").setHeader("a", 123).copyHeaders(originalHeaders).build(); Map<String, Object> newHeaders = new HashMap<>(); newHeaders.put("a", 123); newHeaders.put("b", "xyz"); newHeaders.put("c", current); Message<?> result = MessageBuilder.fromMessage(original).copyHeaders(newHeaders).build(); assertEquals(original, result); }
public void execute(IntegrationActivityBehavior receiveTaskActivityBehavior, DelegateExecution execution) { Map<String, Object> stringObjectMap = new HashMap<String, Object>(); stringObjectMap.put(executionId, execution.getId()); stringObjectMap.put(processInstanceId, execution.getProcessInstanceId()); stringObjectMap.put(processDefinitionId, execution.getProcessDefinitionId()); stringObjectMap.putAll(headerMapper.toHeaders(execution.getVariables())); MessageBuilder<?> mb = MessageBuilder.withPayload(execution).copyHeaders(stringObjectMap); Message<?> reply = sendAndReceiveMessage(mb.build()); if (null != reply) { Map<String, Object> vars = new HashMap<String, Object>(); headerMapper.fromHeaders(reply.getHeaders(), vars); for (String k : vars.keySet()) { processEngine.getRuntimeService().setVariable(execution.getId(), k, vars.get(k)); } receiveTaskActivityBehavior.leave(execution); } }
@Override @Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { if (!canConvertTo(payload, headers)) { return null; } Object payloadToUse = convertToInternal(payload, headers, conversionHint); if (payloadToUse == null) { return null; } MimeType mimeType = getDefaultContentType(payloadToUse); if (headers != null) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { if (mimeType != null) { accessor.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); } return MessageBuilder.createMessage(payloadToUse, accessor.getMessageHeaders()); } } MessageBuilder<?> builder = MessageBuilder.withPayload(payloadToUse); if (headers != null) { builder.copyHeaders(headers); } if (mimeType != null) { builder.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); } return builder.build(); }
@Before public void setup() throws Exception { this.resolver = new HeadersMethodArgumentResolver(); Method method = getClass().getDeclaredMethod("handleMessage", Map.class, String.class, MessageHeaders.class, MessageHeaderAccessor.class, TestMessageHeaderAccessor.class); this.paramAnnotated = new MethodParameter(method, 0); this.paramAnnotatedNotMap = new MethodParameter(method, 1); this.paramMessageHeaders = new MethodParameter(method, 2); this.paramMessageHeaderAccessor = new MethodParameter(method, 3); this.paramMessageHeaderAccessorSubclass = new MethodParameter(method, 4); Map<String, Object> headers = new HashMap<>(); headers.put("foo", "bar"); this.message = MessageBuilder.withPayload(new byte[0]).copyHeaders(headers).build(); }
private Message<String> message() { Map<String, Object> headersToCopy = messageHeaders.toMap(); return MessageBuilder.withPayload("hi").copyHeaders(headersToCopy).build(); } }
@Test public void testCopiedHeaderValues() { Message<String> message1 = MessageBuilder.withPayload("test1") .setHeader("foo", "1") .setHeader("bar", "2") .build(); Message<String> message2 = MessageBuilder.withPayload("test2") .copyHeaders(message1.getHeaders()) .setHeader("foo", "42") .setHeaderIfAbsent("bar", "99") .build(); assertEquals("test1", message1.getPayload()); assertEquals("test2", message2.getPayload()); assertEquals("1", message1.getHeaders().get("foo")); assertEquals("42", message2.getHeaders().get("foo")); assertEquals("2", message1.getHeaders().get("bar")); assertEquals("2", message2.getHeaders().get("bar")); }
private Message<?> createInputMessage(String sessId, String subsId, String dest, Principal principal) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(); headers.setSessionId(sessId); headers.setSubscriptionId(subsId); headers.setDestination(dest); headers.setUser(principal); return MessageBuilder.withPayload(new byte[0]).copyHeaders(headers.toMap()).build(); }
Message<String> message = MessageBuilder.withPayload("test").copyHeaders(mappedHeaders).build(); JmsMessageHeaderAccessor headerAccessor = JmsMessageHeaderAccessor.wrap(message); assertEquals("correlation-1234", headerAccessor.getCorrelationId());
@SuppressWarnings("unchecked") private void sendReplyForMessageSource(Object result, String topic, Object source, byte[] correlationId) { MessageBuilder<Object> builder = MessageBuilder.withPayload(result) .setHeader(KafkaHeaders.TOPIC, topic); if (this.replyHeadersConfigurer != null) { Map<String, Object> headersToCopy = ((Message<?>) source).getHeaders().entrySet().stream() .filter(e -> { String key = e.getKey(); return !key.equals(MessageHeaders.ID) && !key.equals(MessageHeaders.TIMESTAMP) && !key.equals(KafkaHeaders.CORRELATION_ID) && !key.startsWith(KafkaHeaders.RECEIVED); }) .filter(e -> this.replyHeadersConfigurer.shouldCopy(e.getKey(), e.getValue())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (headersToCopy.size() > 0) { builder.copyHeaders(headersToCopy); } headersToCopy = this.replyHeadersConfigurer.additionalHeaders(); if (!ObjectUtils.isEmpty(headersToCopy)) { builder.copyHeaders(headersToCopy); } } if (correlationId != null) { builder.setHeader(KafkaHeaders.CORRELATION_ID, correlationId); } setPartition(builder, ((Message<?>) source)); this.replyTemplate.send(builder.build()); }
@Override protected Message<?> doConvert(Object payload, Map<String, Object> headers, MessagePostProcessor postProcessor) { String content; if (payload instanceof String) { content = (String) payload; } else { // if payload not as string, use objectMapper change it. try { content = objectMapper.writeValueAsString(payload); } catch (JsonProcessingException e) { log.info("convert payload to String failed. payload:{}", payload); throw new RuntimeException("convert to payload to String failed.", e); } } MessageBuilder<?> builder = MessageBuilder.withPayload(content); if (headers != null) { builder.copyHeaders(headers); } builder.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN); Message<?> message = builder.build(); if (postProcessor != null) { message = postProcessor.postProcessMessage(message); } return message; }
@Override public void handleException(StompSession session, @Nullable StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) { Message<byte[]> failedMessage; if (command != null) { StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.create(command, headers); failedMessage = MessageBuilder.createMessage(payload, stompHeaderAccessor.getMessageHeaders()); } else { failedMessage = MessageBuilder.withPayload(payload) .copyHeaders(headers) .build(); } logger.error("The exception for session [" + session + "] on message [" + failedMessage + "]", exception); }
@Override public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) { if (headers != null) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { return MessageBuilder.createMessage(payload, accessor.getMessageHeaders()); } } return MessageBuilder.withPayload(payload).copyHeaders(headers).build(); }
@Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (beanName.equals("interceptedSource")) { ProxyFactory pf = new ProxyFactory(bean); pf.addAdvice((MethodInterceptor) invocation -> { if (invocation.getMethod().getName().equals("receive")) { org.springframework.messaging.Message<?> message = (org.springframework.messaging.Message<?>) invocation.proceed(); if (message == null) { return null; } return MessageBuilder.withPayload(((String) message.getPayload()).toUpperCase()) .copyHeaders(message.getHeaders()) .build(); } else { return invocation.proceed(); } }); return pf.getProxy(); } return bean; }
private static void startResponder(final PollableChannel requestChannel) { new Thread(() -> { Message<?> input = requestChannel.receive(); String payload = input.getPayload() + "bar"; Message<?> reply = MessageBuilder.withPayload(payload) .copyHeaders(input.getHeaders()) .build(); try { Thread.sleep(200); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } String header = (String) input.getHeaders().get("method"); if (header != null && header.startsWith("returnCustomFuture")) { reply = MessageBuilder.withPayload(new CustomFuture(payload, (Thread) input.getHeaders().get("thread"))) .copyHeaders(input.getHeaders()) .build(); } ((MessageChannel) input.getHeaders().getReplyChannel()).send(reply); }).start(); }
@Override @Nullable public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { if (!canConvertTo(payload, headers)) { return null; } Object payloadToUse = convertToInternal(payload, headers, conversionHint); if (payloadToUse == null) { return null; } MimeType mimeType = getDefaultContentType(payloadToUse); if (headers != null) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { if (mimeType != null) { accessor.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); } return MessageBuilder.createMessage(payloadToUse, accessor.getMessageHeaders()); } } MessageBuilder<?> builder = MessageBuilder.withPayload(payloadToUse); if (headers != null) { builder.copyHeaders(headers); } if (mimeType != null) { builder.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType); } return builder.build(); }
@Override public void handleException(StompSession session, @Nullable StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) { MessageChannel errorChannel = getErrorChannel(); if (errorChannel != null) { Message<byte[]> failedMessage; // TODO 5.2 Copy all the STOMP headers for error message without any mapping Map<String, Object> headersToCopy = StompInboundChannelAdapter.this.headerMapper.toHeaders(headers); if (command != null) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(command); headerAccessor.copyHeaders(headersToCopy); failedMessage = MessageBuilder.createMessage(payload, headerAccessor.getMessageHeaders()); } else { failedMessage = MessageBuilder.withPayload(payload) .copyHeaders(headersToCopy) .build(); } getMessagingTemplate() .send(errorChannel, new ErrorMessage(new MessageHandlingException(failedMessage, exception))); } else { logger.error("STOMP Frame handling error.", exception); } }
@Override public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) { if (headers != null) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { return MessageBuilder.createMessage(payload, accessor.getMessageHeaders()); } } return MessageBuilder.withPayload(payload).copyHeaders(headers).build(); }
@Override public org.springframework.messaging.Message convertOutbound(Message internalMessage, ChannelEndpointConfiguration endpointConfiguration, TestContext context) { if (endpointConfiguration.isUseObjectMessages()) { return MessageBuilder.withPayload(internalMessage) .build(); } else { return MessageBuilder.withPayload(internalMessage.getPayload()) .copyHeaders(internalMessage.getHeaders()) .build(); } }