Hi Henri,
I'm currently focusing on fixing up 1.2 (the stuff you saw on 2.0 was to
fix a bug, not to add a feature). I'm also not that au fait with the
CommonsHttpTransport stuff (that's Ryan's baby), so I am loathe to add
features without test cases.
Can you provide some test cases that use your gzip functionality?
Creating a bugzilla bug and attaching the patch and a test case to it is
a great way of making committer's lives easier (and getting your patch
accepted as a result ;).
Regards,
Andrew.
-----Original Message-----
From: Henri Gomez [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 30, 2005 2:57 PM
To: xmlrpc-dev@ws.apache.org
Subject: Re: cvs commit: ws-xmlrpc/src/java/org/apache/xmlrpc
CommonsXmlRpcTransport.java DefaultXmlRpcTransport.java
LiteXmlRpcTransport.java XmlRpc.java XmlRpcClientWorker.java
XmlRpcTransport.java
What about adding my fixes to support gzip compression ?
On 30 Mar 2005 11:19:18 -0000, [EMAIL PROTECTED] <[EMAIL PROTECTED]>
wrote:
aevers 2005/03/30 03:19:18
Modified: src/java/org/apache/xmlrpc CommonsXmlRpcTransport.java
DefaultXmlRpcTransport.java
LiteXmlRpcTransport.java XmlRpc.java
XmlRpcClientWorker.java XmlRpcTransport.java
Log:
Bug 20339: LiteXmlRpcTransport throws IOExcpetion 'socket closed'
Fix general resource leaks regarding connections in client side
transpot code. There is now an endClientRequest() in the
XmlRpcTransport interface. Appropriate implementations have been
filled in for all shipped transports.
Passes all tests except Base64 (was already broken). Note, for
tests to pass you must have commons-logging installed as
it is used by commons-httpclient.
PR: 20339
Revision Changes Path
1.3 +28 -10
ws-xmlrpc/src/java/org/apache/xmlrpc/CommonsXmlRpcTransport.java
Index: CommonsXmlRpcTransport.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/CommonsXmlRpcTransport.ja
va,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CommonsXmlRpcTransport.java 26 Dec 2003 16:57:51 -0000
1.2
+++ CommonsXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000
1.3
@@ -76,20 +76,28 @@
* @version $Id$
* @since 1.2
*/
-public class CommonsXmlRpcTransport implements XmlRpcTransport {
+public class CommonsXmlRpcTransport implements XmlRpcTransport
+{
+ protected PostMethod method;
+
/** Creates a new instance of CommonsXmlRpcTransport */
- public CommonsXmlRpcTransport(URL url, HttpClient client) {
+ public CommonsXmlRpcTransport(URL url, HttpClient client)
+ {
this.url = url;
- if (client == null) {
+ if (client == null)
+ {
HttpClient newClient = new HttpClient();
this.client = newClient;
- } else {
+ }
+ else
+ {
this.client = client;
}
}
- public CommonsXmlRpcTransport(URL url) {
+ public CommonsXmlRpcTransport(URL url)
+ {
this(url, null);
}
@@ -98,8 +106,9 @@
private final Header userAgentHeader = new Header("User-Agent",
XmlRpc.version);
private boolean http11 = false; // defaults to HTTP 1.0
- public InputStream sendXmlRpc(byte[] request) throws
IOException, XmlRpcClientException {
- PostMethod method = new PostMethod(url.toString());
+ public InputStream sendXmlRpc(byte[] request) throws
IOException, XmlRpcClientException
+ {
+ method = new PostMethod(url.toString());
method.setHttp11(http11);
method.setRequestHeader(new Header("Content-Type",
"text/xml"));
method.setRequestHeader(userAgentHeader);
@@ -112,11 +121,20 @@
return method.getResponseBodyAsStream();
}
- public void setHttp11(boolean http11) {
+ public void setHttp11(boolean http11)
+ {
this.http11 = http11;
}
- public void setUserAgent(String userAgent) {
+ public void setUserAgent(String userAgent)
+ {
userAgentHeader.setValue(userAgent);
}
+
+ public void endClientRequest()
+ throws XmlRpcClientException
+ {
+ // Rlease connection resources
+ method.releaseConnection();
+ }
}
1.3 +16 -2
ws-xmlrpc/src/java/org/apache/xmlrpc/DefaultXmlRpcTransport.java
Index: DefaultXmlRpcTransport.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/DefaultXmlRpcTransport.ja
va,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultXmlRpcTransport.java 29 Jan 2003 00:46:37 -0000
1.2
+++ DefaultXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000
1.3
@@ -75,6 +75,7 @@
{
protected URL url;
protected String auth;
+ protected URLConnection con;
/**
* Create a new DefaultXmlRpcTransport with the specified URL
and basic
@@ -104,7 +105,7 @@
public InputStream sendXmlRpc(byte [] request)
throws IOException
{
- URLConnection con = url.openConnection();
+ con = url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
@@ -133,4 +134,17 @@
{
auth = HttpUtil.encodeBasicAuthentication(user, password);
}
+
+ public void endClientRequest()
+ throws XmlRpcClientException
+ {
+ try
+ {
+ con.getInputStream().close();
+ }
+ catch (Exception e)
+ {
+ throw new XmlRpcClientException("Exception closing
URLConnection", e);
+ }
+ }
}
1.4 +10 -7
ws-xmlrpc/src/java/org/apache/xmlrpc/LiteXmlRpcTransport.java
Index: LiteXmlRpcTransport.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/LiteXmlRpcTransport.java,
v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LiteXmlRpcTransport.java 1 May 2003 16:53:15 -0000 1.3
+++ LiteXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.4
@@ -147,12 +147,6 @@
}
}
- // eepalive is always false if XmlRpc.keepalive is
false
- if (!keepalive)
- {
- closeConnection ();
- }
-
return in;
}
catch (IOException iox)
@@ -326,6 +320,15 @@
auth = HttpUtil.encodeBasicAuthentication(user, password);
}
+ public void endClientRequest()
+ {
+ // eepalive is always false if XmlRpc.keepalive is false
+ if (!keepalive)
+ {
+ closeConnection ();
+ }
+ }
+
/**
*
* @return
1.38 +41 -2
ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpc.java
Index: XmlRpc.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpc.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- XmlRpc.java 30 Jun 2004 06:11:55 -0000 1.37
+++ XmlRpc.java 30 Mar 2005 11:19:18 -0000 1.38
@@ -56,6 +56,7 @@
*/
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.Hashtable;
import java.util.Stack;
import java.util.Vector;
@@ -188,6 +189,15 @@
*/
static String encoding = XmlWriter.ISO8859_1;
+ /**
+ * Java's name for the input encoding we're using. Defaults to
+ * <code>null</code>, signifying the platform default. This may
+ * need to be overridden on platforms where the default
encoding
+ * is not compatible with ASCII (eg. EBCDIC) but the network is
+ * still ASCII-like.
+ */
+ static String inputEncoding = null;
+
private TypeFactory typeFactory;
/**
@@ -342,6 +352,28 @@
}
/**
+ * Set the input encoding of the XML.
+ * This is used only if set.
+ *
+ * @param enc The Java name of the encoding.
+ */
+ public static void setInputEncoding(String enc)
+ {
+ inputEncoding = enc;
+ }
+
+ /**
+ * Return the input encoding. This may be null. This is always
a
+ * Java encoding name, it is not transformed.
+ *
+ * @return the Java encoding name to use, if set, otherwise
null.
+ */
+ public static String getInputEncoding ()
+ {
+ return inputEncoding;
+ }
+
+ /**
* Gets the maximum number of threads used at any given moment.
*/
public static int getMaxThreads()
@@ -440,7 +472,14 @@
}
try
{
- parser.parse(new InputSource (is));
+ if(inputEncoding == null)
+ {
+ parser.parse(new InputSource (is));
+ }
+ else
+ {
+ parser.parse( new InputSource( new
InputStreamReader(is, inputEncoding)));
+ }
}
finally
{
1.2 +8 -0
ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java
Index: XmlRpcClientWorker.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XmlRpcClientWorker.java 5 Dec 2002 08:49:24 -0000 1.1
+++ XmlRpcClientWorker.java 30 Mar 2005 11:19:18 -0000 1.2
@@ -136,6 +136,14 @@
System.out.println("Spent " +
(System.currentTimeMillis() - now)
+ " millis in
request/process/response");
}
+ try
+ {
+ transport.endClientRequest();
+ }
+ catch (RuntimeException re)
+ {
+ throw new XmlRpcClientException("Transport
exception in endClientRequest()", re);
+ }
}
}
1.2 +19 -1
ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcTransport.java
Index: XmlRpcTransport.java
===================================================================
RCS file:
/home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcTransport.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XmlRpcTransport.java 5 Dec 2002 08:49:24 -0000 1.1
+++ XmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.2
@@ -68,6 +68,24 @@
*/
public interface XmlRpcTransport
{
+ /**
+ * Send an XML-RPC message. This method is called to send a
message to the
+ * other party.
+ *
+ * @param request the request in network encoding.
+ *
+ * @throws IOException if an IOException occurs in the IO level
of the transport.
+ * @throws XmlRpcClientException if an exception occurs in the
transport.
+ */
public InputStream sendXmlRpc(byte [] request)
throws IOException, XmlRpcClientException;
+
+ /**
+ * End an XML-RPC request. This method is called by the
XmlRpcClient when then
+ * request has been sent and the response (or an exception)
recieved.
+ *
+ * @throws XmlRpcClientException if an exception occurs in the
transport.
+ */
+ public void endClientRequest()
+ throws XmlRpcClientException;
}