You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2009/06/12 22:03:13 UTC
svn commit: r784256 - in
/servicemix/components/engines/servicemix-camel/trunk/src:
main/java/org/apache/servicemix/camel/JbiMessage.java
test/java/org/apache/servicemix/camel/JbiMessageTest.java
Author: gertv
Date: Fri Jun 12 20:03:13 2009
New Revision: 784256
URL: http://svn.apache.org/viewvc?rev=784256&view=rev
Log:
SMCOMP-569: Allow settings headers/attachments through the Map
Modified:
servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiMessage.java
servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiMessageTest.java
Modified: servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiMessage.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiMessage.java?rev=784256&r1=784255&r2=784256&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiMessage.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/JbiMessage.java Fri Jun 12 20:03:13 2009
@@ -16,6 +16,9 @@
*/
package org.apache.servicemix.camel;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.activation.DataHandler;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
@@ -36,7 +39,8 @@
}
public JbiMessage(NormalizedMessage normalizedMessage) {
- this.normalizedMessage = normalizedMessage;
+ super();
+ setNormalizedMessage(normalizedMessage);
}
@Override
@@ -62,8 +66,13 @@
return normalizedMessage;
}
- protected void setNormalizedMessage(NormalizedMessage normalizedMessage) {
+ protected final void setNormalizedMessage(NormalizedMessage normalizedMessage) {
this.normalizedMessage = normalizedMessage;
+ // copy all properties into the Camel Message
+ if (normalizedMessage != null) {
+ getHeaders().putAll(getHeaders(normalizedMessage));
+ getAttachments().putAll(getAttachments(normalizedMessage));
+ }
}
@Override
@@ -77,13 +86,18 @@
}
return answer;
}
-
+
@Override
- public void setHeader(String name , Object value) {
- if (normalizedMessage != null) {
- normalizedMessage.setProperty(name, value);
- }
- super.setHeader(name, value);
+ protected Map<String, Object> createHeaders() {
+ return new HashMap<String, Object>() {
+ @Override
+ public Object put(String key, Object value) {
+ if (normalizedMessage != null) {
+ normalizedMessage.setProperty(key, value);
+ }
+ return super.put(key, value);
+ }
+ };
}
@Override
@@ -97,17 +111,22 @@
}
return answer;
}
-
+
@Override
- public void addAttachment(String id, DataHandler content) {
- if (normalizedMessage != null) {
- try {
- normalizedMessage.addAttachment(id, content);
- } catch (MessagingException e) {
- throw new JbiException(e);
+ protected Map<String, DataHandler> createAttachments() {
+ return new HashMap<String, DataHandler>() {
+ @Override
+ public DataHandler put(String key, DataHandler value) {
+ if (normalizedMessage != null) {
+ try {
+ normalizedMessage.addAttachment(key, value);
+ } catch (MessagingException e) {
+ throw new JbiException(e);
+ }
+ }
+ return super.put(key, value);
}
- }
- super.addAttachment(id, content);
+ };
}
@Override
@@ -146,4 +165,20 @@
return String.format("NormalizedMessage@%s(%s)",
Integer.toHexString(message.hashCode()), message.getContent());
}
+
+ private Map<? extends String, ? extends Object> getHeaders(NormalizedMessage message) {
+ Map<String, Object> headers = new HashMap<String, Object>();
+ for (Object key : message.getPropertyNames()) {
+ headers.put(key.toString(), message.getProperty(key.toString()));
+ }
+ return headers;
+ }
+
+ private Map<? extends String, ? extends DataHandler> getAttachments(NormalizedMessage message) {
+ Map<String, DataHandler> attachments = new HashMap<String, DataHandler>();
+ for (Object name : message.getAttachmentNames()) {
+ attachments.put(name.toString(), message.getAttachment(name.toString()));
+ }
+ return attachments;
+ }
}
Modified: servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiMessageTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiMessageTest.java?rev=784256&r1=784255&r2=784256&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiMessageTest.java (original)
+++ servicemix/components/engines/servicemix-camel/trunk/src/test/java/org/apache/servicemix/camel/JbiMessageTest.java Fri Jun 12 20:03:13 2009
@@ -55,6 +55,25 @@
// and they should also be on the Camel Message itself
camelMessage.setNormalizedMessage(null);
assertSame(ANOTHER_ATTACHMENT, camelMessage.getAttachment(ANOTHER_ATTACHMENT_ID));
+ assertSame(ATTACHMENT, camelMessage.getAttachment(ATTACHMENT_ID));
+ }
+
+ public void testSetAttachmentsThroughMap() throws Exception {
+ NormalizedMessage jbiMessage = new MockNormalizedMessage();
+ jbiMessage.addAttachment(ATTACHMENT_ID, ATTACHMENT);
+
+ // make sure the Camel Message also has the attachment
+ JbiMessage camelMessage = new JbiMessage(jbiMessage);
+ assertSame(ATTACHMENT, camelMessage.getAttachment(ATTACHMENT_ID));
+
+ // and ensure that attachments are propagated back to the underlying NormalizedMessage
+ camelMessage.getAttachments().put(ANOTHER_ATTACHMENT_ID, ANOTHER_ATTACHMENT);
+ assertSame(ANOTHER_ATTACHMENT, jbiMessage.getAttachment(ANOTHER_ATTACHMENT_ID));
+
+ // and they should also be on the Camel Message itself
+ camelMessage.setNormalizedMessage(null);
+ assertSame(ANOTHER_ATTACHMENT, camelMessage.getAttachment(ANOTHER_ATTACHMENT_ID));
+ assertSame(ATTACHMENT, camelMessage.getAttachment(ATTACHMENT_ID));
}
public void testHeadersWithNormalizedMessage() throws Exception {
@@ -72,8 +91,27 @@
// and they should also be on the Camel Message itself
camelMessage.setNormalizedMessage(null);
assertSame(ANOTHER_VALUE, camelMessage.getHeader(ANOTHER_HEADER));
+ assertSame(VALUE, camelMessage.getHeader(HEADER));
}
+ public void testSetHeaderThroughMap() throws Exception {
+ NormalizedMessage jbiMessage = new MockNormalizedMessage();
+ jbiMessage.setProperty(HEADER, VALUE);
+
+ // make sure the Camel Message also has the header
+ JbiMessage camelMessage = new JbiMessage(jbiMessage);
+ assertSame(VALUE, camelMessage.getHeader(HEADER));
+
+ // and ensure the headers are propagated back to the underlying NormalizedMessage
+ camelMessage.getHeaders().put(ANOTHER_HEADER, ANOTHER_VALUE);
+ assertSame(ANOTHER_VALUE, jbiMessage.getProperty(ANOTHER_HEADER));
+
+ // and they should also be on the Camel Message itself
+ camelMessage.setNormalizedMessage(null);
+ assertSame(ANOTHER_VALUE, camelMessage.getHeader(ANOTHER_HEADER));
+ assertSame(VALUE, camelMessage.getHeader(HEADER));
+ }
+
public void testCopyMessage() throws Exception {
JbiMessage message = new JbiMessage();
Message copy = message.copy();