This commit is contained in:
Arjen Poutsma
2008-06-19 13:52:01 +00:00
parent 0973f37740
commit 045a85a568
2 changed files with 33 additions and 5 deletions

View File

@@ -32,6 +32,7 @@ import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TemporaryQueue;
import javax.jms.TemporaryTopic;
import javax.jms.TextMessage;
import org.springframework.jms.connection.ConnectionFactoryUtils;
@@ -214,7 +215,14 @@ public class JmsSenderConnection extends AbstractSenderConnection {
protected void onReceiveBeforeRead() throws IOException {
MessageConsumer messageConsumer = null;
try {
messageConsumer = session.createConsumer(responseDestination);
if (responseDestination instanceof TemporaryQueue || responseDestination instanceof TemporaryTopic) {
messageConsumer = session.createConsumer(responseDestination);
}
else {
String messageId = requestMessage.getJMSMessageID().replaceAll("'", "''");
String messageSelector = "JMSCorrelationID = '" + messageId + "'";
messageConsumer = session.createConsumer(responseDestination, messageSelector);
}
Message message = receiveTimeout >= 0 ? messageConsumer.receive(receiveTimeout) : messageConsumer.receive();
if (message instanceof BytesMessage || message instanceof TextMessage) {
responseMessage = message;
@@ -237,6 +245,14 @@ public class JmsSenderConnection extends AbstractSenderConnection {
// ignore
}
}
else if (responseDestination instanceof TemporaryTopic) {
try {
((TemporaryTopic) responseDestination).delete();
}
catch (JMSException e) {
// ignore
}
}
}
}

View File

@@ -16,13 +16,13 @@
package org.springframework.ws.transport.jms;
import org.custommonkey.xmlunit.XMLAssert;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.xml.transform.StringResult;
import org.springframework.xml.transform.StringSource;
import org.custommonkey.xmlunit.XMLAssert;
public class JmsIntegrationTest extends AbstractDependencyInjectionSpringContextTests {
private WebServiceTemplate webServiceTemplate;
@@ -35,11 +35,23 @@ public class JmsIntegrationTest extends AbstractDependencyInjectionSpringContext
this.webServiceTemplate = webServiceTemplate;
}
public void testJmsTransport() throws Exception {
protected void onTearDown() throws Exception {
applicationContext.close();
setDirty();
}
public void testTemporaryQueue() throws Exception {
String content = "<root xmlns='http://springframework.org/spring-ws'><child/></root>";
StringResult result = new StringResult();
webServiceTemplate.sendSourceAndReceiveToResult(new StringSource(content), result);
XMLAssert.assertXMLEqual("Invalid content received", content, result.toString());
applicationContext.close();
}
public void testPermanentQueue() throws Exception {
String url = "jms:RequestQueue?deliveryMode=NON_PERSISTENT;replyToName=ResponseQueue";
String content = "<root xmlns='http://springframework.org/spring-ws'><child/></root>";
StringResult result = new StringResult();
webServiceTemplate.sendSourceAndReceiveToResult(url, new StringSource(content), result);
XMLAssert.assertXMLEqual("Invalid content received", content, result.toString());
}
}