I resolved it this way.. Couldn't think of anything else...
1. Wrote custom messagestore extending JdbcMessageStore
2. Wrote custom serializer extending DefaultSerializer and deserializer extending DefaultDeserializer.
I would like to know if this can be done any simpler :
Custom messageStore
Code:
@SuppressWarnings({ "unchecked", "rawtypes" })
public QuoteMesssageStore(QuoteDefaultSerializer serializer, QuoteDefaultDeserializer deserializer, DataSource dataSource ) {
super.setSerializer(serializer);
super.setDeserializer((Deserializer) deserializer);
super.setDataSource(dataSource);
logger.info("Setting Constructor based seralizer / deserializer and dataSource");
}
Serializer:
Code:
public class QuoteDefaultSerializer extends DefaultSerializer {
private Marshaller marshaller;
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
@Override
public void serialize(Object object, OutputStream outputStream) throws IOException {
Message<?> message = (Message<?>) object;
FndtMsg fndtMsg = (FndtMsg) message.getPayload();
StringResult strResult = new StringResult();
marshaller.marshal(fndtMsg, strResult);
Message<?> newMessage = MessageBuilder.withPayload(strResult.toString()).copyHeaders(message.getHeaders()).build();
super.serialize(newMessage, outputStream);
}
}
Deserializer:
Code:
public class QuoteDefaultDeserializer extends DefaultDeserializer {
private Unmarshaller unmarshaller;
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
@Override
public Object deserialize(InputStream inputStream) throws IOException {
Message<?> message = (Message<?>) super.deserialize(inputStream);
String fndtMessageString = (String) message.getPayload();
FndtMsg fndtMsg = (FndtMsg) unmarshaller.unmarshal(new StringSource(fndtMessageString));
return MessageBuilder.withPayload(fndtMsg).copyHeaders(message.getHeaders()).build();
}
}