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