diff --git a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportMessageListener.java b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportMessageListener.java index f35a467e..f856ecd6 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportMessageListener.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportMessageListener.java @@ -88,6 +88,7 @@ public class JmsTransportMessageListener extends ServerTransportObjectSupport public void onMessage(Message message, Session session) throws JMSException { if (message instanceof TextMessage) { + logger.info("Received message [" + message.getJMSMessageID() + "]"); try { TransportInputStream tis = new JmsTransportInputStream((TextMessage) message); TransportOutputStream tos; @@ -100,7 +101,7 @@ public class JmsTransportMessageListener extends ServerTransportObjectSupport handle(tis, tos, getMessageEndpoint()); } catch (Exception ex) { - throw new JMSException(ex.getMessage()); + logger.error(ex, ex); } } else { @@ -111,8 +112,13 @@ public class JmsTransportMessageListener extends ServerTransportObjectSupport protected void handleResponse(TransportInputStream tis, TransportOutputStream tos, WebServiceMessage response) throws Exception { if (tos != null) { - TextMessage requestMessage = ((JmsTransportInputStream) tis).getTextMessage(); - TextMessage responseMessage = ((JmsTransportOutputStream) tos).getTextMessage(); + Message requestMessage = ((JmsTransportInputStream) tis).getTextMessage(); + if (requestMessage.getJMSReplyTo() == null) { + logger.warn("Incoming message has no ReplyTo set, not sending response"); + return; + } + response.writeTo(tos); + Message responseMessage = ((JmsTransportOutputStream) tos).getTextMessage(); Session session = ((JmsTransportOutputStream) tos).getSession(); MessageProducer producer = session.createProducer(requestMessage.getJMSReplyTo()); try { diff --git a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportOutputStream.java b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportOutputStream.java index 00104fce..237f5210 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportOutputStream.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/jms/JmsTransportOutputStream.java @@ -49,8 +49,7 @@ public class JmsTransportOutputStream extends TransportOutputStream { * @see javax.jms.Message#setJMSCorrelationID(String) */ public JmsTransportOutputStream(Session session) { - Assert.notNull(session, "session must not be null"); - this.session = session; + this(session, null); } /** @@ -63,7 +62,6 @@ public class JmsTransportOutputStream extends TransportOutputStream { */ public JmsTransportOutputStream(Session session, String correlationId) { Assert.notNull(session, "session must not be null"); - Assert.hasLength(correlationId, "correlationId must not be null"); this.session = session; this.correlationId = correlationId; } @@ -108,6 +106,15 @@ public class JmsTransportOutputStream extends TransportOutputStream { private class TextMessageOutputStream extends ByteArrayOutputStream { + public void flush() throws IOException { + try { + getTextMessage().setText(new String(toString("UTF-8"))); + } + catch (JMSException ex) { + throw new IOException("Could not set message text: " + ex.getMessage()); + } + } + public void close() throws IOException { try { getTextMessage().setText(new String(toString("UTF-8")));