ActiveMQSession amqSession = getAMQSession(session);
if (wrapper instanceof MimeMessageCopyOnWriteProxy) {
wrapper = ((MimeMessageCopyOnWriteProxy)mm).getWrappedMessage();
}
BlobMessage blobMessage = null;
if (wrapper instanceof MimeMessageWrapper) {
URL blobUrl = (URL) mail.getAttribute(JAMES_BLOB_URL);
String fromQueue = (String) mail.getAttribute(JAMES_QUEUE_NAME);
MimeMessageWrapper mwrapper = (MimeMessageWrapper) wrapper;
if (blobUrl != null && fromQueue != null && fromQueue.equals(queuename) && mwrapper.isModified() == false ) {
// the message content was not changed so don't need to upload it again and can just point to the url
blobMessage = amqSession.createBlobMessage(blobUrl);
// thats important so we don't delete the blob file after complete the processing!
mail.setAttribute(JAMES_REUSE_BLOB_URL, true);
}
}
if (blobMessage == null) {
// just use the MimeMessageInputStream which can read every MimeMessage implementation
blobMessage = amqSession.createBlobMessage(new MimeMessageInputStream(wrapper));
}
// store the queue name in the props
props.put(JAMES_QUEUE_NAME, queuename);
Queue queue = session.createQueue(queuename);
producer = session.createProducer(queue);
Iterator<String> keys = props.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
blobMessage.setObjectProperty(key, props.get(key));
}
producer.send(blobMessage, Message.DEFAULT_DELIVERY_MODE, msgPrio, Message.DEFAULT_TIME_TO_LIVE);
} else {
super.produceMail(session, props, msgPrio, mail);
}