diff --git a/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java b/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java index 9d5bb46a..230f0afa 100644 --- a/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java +++ b/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java @@ -415,9 +415,8 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService return handleFault(connection, request, response); } else { - Object extracted = responseExtractor.extractData(response); logResponse(request, response); - return extracted; + return responseExtractor.extractData(response); } } else { diff --git a/core/src/main/java/org/springframework/ws/transport/AbstractReceiverConnection.java b/core/src/main/java/org/springframework/ws/transport/AbstractReceiverConnection.java index 8afb2ab4..75736128 100644 --- a/core/src/main/java/org/springframework/ws/transport/AbstractReceiverConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/AbstractReceiverConnection.java @@ -47,6 +47,25 @@ public abstract class AbstractReceiverConnection extends AbstractWebServiceConne return responseOutputStream; } + public final void close() throws IOException { + try { + if (requestInputStream != null) { + requestInputStream.close(); + } + } + finally { + onClose(); + } + } + + /** + * Template method invoked from {@link #close()}. Default implementation is empty. + * + * @throws IOException if an I/O error occurs when closing this connection + */ + protected void onClose() throws IOException { + } + /** * Returns an iteration over all the header names this request contains. Returns an empty Iterator if * there areno headers. @@ -89,6 +108,11 @@ public abstract class AbstractReceiverConnection extends AbstractWebServiceConne return getRequestHeaders(name); } + public void close() throws IOException { + // defer close, some SoapMessage implementations (Axis) lazy-initialize the SOAPMessage + } + + } /** Implementation of TransportOutputStream for sending-side connections. */ diff --git a/core/src/main/java/org/springframework/ws/transport/AbstractSenderConnection.java b/core/src/main/java/org/springframework/ws/transport/AbstractSenderConnection.java index 8a4dabbe..76ef7fb8 100644 --- a/core/src/main/java/org/springframework/ws/transport/AbstractSenderConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/AbstractSenderConnection.java @@ -52,6 +52,25 @@ public abstract class AbstractSenderConnection extends AbstractWebServiceConnect } } + public final void close() throws IOException { + try { + if (responseInputStream != null) { + responseInputStream.close(); + } + } + finally { + onClose(); + } + } + + /** + * Template method invoked from {@link #close()}. Default implementation is empty. + * + * @throws IOException if an I/O error occurs when closing this connection + */ + protected void onClose() throws IOException { + } + /** Indicates whether this connection has a response. */ protected abstract boolean hasResponse() throws IOException; @@ -109,6 +128,10 @@ public abstract class AbstractSenderConnection extends AbstractWebServiceConnect return getResponseHeaders(name); } + public void close() throws IOException { + // defer close, some SoapMessage implementations (Axis) lazy-initialize the SOAPMessage + } + } } diff --git a/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpConnection.java b/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpConnection.java index 82ba9080..8d144b14 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/http/CommonsHttpConnection.java @@ -27,6 +27,7 @@ import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.PostMethod; + import org.springframework.util.Assert; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.transport.WebServiceConnection; @@ -57,7 +58,7 @@ public class CommonsHttpConnection extends AbstractHttpSenderConnection { return postMethod; } - public void close() throws IOException { + public void onClose() throws IOException { postMethod.releaseConnection(); } diff --git a/core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java b/core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java index 4f948950..1f381f65 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/http/HttpServletConnection.java @@ -16,7 +16,6 @@ package org.springframework.ws.transport.http; -import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -91,12 +90,7 @@ public class HttpServletConnection extends AbstractReceiverConnection } protected InputStream getRequestInputStream() throws IOException { - return new FilterInputStream(getHttpServletRequest().getInputStream()) { - - public void close() throws IOException { - // defer close, some SAAJ implementations (Axis 1) lazy-initialize the SOAPMessage - } - }; + return getHttpServletRequest().getInputStream(); } /* @@ -115,7 +109,7 @@ public class HttpServletConnection extends AbstractReceiverConnection statusCodeSet = true; } - public void close() throws IOException { + public void onClose() throws IOException { if (!statusCodeSet) { getHttpServletResponse().setStatus(HttpTransportConstants.STATUS_ACCEPTED); } diff --git a/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java b/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java index 80671fbe..202e0b5b 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java +++ b/core/src/main/java/org/springframework/ws/transport/http/HttpUrlConnection.java @@ -55,7 +55,7 @@ public class HttpUrlConnection extends AbstractHttpSenderConnection { return connection; } - public void close() { + public void onClose() { connection.disconnect(); } diff --git a/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpReceiverConnection.java b/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpReceiverConnection.java index e864a663..50f44392 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpReceiverConnection.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpReceiverConnection.java @@ -46,7 +46,7 @@ public class TcpReceiverConnection extends AbstractReceiverConnection { return null; } - public void close() throws IOException { + public void onClose() throws IOException { socket.close(); } diff --git a/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpSenderConnection.java b/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpSenderConnection.java index c5e865c3..27bd6b6d 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpSenderConnection.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/tcp/TcpSenderConnection.java @@ -49,7 +49,7 @@ public class TcpSenderConnection extends AbstractSenderConnection { return socket; } - public void close() throws IOException { + public void onClose() throws IOException { socket.close(); } diff --git a/support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java b/support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java index d7872f6e..185a39f9 100644 --- a/support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java +++ b/support/src/main/java/org/springframework/ws/transport/jms/JmsReceiverConnection.java @@ -40,7 +40,7 @@ import org.springframework.ws.transport.support.EnumerationIterator; * @author Arjen Poutsma * @since 1.5.0 */ -public class JmsReceiverConnection extends AbstractReceiverConnection implements WebServiceConnection { +public class JmsReceiverConnection extends AbstractReceiverConnection { private final BytesMessage requestMessage; @@ -48,9 +48,7 @@ public class JmsReceiverConnection extends AbstractReceiverConnection implements private BytesMessage responseMessage; - /** - * Constructs a new JMS connection with the given parameters. - */ + /** Constructs a new JMS connection with the given parameters. */ protected JmsReceiverConnection(BytesMessage requestMessage, Session session) { Assert.notNull(requestMessage, "requestMessage must not be null"); Assert.notNull(session, "session must not be null"); @@ -58,16 +56,12 @@ public class JmsReceiverConnection extends AbstractReceiverConnection implements this.session = session; } - /** - * Returns the request message for this connection. - */ + /** Returns the request message for this connection. */ public BytesMessage getRequestMessage() { return requestMessage; } - /** - * Returns the response message, if any, for this connection. - */ + /** Returns the response message, if any, for this connection. */ public BytesMessage getResponseMessage() { return responseMessage; } @@ -152,7 +146,4 @@ public class JmsReceiverConnection extends AbstractReceiverConnection implements } } - public void close() throws IOException { - } - } diff --git a/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java b/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java index c9fca80d..6c0a0f61 100644 --- a/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java +++ b/support/src/main/java/org/springframework/ws/transport/jms/JmsSenderConnection.java @@ -242,7 +242,7 @@ public class JmsSenderConnection extends AbstractSenderConnection implements Web return new BytesMessageInputStream(responseMessage); } - public void close() throws IOException { + protected void onClose() throws IOException { JmsUtils.closeSession(session); ConnectionFactoryUtils.releaseConnection(connection, connectionFactory, true); } diff --git a/support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java b/support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java index 7dc2486b..f4c65851 100644 --- a/support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java +++ b/support/src/main/java/org/springframework/ws/transport/mail/MailReceiverConnection.java @@ -66,9 +66,7 @@ public class MailReceiverConnection extends AbstractReceiverConnection { private InternetAddress from; - /** - * Constructs a new Mail connection with the given parameters. - */ + /** Constructs a new Mail connection with the given parameters. */ protected MailReceiverConnection(Message requestMessage, Session session) { Assert.notNull(requestMessage, "'requestMessage' must not be null"); Assert.notNull(session, "'session' must not be null"); @@ -76,16 +74,12 @@ public class MailReceiverConnection extends AbstractReceiverConnection { this.session = session; } - /** - * Returns the request message for this connection. - */ + /** Returns the request message for this connection. */ public Message getRequestMessage() { return requestMessage; } - /** - * Returns the response message, if any, for this connection. - */ + /** Returns the response message, if any, for this connection. */ public Message getResponseMessage() { return responseMessage; } @@ -113,12 +107,9 @@ public class MailReceiverConnection extends AbstractReceiverConnection { return false; } - public void close() throws IOException { - } - /* - * Receiving - */ + * Receiving + */ protected Iterator getRequestHeaderNames() throws IOException { try { diff --git a/support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java b/support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java index 10ee61df..6e64edf8 100644 --- a/support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java +++ b/support/src/main/java/org/springframework/ws/transport/mail/MailSenderConnection.java @@ -45,6 +45,7 @@ import javax.mail.search.SearchTerm; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.util.Assert; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.transport.AbstractSenderConnection; @@ -92,9 +93,7 @@ public class MailSenderConnection extends AbstractSenderConnection { private Folder folder; - /** - * Constructs a new Mail connection with the given parameters. - */ + /** Constructs a new Mail connection with the given parameters. */ protected MailSenderConnection(Session session, URLName transportUri, URLName storeUri, @@ -111,16 +110,12 @@ public class MailSenderConnection extends AbstractSenderConnection { this.receiveTimeout = receiveTimeout; } - /** - * Returns the request message for this connection. - */ + /** Returns the request message for this connection. */ public Message getRequestMessage() { return requestMessage; } - /** - * Returns the response message, if any, for this connection. - */ + /** Returns the response message, if any, for this connection. */ public Message getResponseMessage() { return responseMessage; } @@ -287,7 +282,7 @@ public class MailSenderConnection extends AbstractSenderConnection { return null; } - public void close() throws IOException { + public void onClose() throws IOException { MailTransportUtils.closeFolder(folder, deleteAfterReceive); MailTransportUtils.closeService(store); }