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);
}