Author: jochen
Date: Thu Sep  7 05:33:31 2006
New Revision: 441071

URL: http://svn.apache.org/viewvc?view=rev&rev=441071
Log:
Cookie handling has been impossible so far. It is now possible to add cookie
manually by deriving subclasses. This is also documented.

Modified:
    
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
    
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/site/apt/advanced.apt
    
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
    
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
    webservices/xmlrpc/trunk/src/changes/changes.xml
    webservices/xmlrpc/trunk/src/site/apt/advanced.apt

Modified: 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
 (original)
+++ 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
 Thu Sep  7 05:33:31 2006
@@ -44,7 +44,7 @@
  * HTTP Client.
  */
 public class XmlRpcCommonsTransport extends XmlRpcHttpTransport {
-       private final HttpClient client = new HttpClient();
+       private final HttpClient client = newHttpClient();
        private static final String userAgent = USER_AGENT + " (Jakarta Commons 
httpclient Transport)";
        private PostMethod method;
        private int contentLength = -1;
@@ -60,6 +60,10 @@
        protected void setContentLength(int pLength) {
                contentLength = pLength;
        }
+
+    protected HttpClient newHttpClient() {
+        return new HttpClient();
+    }
 
     protected void initHttpHeaders(XmlRpcRequest pRequest) throws 
XmlRpcClientException {
         config = (XmlRpcHttpClientConfig) pRequest.getConfig();

Modified: 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
 (original)
+++ 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
 Thu Sep  7 05:33:31 2006
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLConnection;
 
 import org.apache.xmlrpc.XmlRpcException;
@@ -26,10 +27,14 @@
                super(pClient, userAgent);
        }
 
+    protected URLConnection newURLConnection(URL pURL) throws IOException {
+        return pURL.openConnection();
+    }
+
        public Object sendRequest(XmlRpcRequest pRequest) throws 
XmlRpcException {
                XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig) 
pRequest.getConfig();
                try {
-                       conn = config.getServerURL().openConnection();
+                       conn = newURLConnection(config.getServerURL());
                        conn.setUseCaches(false);
                        conn.setDoInput(true);
                        conn.setDoOutput(true);

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml 
(original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml Thu 
Sep  7 05:33:31 2006
@@ -3,6 +3,13 @@
     <title>Changes in Apache XML-RPC</title>
   </properties>
   <body>
+    <release version="3.0.1-SNAPSHOT" date="Not yet released">
+      <action dev="jochen" type="fix">
+        Make the HttpClient creation in XmlRpcCommonsTransport and the
+        URLConnection creation in XmlRpcSunHttpTransport protected.
+        This is required for cookie support.
+      </action>
+    </release>
     <release version="3.0" date="30-Aug-2006">
       <action dev="jochen" type="fix" due-to="Matt Preston"
           due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-100">

Modified: 
webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/site/apt/advanced.apt
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/site/apt/advanced.apt?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/site/apt/advanced.apt 
(original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/site/apt/advanced.apt Thu 
Sep  7 05:33:31 2006
@@ -82,6 +82,77 @@
   XmlRpcException, then you'll need to catch the XmlRpcException.
   Otherwise, it's UndeclaredThrowableException.
 
+* Cookie handling
+
+  Cookie has not yet been generalized. In other words, it depends on the
+  transport.
+
+  * The XmlRpcLiteHttpTransport doesn't have support for cookies.
+  * The XmlRpcSunHttpTransport requires hand written code for setting
+    and getting the cookies or using a cookie library. (The latter is
+    recommended, of course.) In either way, you've got to use a custom
+    transport and overwrite the methods newURLConnection(URL),
+    initHttpHeaders(XmlRpcRequest), and close():
+-----------------------------------------------------------------------------------
+    import java.net.URLConnection;
+    import org.apache.xmlrpc.client.XmlRpcClient;
+    import org.apache.xmlrpc.client.XmlRpcSunHttpTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransportFactory;
+
+    final XmlRpcClient client = new XmlRpcClient();
+    XmlRpcTransportFactory factory = new XmlRpcTransportFactory(){
+        public XmlRpcTransport getTransport(){
+            private URLConnection conn;
+            protected URLConnection newURLConnection(URL pURL) throws 
IOException {
+                conn = super.newURLConnection(pURL);
+                return conn;
+            }
+            protected void initHttpHeaders(XmlRpcRequest pRequest) {
+                super.initHttpHeaders(pRequest);
+                setCookies(conn);
+            }
+            protected void close() throws XmlRpcClientException {
+                getCookies(conn);
+            }
+            private void setCookies(URLConnection pConn) {
+                // Implement me ...
+            }
+            private void getCookies(URLConnection pConn) {
+                // Implement me ...
+            }
+        }
+    };
+    client.setTransportFactory(factory);
+-----------------------------------------------------------------------------------
    
+  * The XmlRpcCommonsHttpTransport requires that the HttpClient is being
+    reused. (By default, a new HttpClient is created for any connection.)
+    To reuse the HttpClient, use a transport factory like the following:
+-----------------------------------------------------------------------------------
+    import org.apache.commons.httpclient.HttpClient;
+    import org.apache.xmlrpc.client.XmlRpcClient;
+    import org.apache.xmlrpc.client.XmlRpcCommonsHttpTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransportFactory;
+
+    final XmlRpcClient client = new XmlRpcClient();
+    final HttpClient httpClient = new HttpClient();
+    XmlRpcTransportFactory factory = new XmlRpcTransportFactory(){
+        public XmlRpcTransport getTransport(){
+            return new XmlRpcCommonsHttpTransport(client){
+               protected HttpClient newHttpClient() {
+                   return httpClient;
+               }      
+            };
+        }
+    };
+    client.setTransportFactory(factory);
+-----------------------------------------------------------------------------------
+    Note, that this means losing the XmlRpcClients multithreading abilities!
+    The factory above is obviously bound to the HttpClient, which must be
+    bound to a thread. If you need to set cookies initially, overwrite the
+    transport method initHttpHeaders(XmlRpcRequest) as well.
+
 * Custom data types
 
   Apache XML-RPC was built with extensibility in mind. In particular, it was

Modified: 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
 (original)
+++ 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
 Thu Sep  7 05:33:31 2006
@@ -44,7 +44,7 @@
  * HTTP Client.
  */
 public class XmlRpcCommonsTransport extends XmlRpcHttpTransport {
-       private final HttpClient client = new HttpClient();
+       private final HttpClient client = newHttpClient();
        private static final String userAgent = USER_AGENT + " (Jakarta Commons 
httpclient Transport)";
        private PostMethod method;
        private int contentLength = -1;
@@ -60,6 +60,10 @@
        protected void setContentLength(int pLength) {
                contentLength = pLength;
        }
+
+    protected HttpClient newHttpClient() {
+        return new HttpClient();
+    }
 
     protected void initHttpHeaders(XmlRpcRequest pRequest) throws 
XmlRpcClientException {
         config = (XmlRpcHttpClientConfig) pRequest.getConfig();

Modified: 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
 (original)
+++ 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
 Thu Sep  7 05:33:31 2006
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLConnection;
 
 import org.apache.xmlrpc.XmlRpcException;
@@ -26,10 +27,14 @@
                super(pClient, userAgent);
        }
 
+    protected URLConnection newURLConnection(URL pURL) throws IOException {
+        return pURL.openConnection();
+    }
+
        public Object sendRequest(XmlRpcRequest pRequest) throws 
XmlRpcException {
                XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig) 
pRequest.getConfig();
                try {
-                       conn = config.getServerURL().openConnection();
+                       conn = newURLConnection(config.getServerURL());
                        conn.setUseCaches(false);
                        conn.setDoInput(true);
                        conn.setDoOutput(true);

Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/changes/changes.xml?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Thu Sep  7 05:33:31 2006
@@ -3,6 +3,13 @@
     <title>Changes in Apache XML-RPC</title>
   </properties>
   <body>
+    <release version="3.0.1-SNAPSHOT" date="Not yet released">
+      <action dev="jochen" type="fix">
+        Make the HttpClient creation in XmlRpcCommonsTransport and the
+        URLConnection creation in XmlRpcSunHttpTransport protected.
+        This is required for cookie support.
+      </action>
+    </release>
     <release version="3.0" date="30-Aug-2006">
       <action dev="jochen" type="fix" due-to="Matt Preston"
           due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-100">

Modified: webservices/xmlrpc/trunk/src/site/apt/advanced.apt
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/site/apt/advanced.apt?view=diff&rev=441071&r1=441070&r2=441071
==============================================================================
--- webservices/xmlrpc/trunk/src/site/apt/advanced.apt (original)
+++ webservices/xmlrpc/trunk/src/site/apt/advanced.apt Thu Sep  7 05:33:31 2006
@@ -82,6 +82,77 @@
   XmlRpcException, then you'll need to catch the XmlRpcException.
   Otherwise, it's UndeclaredThrowableException.
 
+* Cookie handling
+
+  Cookie has not yet been generalized. In other words, it depends on the
+  transport.
+
+  * The XmlRpcLiteHttpTransport doesn't have support for cookies.
+  * The XmlRpcSunHttpTransport requires hand written code for setting
+    and getting the cookies or using a cookie library. (The latter is
+    recommended, of course.) In either way, you've got to use a custom
+    transport and overwrite the methods newURLConnection(URL),
+    initHttpHeaders(XmlRpcRequest), and close():
+-----------------------------------------------------------------------------------
+    import java.net.URLConnection;
+    import org.apache.xmlrpc.client.XmlRpcClient;
+    import org.apache.xmlrpc.client.XmlRpcSunHttpTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransportFactory;
+
+    final XmlRpcClient client = new XmlRpcClient();
+    XmlRpcTransportFactory factory = new XmlRpcTransportFactory(){
+        public XmlRpcTransport getTransport(){
+            private URLConnection conn;
+            protected URLConnection newURLConnection(URL pURL) throws 
IOException {
+                conn = super.newURLConnection(pURL);
+                return conn;
+            }
+            protected void initHttpHeaders(XmlRpcRequest pRequest) {
+                super.initHttpHeaders(pRequest);
+                setCookies(conn);
+            }
+            protected void close() throws XmlRpcClientException {
+                getCookies(conn);
+            }
+            private void setCookies(URLConnection pConn) {
+                // Implement me ...
+            }
+            private void getCookies(URLConnection pConn) {
+                // Implement me ...
+            }
+        }
+    };
+    client.setTransportFactory(factory);
+-----------------------------------------------------------------------------------
    
+  * The XmlRpcCommonsHttpTransport requires that the HttpClient is being
+    reused. (By default, a new HttpClient is created for any connection.)
+    To reuse the HttpClient, use a transport factory like the following:
+-----------------------------------------------------------------------------------
+    import org.apache.commons.httpclient.HttpClient;
+    import org.apache.xmlrpc.client.XmlRpcClient;
+    import org.apache.xmlrpc.client.XmlRpcCommonsHttpTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransport;
+    import org.apache.xmlrpc.client.XmlRpcTransportFactory;
+
+    final XmlRpcClient client = new XmlRpcClient();
+    final HttpClient httpClient = new HttpClient();
+    XmlRpcTransportFactory factory = new XmlRpcTransportFactory(){
+        public XmlRpcTransport getTransport(){
+            return new XmlRpcCommonsHttpTransport(client){
+               protected HttpClient newHttpClient() {
+                   return httpClient;
+               }      
+            };
+        }
+    };
+    client.setTransportFactory(factory);
+-----------------------------------------------------------------------------------
+    Note, that this means losing the XmlRpcClients multithreading abilities!
+    The factory above is obviously bound to the HttpClient, which must be
+    bound to a thread. If you need to set cookies initially, overwrite the
+    transport method initHttpHeaders(XmlRpcRequest) as well.
+
 * Custom data types
 
   Apache XML-RPC was built with extensibility in mind. In particular, it was


Reply via email to