Author: davsclaus Date: Fri May 21 14:18:55 2010 New Revision: 947018 URL: http://svn.apache.org/viewvc?rev=947018&view=rev Log: CAMEL-2742: Fixed sending JMS properties to WebSphereMQ7.
Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java (with props) Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=947018&r1=947017&r2=947018&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Fri May 21 14:18:55 2010 @@ -333,7 +333,8 @@ public class JmsBinding { if (value != null) { // must encode to safe JMS header name before setting property on jmsMessage String key = jmsKeyFormatStrategy.encodeKey(headerName); - jmsMessage.setObjectProperty(key, value); + // set the property + JmsMessageHelper.setProperty(jmsMessage, key, value); } else if (LOG.isDebugEnabled()) { // okay the value is not a primitive or string so we cannot sent it over the wire LOG.debug("Ignoring non primitive header: " + headerName + " of class: " @@ -397,7 +398,7 @@ public class JmsBinding { } else if (headerValue instanceof CharSequence) { return headerValue.toString(); } else if (headerValue instanceof Boolean) { - return headerValue.toString(); + return headerValue; } else if (headerValue instanceof Date) { return headerValue.toString(); } Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java?rev=947018&r1=947017&r2=947018&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java Fri May 21 14:18:55 2010 @@ -91,4 +91,38 @@ public final class JmsMessageHelper { return false; } + /** + * Sets the property on the given JMS message. + * + * @param jmsMessage the JMS message + * @param name name of the property to set + * @param value the value + * @throws JMSException can be thrown + */ + public static void setProperty(Message jmsMessage, String name, Object value) throws JMSException { + if (value == null) { + return; + } + if (value instanceof Byte) { + jmsMessage.setByteProperty(name, (Byte) value); + } else if (value instanceof Boolean) { + jmsMessage.setBooleanProperty(name, (Boolean) value); + } else if (value instanceof Double) { + jmsMessage.setDoubleProperty(name, (Double) value); + } else if (value instanceof Float) { + jmsMessage.setFloatProperty(name, (Float) value); + } else if (value instanceof Integer) { + jmsMessage.setIntProperty(name, (Integer) value); + } else if (value instanceof Long) { + jmsMessage.setLongProperty(name, (Long) value); + } else if (value instanceof Short) { + jmsMessage.setShortProperty(name, (Short) value); + } else if (value instanceof String) { + jmsMessage.setStringProperty(name, (String) value); + } else { + // fallback to Object + jmsMessage.setObjectProperty(name, value); + } + } + } Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java?rev=947018&view=auto ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java (added) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java Fri May 21 14:18:55 2010 @@ -0,0 +1,81 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.jms; + +import java.util.LinkedHashMap; +import java.util.Map; +import javax.jms.ConnectionFactory; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.camel.CamelContext; +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; + +import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge; + +/** + * @version $Revision$ + */ +public class JmsRouteUsingDifferentHeadersTest extends ContextTestSupport { + + public void testUsingDifferentHeaderTypes() throws Exception { + Map<String, Object> headers = new LinkedHashMap<String, Object>(); + headers.put("a", new Byte("65")); + headers.put("b", Boolean.TRUE); + headers.put("c", new Double("44444")); + headers.put("d", new Float("55555")); + headers.put("e", new Integer("222")); + headers.put("f", new Long("7777777")); + headers.put("g", new Short("333")); + headers.put("h", "Hello"); + + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(1); + mock.message(0).header("a").isInstanceOf(Byte.class); + mock.message(0).header("b").isInstanceOf(Boolean.class); + mock.message(0).header("c").isInstanceOf(Double.class); + mock.message(0).header("d").isInstanceOf(Float.class); + mock.message(0).header("e").isInstanceOf(Integer.class); + mock.message(0).header("f").isInstanceOf(Long.class); + mock.message(0).header("g").isInstanceOf(Short.class); + mock.message(0).header("h").isInstanceOf(String.class); + + template.sendBodyAndHeaders("activemq:queue:foo", "Hello World", headers); + + assertMockEndpointsSatisfied(); + } + + protected CamelContext createCamelContext() throws Exception { + CamelContext camelContext = super.createCamelContext(); + + ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); + camelContext.addComponent("activemq", jmsComponentClientAcknowledge(connectionFactory)); + + return camelContext; + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("activemq:queue:foo").to("mock:result"); + } + }; + } +} Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingDifferentHeadersTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date