1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.jms.support.converter;
18
19 import java.util.Map;
20 import javax.jms.JMSException;
21 import javax.jms.Session;
22
23 import org.springframework.beans.factory.InitializingBean;
24 import org.springframework.jms.support.JmsHeaderMapper;
25 import org.springframework.jms.support.SimpleJmsHeaderMapper;
26 import org.springframework.messaging.Message;
27 import org.springframework.messaging.support.MessageBuilder;
28 import org.springframework.util.Assert;
29
30
31
32
33
34
35
36
37
38
39 public class MessagingMessageConverter implements MessageConverter, InitializingBean {
40
41 private MessageConverter payloadConverter;
42
43 private JmsHeaderMapper headerMapper;
44
45
46
47
48
49
50
51 public MessagingMessageConverter() {
52 this(new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
53 }
54
55
56
57
58
59 public MessagingMessageConverter(MessageConverter payloadConverter, JmsHeaderMapper headerMapper) {
60 Assert.notNull(payloadConverter, "PayloadConverter must not be null");
61 Assert.notNull(headerMapper, "HeaderMapper must not be null");
62 this.payloadConverter = payloadConverter;
63 this.headerMapper = headerMapper;
64 }
65
66
67
68
69
70 public void setPayloadConverter(MessageConverter payloadConverter) {
71 this.payloadConverter = payloadConverter;
72 }
73
74
75
76
77
78 public void setHeaderMapper(JmsHeaderMapper headerMapper) {
79 this.headerMapper = headerMapper;
80 }
81
82 @Override
83 public void afterPropertiesSet() {
84 Assert.notNull(this.payloadConverter, "Property 'payloadConverter' is required");
85 Assert.notNull(this.headerMapper, "Property 'headerMapper' is required");
86 }
87
88
89 @Override
90 public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
91 if (!(object instanceof Message)) {
92 throw new IllegalArgumentException("Could not convert [" + object + "] - only [" +
93 Message.class.getName() + "] is handled by this converter");
94 }
95 Message<?> input = (Message<?>) object;
96 javax.jms.Message reply = this.payloadConverter.toMessage(input.getPayload(), session);
97 this.headerMapper.fromHeaders(input.getHeaders(), reply);
98 return reply;
99 }
100
101 @SuppressWarnings("unchecked")
102 @Override
103 public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException {
104 if (message == null) {
105 return null;
106 }
107 Map<String, Object> mappedHeaders = this.headerMapper.toHeaders(message);
108 Object convertedObject = extractPayload(message);
109 MessageBuilder<Object> builder = (convertedObject instanceof org.springframework.messaging.Message) ?
110 MessageBuilder.fromMessage((org.springframework.messaging.Message<Object>) convertedObject) :
111 MessageBuilder.withPayload(convertedObject);
112 return builder.copyHeadersIfAbsent(mappedHeaders).build();
113 }
114
115
116
117
118 protected Object extractPayload(javax.jms.Message message) throws JMSException {
119 return this.payloadConverter.fromMessage(message);
120 }
121
122 }