diff --git a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java index 144182d6..82de0d52 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsMessageSender.java @@ -18,9 +18,12 @@ package org.springframework.ws.transport.jms; import java.io.IOException; import javax.jms.BytesMessage; +import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; +import org.springframework.jms.support.destination.DestinationResolver; +import org.springframework.jms.support.destination.DynamicDestinationResolver; import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.ws.transport.WebServiceConnection; @@ -44,6 +47,8 @@ public class JmsMessageSender implements WebServiceMessageSender, JmsTransportCo private ConnectionFactory connectionFactory; + private DestinationResolver destinationResolver = new DynamicDestinationResolver(); + private long receiveTimeout = DEFAULT_RECEIVE_TIMEOUT; public JmsMessageSender() { @@ -54,12 +59,16 @@ public class JmsMessageSender implements WebServiceMessageSender, JmsTransportCo } /** - * Set the default ConnectionFactory to use for obtaining JMS Connections. + * Set the ConnectionFactory to use for obtaining JMS {@link Connection}s. */ public void setConnectionFactory(ConnectionFactory connectionFactory) { this.connectionFactory = connectionFactory; } + public void setDestinationResolver(DestinationResolver destinationResolver) { + this.destinationResolver = destinationResolver; + } + /** * Set the timeout to use for receive calls. The default is 0, which means no timeout. */ @@ -72,7 +81,7 @@ public class JmsMessageSender implements WebServiceMessageSender, JmsTransportCo JmsSenderConnection connection = null; try { JmsUri uri = new JmsUri(uriString); - connection = new JmsSenderConnection(uri, connectionFactory, receiveTimeout); + connection = new JmsSenderConnection(uri, connectionFactory, destinationResolver, receiveTimeout); return connection; } catch (JMSException ex) { diff --git a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java index ce52085b..8e1d8827 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java @@ -36,6 +36,7 @@ import javax.jms.TemporaryQueue; import org.springframework.jms.connection.ConnectionFactoryUtils; import org.springframework.jms.support.JmsUtils; +import org.springframework.jms.support.destination.DestinationResolver; import org.springframework.util.Assert; import org.springframework.ws.FaultAwareWebServiceMessage; import org.springframework.ws.WebServiceMessage; @@ -55,38 +56,40 @@ public class JmsSenderConnection extends AbstractSenderConnection private final ConnectionFactory connectionFactory; + private final DestinationResolver destinationResolver; + private final Connection connection; private final Session session; private final Destination requestDestination; - private Destination responseDestination; - private final JmsUri uri; + private final long receiveTimeout; + + private Destination responseDestination; + private BytesMessage requestMessage; private BytesMessage responseMessage; - private long receiveTimeout; - /** * Constructs a new JMS connection with the given parameters. */ - protected JmsSenderConnection(JmsUri uri, ConnectionFactory connectionFactory, long receiveTimeout) - throws JMSException { + protected JmsSenderConnection(JmsUri uri, + ConnectionFactory connectionFactory, + DestinationResolver destinationResolver, + long receiveTimeout) throws JMSException { Assert.notNull(uri, "'uri' must not be null"); Assert.notNull(connectionFactory, "'connectionFactory' must not be null"); + Assert.notNull(destinationResolver, "destinationResolver must not be null"); this.connectionFactory = connectionFactory; + this.destinationResolver = destinationResolver; connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - if (uri.isPubSubDomain()) { - requestDestination = session.createTopic(uri.getDestination()); - } - else { - requestDestination = session.createQueue(uri.getDestination()); - } + requestDestination = + destinationResolver.resolveDestinationName(session, uri.getDestination(), uri.isPubSubDomain()); this.uri = uri; this.receiveTimeout = receiveTimeout; } @@ -154,13 +157,8 @@ public class JmsSenderConnection extends AbstractSenderConnection messageProducer.setTimeToLive(uri.getTimeToLive()); messageProducer.setPriority(uri.getPriority()); if (uri.hasReplyTo()) { - if (uri.isPubSubDomain()) { - responseDestination = session.createTopic(uri.getReplyTo()); - } - else { - responseDestination = session.createQueue(uri.getReplyTo()); - } - + responseDestination = + destinationResolver.resolveDestinationName(session, uri.getReplyTo(), uri.isPubSubDomain()); } else { responseDestination = session.createTemporaryQueue(); diff --git a/sandbox/src/main/java/org/springframework/ws/transport/mail/DefaultMonitoringStrategy.java b/sandbox/src/main/java/org/springframework/ws/transport/mail/DefaultMonitoringStrategy.java index b2bd19e2..e98d6ac8 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/mail/DefaultMonitoringStrategy.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/mail/DefaultMonitoringStrategy.java @@ -73,8 +73,8 @@ public class DefaultMonitoringStrategy extends AbstractPollingMonitoringStrategy /** * Creates the search term that defines the messages to look for. Default implementation returns a term that - * searches for all messages in the folder that are {@link Flags.Flag#RECENT RECENT}, and not {@link - * Flags.Flag#ANSWERED ANSWERED}, and not {@link Flags.Flag#DELETED DELETED}. + * searches for all messages in the folder that are {@link Flags.Flag#RECENT RECENT}, not {@link Flags.Flag#ANSWERED + * ANSWERED}, and not {@link Flags.Flag#DELETED DELETED}. *
* Returnnull if all messages should be returned from {@link #pollForNewMessages(Folder)}.
*/
diff --git a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java
index 60370455..2c40232b 100644
--- a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java
+++ b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailMessageSender.java
@@ -20,16 +20,18 @@ import java.io.IOException;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.URLName;
-import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.ws.transport.WebServiceConnection;
import org.springframework.ws.transport.WebServiceMessageSender;
-import org.springframework.beans.factory.InitializingBean;
-/** @author Arjen Poutsma */
+/**
+ * @author Arjen Poutsma
+ */
public class MailMessageSender implements WebServiceMessageSender, InitializingBean {
private Session session = Session.getInstance(new Properties(), null);
@@ -97,6 +99,6 @@ public class MailMessageSender implements WebServiceMessageSender, InitializingB
}
public boolean supports(String uri) {
- return StringUtils.hasLength(uri) && uri.startsWith(MailtoUri.MAILTO_SCHEME);
+ return StringUtils.hasLength(uri) && uri.startsWith(MailTransportConstants.URI_SCHEME + ":");
}
}
diff --git a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java
index 2ef50af4..856334e6 100644
--- a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java
+++ b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java
@@ -165,10 +165,7 @@ public class MailSenderConnection extends AbstractSenderConnection {
Store store = null;
Folder folder = null;
try {
- String requestMessageId = null;
- if (requestMessage instanceof MimeMessage) {
- requestMessageId = ((MimeMessage) requestMessage).getMessageID();
- }
+ String requestMessageId = requestMessage.getMessageID();
if (StringUtils.hasLength(requestMessageId)) {
try {
Thread.sleep(5000);
@@ -194,7 +191,7 @@ public class MailSenderConnection extends AbstractSenderConnection {
if (responses.length > 1) {
logger.warn("Received more than one response for request with ID [" + requestMessageId + "]");
}
- responseMessage = (MimeMessage) responses[0];
+ responseMessage = responses[0];
}
if (deleteAfterReceive) {
responseMessage.setFlag(Flags.Flag.DELETED, true);
diff --git a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailTransportConstants.java b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailTransportConstants.java
index 144f26eb..6d2c61b3 100644
--- a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailTransportConstants.java
+++ b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailTransportConstants.java
@@ -18,11 +18,15 @@ package org.springframework.ws.transport.mail;
import org.springframework.ws.transport.TransportConstants;
-/** @author Arjen Poutsma */
+/**
+ * @author Arjen Poutsma
+ */
public interface MailTransportConstants extends TransportConstants {
- /** The "In-Reply-To" header. */
+ /**
+ * The "In-Reply-To" header.
+ */
String HEADER_IN_REPLY_TO = "In-Reply-To";
-
+ String URI_SCHEME = "mailto";
}
diff --git a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailtoUri.java b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailtoUri.java
index baad6985..e997aae8 100644
--- a/sandbox/src/main/java/org/springframework/ws/transport/mail/MailtoUri.java
+++ b/sandbox/src/main/java/org/springframework/ws/transport/mail/MailtoUri.java
@@ -18,19 +18,18 @@ package org.springframework.ws.transport.mail;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
-import javax.mail.Address;
import org.springframework.util.Assert;
import org.springframework.ws.transport.support.ParameterizedUri;
-/** @author Arjen Poutsma */
+/**
+ * @author Arjen Poutsma
+ */
public class MailtoUri extends ParameterizedUri {
- static final String MAILTO_SCHEME = "mailto:";
-
public MailtoUri(String uri) {
super(uri);
- Assert.isTrue(uri.startsWith(MAILTO_SCHEME), "Invalid uri: " + uri);
+ Assert.isTrue(uri.startsWith(MailTransportConstants.URI_SCHEME), "Invalid uri: " + uri);
try {
InternetAddress.parse(getDestination(), false);
}
diff --git a/sandbox/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java b/sandbox/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java
index 75db21a9..bd2880c4 100644
--- a/sandbox/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java
+++ b/sandbox/src/test/java/org/springframework/ws/transport/jms/JmsMessageSenderIntegrationTest.java
@@ -61,7 +61,7 @@ public class JmsMessageSenderIntegrationTest extends AbstractDependencyInjection
this.messageSender = messageSender;
}
- public void testSendAndReceiveResponse() throws Exception {
+ public void testSendAndReceiveQueue() throws Exception {
WebServiceConnection connection = null;
try {
connection = messageSender.createConnection(REQUEST_QUEUE_URI);
diff --git a/sandbox/src/test/java/org/springframework/ws/transport/tcp/TcpMessageReceiverIntegrationTest.java b/sandbox/src/test/java/org/springframework/ws/transport/tcp/TcpMessageReceiverIntegrationTest.java
index 551fb329..0d724dea 100644
--- a/sandbox/src/test/java/org/springframework/ws/transport/tcp/TcpMessageReceiverIntegrationTest.java
+++ b/sandbox/src/test/java/org/springframework/ws/transport/tcp/TcpMessageReceiverIntegrationTest.java
@@ -55,15 +55,15 @@ public class TcpMessageReceiverIntegrationTest extends AbstractDependencyInjecti
public void testServer() throws IOException, InterruptedException {
Socket socket = new Socket("localhost", TcpMessageReceiver.DEFAULT_PORT);
- Writer writer = null;
- BufferedReader reader = null;
+ Writer writer;
+ BufferedReader reader;
try {
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
writer.write(REQUEST);
writer.flush();
socket.shutdownOutput();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
- String line = null;
+ String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}