You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by lh...@apache.org on 2008/09/22 14:41:32 UTC
svn commit: r697796 - in
/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms:
./ src/main/java/org/apache/servicemix/jms/endpoints/
src/test/java/org/apache/servicemix/jms/
Author: lhein
Date: Mon Sep 22 05:41:31 2008
New Revision: 697796
URL: http://svn.apache.org/viewvc?rev=697796&view=rev
Log:
applied patch for SM-1586 provided by Łukasz Dywicki - many thanks to Łukasz
Added:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java (with props)
Modified:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/pom.xml
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultConsumerMarshaler.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultProviderMarshaler.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsConsumerEndpointTest.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsProviderEndpointTest.java
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/pom.xml?rev=697796&r1=697795&r2=697796&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/pom.xml (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/pom.xml Mon Sep 22 05:41:31 2008
@@ -174,6 +174,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>bouncycastle</groupId>
+ <artifactId>bcprov-jdk15</artifactId>
+ <version>${bcprov-version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
Added: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java?rev=697796&view=auto
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java (added)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java Mon Sep 22 05:41:31 2008
@@ -0,0 +1,176 @@
+/*
+ * 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.servicemix.jms.endpoints;
+
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Set;
+
+import javax.jbi.messaging.NormalizedMessage;
+import javax.jms.JMSException;
+import javax.jms.Message;
+
+/**
+ * A usefull base class for marshalers.
+ *
+ * @author Åukasz Dywicki <a href="ldywicki@pocztowy.pl">email</a> $Id$
+ * @author lhein
+ */
+public abstract class AbstractJmsMarshaler {
+
+ /**
+ * Should marshaler copy properties set in messages?
+ */
+ private boolean copyProperties = true;
+
+ private boolean needJavaIdentifiers;
+
+ /**
+ * a blacklist for properties which shouldn't be copied
+ */
+ private List<String> propertyBlackList;
+
+ /**
+ * Get value from field copyProperties.
+ *
+ * @return The copyProperties field value.
+ */
+ public boolean isCopyProperties() {
+ return copyProperties;
+ }
+
+ /**
+ * Set value from copyProperties field.
+ *
+ * @param copyProperties New value for copyProperties field.
+ */
+ public void setCopyProperties(boolean copyProperties) {
+ this.copyProperties = copyProperties;
+ }
+
+ /**
+ * Copy properties from JMS message to JBI message.
+ *
+ * @param message Received JMS message.
+ * @param inMessage Created JBI message.
+ * @throws JMSException If there is any problems with accessing to message
+ * properties.
+ */
+ @SuppressWarnings("unchecked")
+ protected void copyPropertiesFromJMS(Message message, NormalizedMessage inMessage) throws JMSException {
+ Enumeration<String> names = message.getPropertyNames();
+ while (names.hasMoreElements()) {
+ String name = names.nextElement();
+ Object value = message.getObjectProperty(name);
+ if (!isBlackListed(name)) {
+ inMessage.setProperty(name, value);
+ }
+ }
+ }
+
+ /**
+ * Copy properties from JBI message to JMS message.
+ *
+ * @param outMessage Received JBI message.
+ * @param message Created JMS message.
+ * @throws JMSException If there is any problems with saving JMS message
+ * properties.
+ */
+ @SuppressWarnings("unchecked")
+ protected void copyPropertiesFromNM(NormalizedMessage outMessage, Message message) throws JMSException {
+ Set<String> names = outMessage.getPropertyNames();
+ for (String name : names) {
+ Object value = outMessage.getProperty(name);
+ if (!isBlackListed(name) && shouldIncludeHeader(name, value)) {
+ message.setObjectProperty(name, value);
+ }
+ }
+ }
+
+ /**
+ * checks whether the header property should be included or not
+ *
+ * @param name the property name
+ * @param value the property value
+ * @return true if it should be copied
+ */
+ private boolean shouldIncludeHeader(String name, Object value) {
+ return (value instanceof String || value instanceof Number || value instanceof Date)
+ && (!isNeedJavaIdentifiers() || isJavaIdentifier(name));
+ }
+
+ /**
+ * checks if a property is on black list
+ *
+ * @param name the property
+ * @return true if on black list
+ */
+ public boolean isBlackListed(String name) {
+ return this.propertyBlackList != null && this.propertyBlackList.contains(name);
+ }
+
+ /**
+ * checks if a property is a java identifier
+ *
+ * @param s the property name
+ * @return true if java identifier
+ */
+ private static boolean isJavaIdentifier(String s) {
+ int n = s.length();
+ if (n == 0) {
+ return false;
+ }
+ if (!Character.isJavaIdentifierStart(s.charAt(0))) {
+ return false;
+ }
+ for (int i = 1; i < n; i++) {
+ if (!Character.isJavaIdentifierPart(s.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @return Returns the propertyBlackList.
+ */
+ public List<String> getPropertyBlackList() {
+ return this.propertyBlackList;
+ }
+
+ /**
+ * @param propertyBlackList The propertyBlackList to set.
+ */
+ public void setPropertyBlackList(List<String> propertyBlackList) {
+ this.propertyBlackList = propertyBlackList;
+ }
+
+ /**
+ * @return Returns the needJavaIdentifiers.
+ */
+ public boolean isNeedJavaIdentifiers() {
+ return this.needJavaIdentifiers;
+ }
+
+ /**
+ * @param needJavaIdentifiers The needJavaIdentifiers to set.
+ */
+ public void setNeedJavaIdentifiers(boolean needJavaIdentifiers) {
+ this.needJavaIdentifiers = needJavaIdentifiers;
+ }
+}
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/AbstractJmsMarshaler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultConsumerMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultConsumerMarshaler.java?rev=697796&r1=697795&r2=697796&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultConsumerMarshaler.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultConsumerMarshaler.java Mon Sep 22 05:41:31 2008
@@ -31,22 +31,22 @@
import javax.jms.TextMessage;
import javax.xml.transform.Source;
+import org.apache.servicemix.common.JbiConstants;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
-import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;
-public class DefaultConsumerMarshaler implements JmsConsumerMarshaler {
-
+public class DefaultConsumerMarshaler extends AbstractJmsMarshaler implements JmsConsumerMarshaler {
+
private URI mep;
public DefaultConsumerMarshaler() {
- this.mep = MessageExchangeSupport.IN_ONLY;
+ this.mep = JbiConstants.IN_ONLY;
}
-
+
public DefaultConsumerMarshaler(URI mep) {
this.mep = mep;
}
-
+
/**
* @return the mep
*/
@@ -65,32 +65,44 @@
return new Context(message);
}
- public MessageExchange createExchange(JmsContext jmsContext, ComponentContext jbiContext) throws Exception {
- Context ctx = (Context) jmsContext;
- MessageExchange exchange = jbiContext.getDeliveryChannel().createExchangeFactory().createExchange(mep);
+ public MessageExchange createExchange(JmsContext jmsContext, ComponentContext jbiContext)
+ throws Exception {
+ Context ctx = (Context)jmsContext;
+ MessageExchange exchange = jbiContext.getDeliveryChannel().createExchangeFactory()
+ .createExchange(mep);
NormalizedMessage inMessage = exchange.createMessage();
populateMessage(ctx.message, inMessage);
+ if (isCopyProperties()) {
+ copyPropertiesFromJMS(ctx.message, inMessage);
+ }
exchange.setMessage(inMessage, "in");
return exchange;
}
- public Message createOut(MessageExchange exchange, NormalizedMessage outMsg, Session session, JmsContext context) throws Exception {
+ public Message createOut(MessageExchange exchange, NormalizedMessage outMsg, Session session,
+ JmsContext context) throws Exception {
String text = new SourceTransformer().contentToString(outMsg);
- return session.createTextMessage(text);
+ TextMessage textMessage = session.createTextMessage(text);
+ if (isCopyProperties()) {
+ copyPropertiesFromNM(outMsg, textMessage);
+ }
+ return textMessage;
}
- public Message createFault(MessageExchange exchange, Fault fault, Session session, JmsContext context) throws Exception {
+ public Message createFault(MessageExchange exchange, Fault fault, Session session, JmsContext context)
+ throws Exception {
String text = new SourceTransformer().contentToString(fault);
return session.createTextMessage(text);
}
- public Message createError(MessageExchange exchange, Exception error, Session session, JmsContext context) throws Exception {
+ public Message createError(MessageExchange exchange, Exception error, Session session, JmsContext context)
+ throws Exception {
throw error;
}
protected void populateMessage(Message message, NormalizedMessage normalizedMessage) throws Exception {
if (message instanceof TextMessage) {
- TextMessage textMessage = (TextMessage) message;
+ TextMessage textMessage = (TextMessage)message;
Source source = new StringSource(textMessage.getText());
normalizedMessage.setContent(source);
} else {
@@ -100,17 +112,21 @@
protected static class Context implements JmsContext, Serializable {
Message message;
+
Context(Message message) {
this.message = message;
}
+
public Message getMessage() {
return this.message;
}
+
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(message);
}
+
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- message = (Message) in.readObject();
+ message = (Message)in.readObject();
}
}
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultProviderMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultProviderMarshaler.java?rev=697796&r1=697795&r2=697796&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultProviderMarshaler.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/endpoints/DefaultProviderMarshaler.java Mon Sep 22 05:41:31 2008
@@ -28,11 +28,11 @@
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
-public class DefaultProviderMarshaler implements JmsProviderMarshaler {
+public class DefaultProviderMarshaler extends AbstractJmsMarshaler implements JmsProviderMarshaler {
private Map<String, Object> jmsProperties;
private SourceTransformer transformer = new SourceTransformer();
-
+
/**
* @return the jmsProperties
*/
@@ -47,7 +47,8 @@
this.jmsProperties = jmsProperties;
}
- public Message createMessage(MessageExchange exchange, NormalizedMessage in, Session session) throws Exception {
+ public Message createMessage(MessageExchange exchange, NormalizedMessage in, Session session)
+ throws Exception {
TextMessage text = session.createTextMessage();
text.setText(transformer.contentToString(in));
if (jmsProperties != null) {
@@ -55,17 +56,27 @@
text.setObjectProperty(e.getKey(), e.getValue());
}
}
+
+ if (isCopyProperties()) {
+ copyPropertiesFromNM(in, text);
+ }
+
return text;
}
- public void populateMessage(Message message, MessageExchange exchange, NormalizedMessage normalizedMessage) throws Exception {
+ public void populateMessage(Message message, MessageExchange exchange, NormalizedMessage normalizedMessage)
+ throws Exception {
if (message instanceof TextMessage) {
- TextMessage textMessage = (TextMessage) message;
+ TextMessage textMessage = (TextMessage)message;
Source source = new StringSource(textMessage.getText());
normalizedMessage.setContent(source);
+
+ if (isCopyProperties()) {
+ copyPropertiesFromJMS(textMessage, normalizedMessage);
+ }
} else {
throw new UnsupportedOperationException("JMS message is not a TextMessage");
}
}
-
+
}
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsConsumerEndpointTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsConsumerEndpointTest.java?rev=697796&r1=697795&r2=697796&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsConsumerEndpointTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsConsumerEndpointTest.java Mon Sep 22 05:41:31 2008
@@ -14,54 +14,95 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.servicemix.jms;
+package org.apache.servicemix.jms;
import java.io.ByteArrayOutputStream;
+import java.util.LinkedList;
+import java.util.List;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.jms.JMSException;
import javax.jms.Message;
+import javax.jms.Session;
import javax.jms.TextMessage;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
+import org.apache.activemq.pool.PooledConnectionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.common.JbiConstants;
import org.apache.servicemix.components.util.EchoComponent;
import org.apache.servicemix.components.util.MockServiceComponent;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
-import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;
import org.apache.servicemix.jbi.util.FileUtil;
import org.apache.servicemix.jms.endpoints.DefaultConsumerMarshaler;
import org.apache.servicemix.jms.endpoints.JmsConsumerEndpoint;
import org.apache.servicemix.jms.endpoints.JmsSoapConsumerEndpoint;
+import org.apache.servicemix.tck.MessageList;
import org.apache.servicemix.tck.Receiver;
import org.apache.servicemix.tck.ReceiverComponent;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.core.MessageCreator;
+import org.springframework.jms.listener.DefaultMessageListenerContainer;
public class JmsConsumerEndpointTest extends AbstractJmsTestSupport {
- private static Log logger = LogFactory.getLog(JmsConsumerEndpointTest.class);
+ private static Log logger = LogFactory.getLog(JmsConsumerEndpointTest.class);
+
+ /**
+ * Test property name.
+ */
+ private static final String MSG_PROPERTY = "PropertyTest";
+ private static final String MSG_PROPERTY_BLACKLISTED = "BadPropertyTest";
protected Receiver receiver;
protected SourceTransformer sourceTransformer = new SourceTransformer();
+ protected List<String> blackList;
protected void setUp() throws Exception {
super.setUp();
-
+
ReceiverComponent rec = new ReceiverComponent();
rec.setService(new QName("receiver"));
rec.setEndpoint("endpoint");
container.activateComponent(rec, "receiver");
receiver = rec;
-
+
EchoComponent echo = new EchoComponent();
echo.setService(new QName("echo"));
echo.setEndpoint("endpoint");
container.activateComponent(echo, "echo");
+
+ // initialize the black list
+ blackList = new LinkedList<String>();
+ blackList.add(MSG_PROPERTY_BLACKLISTED);
+ }
+
+ public void testWithoutProperties() throws Exception {
+ container.activateComponent(createEndpoint(false), "servicemix-jms");
+ jmsTemplate.send("destination", new InternalCreator());
+ MessageList messageList = receiver.getMessageList();
+ messageList.assertMessagesReceived(1);
+ NormalizedMessage message = (NormalizedMessage)messageList.getMessages().get(0);
+ assertNull("Not expected property found", message.getProperty(MSG_PROPERTY));
+ assertNull("Not expected property found", message.getProperty(MSG_PROPERTY_BLACKLISTED));
}
-
+
public void testConsumerSimple() throws Exception {
+ container.activateComponent(createEndpoint(), "servicemix-jms");
+ jmsTemplate.send("destination", new InternalCreator());
+ MessageList messageList = receiver.getMessageList();
+ messageList.assertMessagesReceived(1);
+ NormalizedMessage message = (NormalizedMessage)messageList.getMessages().get(0);
+ assertNotNull("Expected property not found", message.getProperty(MSG_PROPERTY));
+ assertNull("Black listed property found", message.getProperty(MSG_PROPERTY_BLACKLISTED));
+ }
+
+ public void testConsumerStateless() throws Exception {
JmsComponent component = new JmsComponent();
JmsConsumerEndpoint endpoint = new JmsConsumerEndpoint();
endpoint.setService(new QName("jms"));
@@ -70,6 +111,7 @@
endpoint.setListenerType("simple");
endpoint.setConnectionFactory(connectionFactory);
endpoint.setDestinationName("destination");
+ endpoint.setStateless(true);
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
@@ -77,7 +119,7 @@
receiver.getMessageList().assertMessagesReceived(1);
}
- public void testConsumerStateless() throws Exception {
+ public void testConsumerSimpleJmsTx() throws Exception {
JmsComponent component = new JmsComponent();
JmsConsumerEndpoint endpoint = new JmsConsumerEndpoint();
endpoint.setService(new QName("jms"));
@@ -86,34 +128,36 @@
endpoint.setListenerType("simple");
endpoint.setConnectionFactory(connectionFactory);
endpoint.setDestinationName("destination");
- endpoint.setStateless(true);
+ endpoint.setTransacted("jms");
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
+ container.start();
+
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
}
- public void testConsumerSimpleJmsTx() throws Exception {
+ public void testConsumerDefault() throws Exception {
JmsComponent component = new JmsComponent();
JmsConsumerEndpoint endpoint = new JmsConsumerEndpoint();
endpoint.setService(new QName("jms"));
endpoint.setEndpoint("endpoint");
endpoint.setTargetService(new QName("receiver"));
- endpoint.setListenerType("simple");
+ endpoint.setListenerType("default");
endpoint.setConnectionFactory(connectionFactory);
endpoint.setDestinationName("destination");
- endpoint.setTransacted("jms");
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
container.start();
-
+
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
+ Thread.sleep(500);
}
- public void testConsumerDefault() throws Exception {
+ public void testDurableConsumerDefault() throws Exception {
JmsComponent component = new JmsComponent();
JmsConsumerEndpoint endpoint = new JmsConsumerEndpoint();
endpoint.setService(new QName("jms"));
@@ -121,14 +165,23 @@
endpoint.setTargetService(new QName("receiver"));
endpoint.setListenerType("default");
endpoint.setConnectionFactory(connectionFactory);
- endpoint.setDestinationName("destination");
+ endpoint.setPubSubDomain(true);
+ endpoint.setSubscriptionDurable(true);
+ endpoint.setClientId("clientId");
+ endpoint.setDestinationName("destinationTopic");
+ endpoint.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONNECTION);
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+ Thread.sleep(500);
container.start();
-
- jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
+
+ JmsTemplate jmsTemplate = new JmsTemplate();
+ jmsTemplate.setConnectionFactory(new PooledConnectionFactory(connectionFactory));
+ jmsTemplate.setPubSubDomain(true);
+ jmsTemplate.afterPropertiesSet();
+ jmsTemplate.convertAndSend("destinationTopic", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
+ Thread.sleep(500);
}
public void testConsumerDefaultInOut() throws Exception {
@@ -141,15 +194,16 @@
endpoint.setConnectionFactory(connectionFactory);
endpoint.setDestinationName("destination");
endpoint.setReplyDestinationName("replyDestination");
- endpoint.setMarshaler(new DefaultConsumerMarshaler(MessageExchangeSupport.IN_OUT));
+ endpoint.setMarshaler(new DefaultConsumerMarshaler(JbiConstants.IN_OUT));
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
- TextMessage msg = (TextMessage) jmsTemplate.receive("replyDestination");
+ TextMessage msg = (TextMessage)jmsTemplate.receive("replyDestination");
Element e = sourceTransformer.toDOMElement(new StringSource(msg.getText()));
assertEquals("hello", e.getTagName());
assertEquals("world", e.getTextContent());
+ Thread.sleep(500);
}
public void testConsumerDefaultJmsTx() throws Exception {
@@ -167,6 +221,7 @@
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
+ Thread.sleep(500);
}
public void testConsumerDefaultInOutJmsTx() throws Exception {
@@ -180,15 +235,16 @@
endpoint.setDestinationName("destination");
endpoint.setReplyDestinationName("replyDestination");
endpoint.setTransacted("jms");
- endpoint.setMarshaler(new DefaultConsumerMarshaler(MessageExchangeSupport.IN_OUT));
+ endpoint.setMarshaler(new DefaultConsumerMarshaler(JbiConstants.IN_OUT));
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
- TextMessage msg = (TextMessage) jmsTemplate.receive("replyDestination");
+ TextMessage msg = (TextMessage)jmsTemplate.receive("replyDestination");
Element e = sourceTransformer.toDOMElement(new StringSource(msg.getText()));
assertEquals("hello", e.getTagName());
assertEquals("world", e.getTextContent());
+ Thread.sleep(500);
}
public void testConsumerDefaultXaTx() throws Exception {
@@ -206,6 +262,7 @@
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
+ Thread.sleep(500);
}
public void testConsumerServer() throws Exception {
@@ -219,7 +276,7 @@
endpoint.setDestinationName("destination");
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
}
@@ -236,7 +293,7 @@
endpoint.setTransacted("jms");
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
jmsTemplate.convertAndSend("destination", "<hello>world</hello>");
receiver.getMessageList().assertMessagesReceived(1);
}
@@ -254,21 +311,55 @@
endpoint.setWsdl(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC.wsdl"));
component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
MockServiceComponent mock = new MockServiceComponent();
mock.setService(new QName("mock"));
mock.setEndpoint("endpoint");
- mock.setResponseXml(
- "<jbi:message xmlns:jbi=\"http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper\"><jbi:part>hello</jbi:part></jbi:message>");
+ mock.setResponseXml("<jbi:message xmlns:jbi=\"http://java.sun.com/xml/ns/jbi/"
+ + "wsdl-11-wrapper\"><jbi:part>hello</jbi:part></jbi:message>");
container.activateComponent(mock, "mock");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- FileUtil.copyInputStream(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Input.xml").getInputStream(), baos);
+ FileUtil.copyInputStream(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Input.xml")
+ .getInputStream(), baos);
jmsTemplate.convertAndSend("destination", baos.toString());
-
+
Message msg = jmsTemplate.receive("reply");
assertNotNull(msg);
- logger.info(((TextMessage) msg).getText());
+ logger.info(((TextMessage)msg).getText());
}
+ // Helper methods
+ private JmsComponent createEndpoint() {
+ return createEndpoint(true);
+ }
+
+ private JmsComponent createEndpoint(boolean copyProperties) {
+ JmsComponent component = new JmsComponent();
+ JmsConsumerEndpoint endpoint = new JmsConsumerEndpoint();
+ endpoint.setService(new QName("jms"));
+ endpoint.setEndpoint("endpoint");
+ DefaultConsumerMarshaler marshaler = new DefaultConsumerMarshaler();
+ marshaler.setCopyProperties(copyProperties);
+ marshaler.setPropertyBlackList(blackList);
+ endpoint.setMarshaler(marshaler);
+ endpoint.setTargetService(new QName("receiver"));
+ endpoint.setListenerType("simple");
+ endpoint.setConnectionFactory(connectionFactory);
+ endpoint.setDestinationName("destination");
+ component.setEndpoints(new JmsConsumerEndpoint[] {endpoint});
+ return component;
+ }
+
+ /**
+ * Simple interface implementation - sets message body and one property.
+ */
+ protected static class InternalCreator implements MessageCreator {
+ public Message createMessage(Session session) throws JMSException {
+ TextMessage message = session.createTextMessage("<hello>world</hello>");
+ message.setStringProperty(MSG_PROPERTY, "test");
+ message.setObjectProperty(MSG_PROPERTY_BLACKLISTED, new String("unwanted property"));
+ return message;
+ }
+ }
}
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsProviderEndpointTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsProviderEndpointTest.java?rev=697796&r1=697795&r2=697796&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsProviderEndpointTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsProviderEndpointTest.java Mon Sep 22 05:41:31 2008
@@ -17,10 +17,13 @@
package org.apache.servicemix.jms;
import java.io.ByteArrayOutputStream;
+import java.util.LinkedList;
+import java.util.List;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.NormalizedMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
@@ -30,6 +33,7 @@
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.jbi.util.FileUtil;
+import org.apache.servicemix.jms.endpoints.DefaultProviderMarshaler;
import org.apache.servicemix.jms.endpoints.JmsProviderEndpoint;
import org.apache.servicemix.jms.endpoints.JmsSoapProviderEndpoint;
import org.springframework.core.io.ClassPathResource;
@@ -37,29 +41,53 @@
public class JmsProviderEndpointTest extends AbstractJmsTestSupport {
+ /**
+ * Test property name.
+ */
+ private static final String MSG_PROPERTY = "PropertyTest";
+ private static final String MSG_PROPERTY_BLACKLISTED = "BadPropertyTest";
+
+ protected List<String> blackList;
+
+ public void testSendWithoutProperties() throws Exception {
+ container.activateComponent(createEndpoint(false), "servicemix-jms");
+
+ InOnly me = client.createInOnlyExchange();
+ NormalizedMessage inMessage = me.getInMessage();
+ inMessage.setProperty(MSG_PROPERTY, "Test-Value");
+ inMessage.setProperty(MSG_PROPERTY_BLACKLISTED, "Unwanted value");
+ inMessage.setContent(new StringSource("<hello>world</hello>"));
+ me.setService(new QName("jms"));
+ client.sendSync(me);
+ assertEquals(ExchangeStatus.DONE, me.getStatus());
+
+ Message msg = jmsTemplate.receive("destination");
+ assertNull("Found not expected property", msg.getStringProperty(MSG_PROPERTY));
+ assertNull("Found blacklisted property", msg.getStringProperty(MSG_PROPERTY_BLACKLISTED));
+ assertNotNull(msg);
+ }
+
public void testSendSimple() throws Exception {
- JmsComponent component = new JmsComponent();
- JmsProviderEndpoint endpoint = new JmsProviderEndpoint();
- endpoint.setService(new QName("jms"));
- endpoint.setEndpoint("endpoint");
- endpoint.setConnectionFactory(connectionFactory);
- endpoint.setDestinationName("destination");
- component.setEndpoints(new JmsProviderEndpoint[] {endpoint});
- container.activateComponent(component, "servicemix-jms");
-
+ container.activateComponent(createEndpoint(), "servicemix-jms");
+
InOnly me = client.createInOnlyExchange();
- me.getInMessage().setContent(new StringSource("<hello>world</hello>"));
+ NormalizedMessage inMessage = me.getInMessage();
+ inMessage.setProperty(MSG_PROPERTY, "Test-Value");
+ inMessage.setProperty(MSG_PROPERTY_BLACKLISTED, "Unwanted value");
+ inMessage.setContent(new StringSource("<hello>world</hello>"));
me.setService(new QName("jms"));
client.sendSync(me);
assertEquals(ExchangeStatus.DONE, me.getStatus());
-
+
Message msg = jmsTemplate.receive("destination");
+ assertNotNull("Expected property not found", msg.getStringProperty(MSG_PROPERTY));
+ assertNull("Found blacklisted property", msg.getStringProperty(MSG_PROPERTY_BLACKLISTED));
assertNotNull(msg);
}
-
+
public void testSoapProviderInOnly() throws Exception {
JmsComponent component = new JmsComponent();
-
+
JmsSoapProviderEndpoint endpoint = new JmsSoapProviderEndpoint();
endpoint.setService(new QName("uri:HelloWorld", "HelloService"));
endpoint.setEndpoint("HelloPort");
@@ -68,24 +96,29 @@
endpoint.setWsdl(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC.wsdl"));
component.setEndpoints(new JmsProviderEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- FileUtil.copyInputStream(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Input-OneWay.xml").getInputStream(), baos);
+ FileUtil
+ .copyInputStream(
+ new ClassPathResource(
+ "org/apache/servicemix/jms/HelloWorld-RPC-Input-OneWay.xml")
+ .getInputStream(), baos);
InOnly me = client.createInOnlyExchange();
me.getInMessage().setContent(new StringSource(baos.toString()));
+
me.setOperation(new QName("uri:HelloWorld", "OneWay"));
me.setService(new QName("uri:HelloWorld", "HelloService"));
client.sendSync(me);
assertEquals(ExchangeStatus.DONE, me.getStatus());
-
+
Message msg = jmsTemplate.receive("destination");
assertNotNull(msg);
- System.err.println(((TextMessage) msg).getText());
+ System.err.println(((TextMessage)msg).getText());
}
-
+
public void testSoapProviderInOut() throws Exception {
JmsComponent component = new JmsComponent();
-
+
JmsSoapProviderEndpoint endpoint = new JmsSoapProviderEndpoint();
endpoint.setService(new QName("uri:HelloWorld", "HelloService"));
endpoint.setEndpoint("HelloPort");
@@ -95,19 +128,23 @@
endpoint.setWsdl(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC.wsdl"));
component.setEndpoints(new JmsProviderEndpoint[] {endpoint});
container.activateComponent(component, "servicemix-jms");
-
+
Thread th = new Thread() {
public void run() {
try {
final Message msg = jmsTemplate.receive("destination");
assertNotNull(msg);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- FileUtil.copyInputStream(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Output.xml")
- .getInputStream(), baos);
+ FileUtil
+ .copyInputStream(
+ new ClassPathResource(
+ "org/apache/servicemix/jms/HelloWorld-RPC-Output.xml")
+ .getInputStream(), baos);
jmsTemplate.send("reply", new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage rep = session.createTextMessage(baos.toString());
- rep.setJMSCorrelationID(msg.getJMSMessageID());
+ rep.setJMSCorrelationID(msg.getJMSCorrelationID() != null ? msg
+ .getJMSCorrelationID() : msg.getJMSMessageID());
return rep;
}
});
@@ -117,9 +154,12 @@
}
};
th.start();
-
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- FileUtil.copyInputStream(new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Input-Hello.xml").getInputStream(), baos);
+ FileUtil
+ .copyInputStream(
+ new ClassPathResource("org/apache/servicemix/jms/HelloWorld-RPC-Input-Hello.xml")
+ .getInputStream(), baos);
InOut me = client.createInOutExchange();
me.getInMessage().setContent(new StringSource(baos.toString()));
me.setOperation(new QName("uri:HelloWorld", "Hello"));
@@ -130,7 +170,30 @@
assertNotNull(me.getOutMessage().getContent());
System.err.println(new SourceTransformer().contentToString(me.getOutMessage()));
client.done(me);
-
+
+ }
+
+ // Helper methods
+ private JmsComponent createEndpoint() {
+ return createEndpoint(true);
+ }
+
+ private JmsComponent createEndpoint(boolean copyProperties) {
+ // initialize the black list
+ blackList = new LinkedList<String>();
+ blackList.add(MSG_PROPERTY_BLACKLISTED);
+
+ JmsComponent component = new JmsComponent();
+ JmsProviderEndpoint endpoint = new JmsProviderEndpoint();
+ endpoint.setService(new QName("jms"));
+ DefaultProviderMarshaler marshaler = new DefaultProviderMarshaler();
+ marshaler.setCopyProperties(copyProperties);
+ marshaler.setPropertyBlackList(blackList);
+ endpoint.setMarshaler(marshaler);
+ endpoint.setEndpoint("endpoint");
+ endpoint.setConnectionFactory(connectionFactory);
+ endpoint.setDestinationName("destination");
+ component.setEndpoints(new JmsProviderEndpoint[] {endpoint});
+ return component;
}
-
}