Both,
I've had a go at implementing a Serializer and Deserializer for a MimeMailMessage. I am getting an e-mail delivered which is good news however, I am seeing odd behaviour in the logs. When I was using a simple mail message with the DefaultSerializer after my e-mail had been sent the TRACE logs went back to showing a poll finding no messages. I would guess that the messages were removed from the database once sent?
Now I am seeing a continuous stream of logs:
Code:
TRACE: org.springframework.integration.monitor.QueueChannelMetrics - Recording receive on channel(outboundMailChannel)
TRACE: org.springframework.integration.channel.QueueChannel - preReceive on channel 'outboundMailChannel'
DEBUG: org.springframework.integration.channel.QueueChannel - postReceive on channel 'outboundMailChannel', message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853688, id=89677c3a-297a-48e1-afd9-f173644c81b3, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
DEBUG: org.springframework.integration.endpoint.PollingConsumer - Poll resulted in Message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853688, id=89677c3a-297a-48e1-afd9-f173644c81b3, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
TRACE: org.springframework.integration.monitor.SimpleMessageHandlerMetrics - messageHandler(org.springframework.integration.mail.MailSendingMessageHandler#0) message([Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853688, id=89677c3a-297a-48e1-afd9-f173644c81b3, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]) :
DEBUG: org.springframework.integration.mail.MailSendingMessageHandler - org.springframework.integration.mail.MailSendingMessageHandler#0 received message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853688, id=89677c3a-297a-48e1-afd9-f173644c81b3, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Removing message from group with group key=9ea43c5e-5587-3754-ada7-99f7801195f2
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Updating MessageGroup: 9ea43c5e-5587-3754-ada7-99f7801195f2
TRACE: org.springframework.integration.monitor.QueueChannelMetrics - Recording receive on channel(outboundMailChannel)
TRACE: org.springframework.integration.channel.QueueChannel - preReceive on channel 'outboundMailChannel'
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Updating MessageGroup: 9ea43c5e-5587-3754-ada7-99f7801195f2
DEBUG: org.springframework.integration.channel.QueueChannel - postReceive on channel 'outboundMailChannel', message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853715, id=0ace5a05-fc81-49d9-b55c-8e86b904475b, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
DEBUG: org.springframework.integration.endpoint.PollingConsumer - Poll resulted in Message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853715, id=0ace5a05-fc81-49d9-b55c-8e86b904475b, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
TRACE: org.springframework.integration.monitor.SimpleMessageHandlerMetrics - messageHandler(org.springframework.integration.mail.MailSendingMessageHandler#0) message([Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853715, id=0ace5a05-fc81-49d9-b55c-8e86b904475b, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]) :
DEBUG: org.springframework.integration.mail.MailSendingMessageHandler - org.springframework.integration.mail.MailSendingMessageHandler#0 received message: [Payload=org.springframework.mail.javamail.MimeMailMessage@1577944][Headers={timestamp=1330642853715, id=0ace5a05-fc81-49d9-b55c-8e86b904475b, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}]
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Removing message from group with group key=9ea43c5e-5587-3754-ada7-99f7801195f2
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Updating MessageGroup: 9ea43c5e-5587-3754-ada7-99f7801195f2
DEBUG: org.springframework.integration.jdbc.JdbcMessageStore - Updating MessageGroup: 9ea43c5e-5587-3754-ada7-99f7801195f2
My GenericMessage headers are the same in my Serializer and Deserializer suggesting that they are correctly serialized and deserialized. My headers before and after are as follows:
Code:
{timestamp=1330642786346, id=62452ca5-d827-4ef3-8d72-3f0e761541ea, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}
{timestamp=1330642786346, id=62452ca5-d827-4ef3-8d72-3f0e761541ea, JdbcMessageStore.CREATED_DATE=1330642786346, JdbcMessageStore.SAVED=true}
Does anything obvious spring to mind?
My Serializer is as follows:
Code:
public void serialize(GenericMessage<MimeMailMessage> object,
OutputStream outputStream) throws IOException {MimeMailMessageStore store = new MimeMailMessageStore("test@test.com", "Test", "Test",object.getHeaders());
// -- Serialize the storage object
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(store);
objectOutputStream.flush();
Where the MimeMailMessageStore is an immutable class which implements Serializable and stores the recipient address, subject, content and message headers.
My deserializer is as follows:
Code:
@Inject
private MimeMailMessage mailMessage;
public GenericMessage<MimeMailMessage> deserialize(InputStream inputStream)
throws IOException {
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
/*// -- Attempt to recreate our message
try {
mailMessage.getMimeMessageHelper().setTo("test@test.com");
mailMessage.getMimeMessageHelper().setSubject("Test");
mailMessage.getMimeMessageHelper().setText("Text", true);
MimeMailMessageStore store = (MimeMailMessageStore) objectInputStream.readObject();
Map<String, Object> headers = new HashMap<String, Object>(store.getHeaders());
headers.put(MessageHeaders.ID, store.getHeaders().get(MessageHeaders.ID));
return new GenericMessage<MimeMailMessage>(
mailMessage, headers);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
where the MimeMailMessage is an injected prototype scoped bean.
Your thoughts and tips would be appreciated!