You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/05/05 20:19:11 UTC
svn commit: r941411 - in /cxf/trunk:
common/common/src/main/java/org/apache/cxf/helpers/
rt/core/src/main/java/org/apache/cxf/interceptor/
rt/transports/http/src/main/java/org/apache/cxf/transport/http/
systests/databinding/src/test/java/org/apache/cxf...
Author: dkulp
Date: Wed May 5 18:19:11 2010
New Revision: 941411
URL: http://svn.apache.org/viewvc?rev=941411&view=rev
Log:
[CXF-2768] Make sure large inputstreams are closed on server side
Modified:
cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWs.java
cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsImpl.java
cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsTest.java
Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/FileUtils.java Wed May 5 18:19:11 2010
@@ -41,7 +41,7 @@ public final class FileUtils {
}
- private static synchronized File getDefaultTempDir() {
+ public static synchronized File getDefaultTempDir() {
if (defaultTempDir != null
&& defaultTempDir.exists()) {
return defaultTempDir;
Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java Wed May 5 18:19:11 2010
@@ -20,6 +20,7 @@
package org.apache.cxf.interceptor;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -57,6 +58,7 @@ public class OutgoingChainInterceptor ex
Exchange ex = message.getExchange();
BindingOperationInfo bin = ex.get(BindingOperationInfo.class);
if (null != bin && null != bin.getOperationInfo() && bin.getOperationInfo().isOneWay()) {
+ closeInput(message);
return;
}
Message out = ex.getOutMessage();
@@ -76,6 +78,18 @@ public class OutgoingChainInterceptor ex
}
}
+ private void closeInput(Message message) {
+ InputStream is = message.getContent(InputStream.class);
+ if (is != null) {
+ try {
+ is.close();
+ message.removeContent(InputStream.class);
+ } catch (IOException ioex) {
+ //ignore
+ }
+ }
+ }
+
protected static Conduit getBackChannelConduit(Message message) {
Conduit conduit = null;
Exchange ex = message.getExchange();
Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Wed May 5 18:19:11 2010
@@ -560,6 +560,27 @@ public abstract class AbstractHTTPDestin
new WrappedOutputStream(message, response));
}
}
+
+ @Override
+ public void close(Message msg) throws IOException {
+ super.close(msg);
+ if (msg.getExchange() == null) {
+ return;
+ }
+ Message m = msg.getExchange().getInMessage();
+ if (m == null || msg.getExchange().isOneWay()) {
+ return;
+ }
+ InputStream is = m.getContent(InputStream.class);
+ if (is != null) {
+ try {
+ is.close();
+ m.removeContent(InputStream.class);
+ } catch (IOException ioex) {
+ //ignore
+ }
+ }
+ }
}
/**
@@ -602,6 +623,21 @@ public abstract class AbstractHTTPDestin
wrappedStream.close();
response.flushBuffer();
}
+ /*
+ try {
+ //make sure the input stream is also closed in this
+ //case so that any resources it may have is cleaned up
+ Message m = outMessage.getExchange().getInMessage();
+ if (m != null) {
+ InputStream ins = m.getContent(InputStream.class);
+ if (ins != null) {
+ ins.close();
+ }
+ }
+ } catch (IOException ex) {
+ //ignore
+ }
+ */
}
public void flush() throws IOException {
Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWs.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWs.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWs.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWs.java Wed May 5 18:19:11 2010
@@ -54,4 +54,7 @@ public interface AegisJaxWs {
//try comment this method
@WebMethod
java.util.List<String> getStringList();
+
+ @WebMethod
+ java.util.List<String> echoBigList(java.util.List<String> l);
}
Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsImpl.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsImpl.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsImpl.java Wed May 5 18:19:11 2010
@@ -61,4 +61,9 @@ public class AegisJaxWsImpl implements A
public List<String> getStringList() {
return Arrays.asList("a", "b", "c");
}
+
+ public java.util.List<String> echoBigList(java.util.List<String> l) {
+ return l;
+ }
+
}
Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsTest.java?rev=941411&r1=941410&r2=941411&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsTest.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisJaxWsTest.java Wed May 5 18:19:11 2010
@@ -19,6 +19,8 @@
package org.apache.cxf.systest.aegis;
+import java.io.File;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -26,6 +28,7 @@ import java.util.Map;
import java.util.Map.Entry;
import org.apache.cxf.aegis.databinding.AegisDatabinding;
+import org.apache.cxf.helpers.FileUtils;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.systest.aegis.bean.Item;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
@@ -113,4 +116,22 @@ public class AegisJaxWsTest extends Abst
List<String> item = client.getStringList();
Assert.assertEquals(Arrays.asList("a", "b", "c"), item);
}
+ @Test
+ public void testBigList() throws Exception {
+ int size = 1000;
+ List<String> l = new ArrayList<String>(size);
+ for (int x = 0; x < size; x++) {
+ l.add("Need to create a pretty big soap message to make sure we go over "
+ + "some of the default buffer sizes and such so we can see what really"
+ + "happens when we do that - " + x);
+ }
+
+ setupForTest(false);
+ List<String> item = client.echoBigList(l);
+ Assert.assertEquals(size, item.size());
+
+ //CXF-2768
+ File f = FileUtils.getDefaultTempDir();
+ Assert.assertEquals(0, f.listFiles().length);
+ }
}