Author: jochen
Date: Fri Aug 18 02:55:18 2006
New Revision: 432537
URL: http://svn.apache.org/viewvc?rev=432537&view=rev
Log:
Various fixes related to basic authentication.
PR: XMLRPC-103
PR: XMLRPC-104
Submitted by: Landon Fuller, [EMAIL PROTECTED]
Modified:
webservices/xmlrpc/trunk/.classpath
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransportFactory.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcHttpTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLiteHttpTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransportFactory.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcSunHttpTransport.java
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcTransportFactory.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/HttpUtil.java
webservices/xmlrpc/trunk/pom.xml
webservices/xmlrpc/trunk/src/changes/changes.xml
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
Modified: webservices/xmlrpc/trunk/.classpath
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/.classpath?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/.classpath (original)
+++ webservices/xmlrpc/trunk/.classpath Fri Aug 18 02:55:18 2006
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="common/src/main/java"/>
- <classpathentry kind="src" path="client/src/main/java"/>
- <classpathentry kind="src" path="server/src/main/java"/>
+ <classpathentry kind="src" output="common/target/classes"
path="common/src/main/java"/>
+ <classpathentry kind="src" output="client/target/classes"
path="client/src/main/java"/>
+ <classpathentry kind="src" output="server/target/classes"
path="server/src/main/java"/>
<classpathentry kind="src" path="tests/src/test/java"/>
<classpathentry kind="src" path="tests/src/test/resources"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con"
path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
- <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="output" path="tests/target/test-classes"/>
</classpath>
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?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
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
Fri Aug 18 02:55:18 2006
@@ -16,6 +16,7 @@
package org.apache.xmlrpc.client;
import java.io.BufferedOutputStream;
+import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -34,6 +35,7 @@
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.util.HttpUtil;
import org.apache.xmlrpc.util.XmlRpcIOException;
+import org.xml.sax.SAXException;
/** An HTTP transport factory, which is based on the Jakarta Commons
@@ -44,6 +46,7 @@
private static final String userAgent = USER_AGENT + " (Jakarta Commons
httpclient Transport)";
private PostMethod method;
private int contentLength = -1;
+ private XmlRpcHttpClientConfig config;
/** Creates a new instance.
* @param pClient The client, which will be invoking the transport.
@@ -56,9 +59,10 @@
contentLength = pLength;
}
- public Object sendRequest(XmlRpcRequest pRequest) throws
XmlRpcException {
- XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig)
pRequest.getConfig();
- method = new PostMethod(config.getServerURL().toString());
+ protected void initHttpHeaders(XmlRpcRequest pRequest) throws
XmlRpcClientException {
+ config = (XmlRpcHttpClientConfig) pRequest.getConfig();
+ method = new PostMethod(config.getServerURL().toString());
+ super.initHttpHeaders(pRequest);
if (config.getConnectionTimeout() != 0)
client.getHttpConnectionManager().getParams().setConnectionTimeout(config.getConnectionTimeout());
@@ -66,9 +70,8 @@
if (config.getReplyTimeout() != 0)
client.getHttpConnectionManager().getParams().setSoTimeout(config.getConnectionTimeout());
- method.getParams().setVersion(HttpVersion.HTTP_1_1);
- return super.sendRequest(pRequest);
- }
+ method.getParams().setVersion(HttpVersion.HTTP_1_1);
+ }
protected void setRequestHeader(String pHeader, String pValue) {
method.setRequestHeader(new Header(pHeader, pValue));
@@ -99,7 +102,8 @@
Credentials creds = new
UsernamePasswordCredentials(userName, pConfig.getBasicPassword());
AuthScope scope = new AuthScope(null,
AuthScope.ANY_PORT, null, AuthScope.ANY_SCHEME);
client.getState().setCredentials(scope, creds);
- }
+ client.getParams().setAuthenticationPreemptive(true);
+ }
}
protected void close() throws XmlRpcClientException {
@@ -115,23 +119,35 @@
}
}
- protected void writeRequest(final RequestWriter pWriter) throws
XmlRpcException {
+ protected void writeRequest(final ReqWriter pWriter) throws
XmlRpcException {
method.setRequestEntity(new RequestEntity(){
- public boolean isRepeatable() { return false; }
+ public boolean isRepeatable() { return contentLength !=
-1; }
public void writeRequest(OutputStream pOut) throws
IOException {
- /* Make sure, that the socket is not closed by
replacing it with our
- * own BufferedOutputStream.
- */
- BufferedOutputStream bos = new
BufferedOutputStream(pOut){
- public void close() throws IOException {
- flush();
- }
- };
try {
- pWriter.write(bos);
+ /* Make sure, that the socket is not closed by replacing
it with our
+ * own BufferedOutputStream.
+ */
+ OutputStream ostream;
+ if (isUsingByteArrayOutput(config)) {
+ // No need to buffer the output.
+ ostream = new FilterOutputStream(pOut){
+ public void close() throws IOException {
+ flush();
+ }
+ };
+ } else {
+ ostream = new BufferedOutputStream(pOut){
+ public void close() throws IOException {
+ flush();
+ }
+ };
+ }
+ pWriter.write(ostream);
} catch (XmlRpcException e) {
throw new XmlRpcIOException(e);
- }
+ } catch (SAXException e) {
+ throw new XmlRpcIOException(e);
+ }
}
public long getContentLength() { return contentLength; }
public String getContentType() { return "text/xml"; }
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransportFactory.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransportFactory.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransportFactory.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcCommonsTransportFactory.java
Fri Aug 18 02:55:18 2006
@@ -20,17 +20,14 @@
* HTTP Client.
*/
public class XmlRpcCommonsTransportFactory extends XmlRpcTransportFactoryImpl {
- private final XmlRpcCommonsTransport COMMONS_TRANSPORT;
-
/** Creates a new instance.
* @param pClient The client, which is controlling the factory.
*/
public XmlRpcCommonsTransportFactory(XmlRpcClient pClient) {
super(pClient);
- COMMONS_TRANSPORT = new XmlRpcCommonsTransport(pClient);
}
public XmlRpcTransport getTransport() {
- return COMMONS_TRANSPORT;
+ return new XmlRpcCommonsTransport(getClient());
}
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcHttpTransport.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcHttpTransport.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcHttpTransport.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcHttpTransport.java
Fri Aug 18 02:55:18 2006
@@ -8,6 +8,7 @@
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.XmlRpcRequest;
import org.apache.xmlrpc.util.HttpUtil;
+import org.xml.sax.SAXException;
/** Abstract base implementation of an HTTP transport. Base class for the
@@ -15,29 +16,27 @@
* or [EMAIL PROTECTED] org.apache.xmlrpc.client.XmlRpcCommonsTransport}.
*/
public abstract class XmlRpcHttpTransport extends XmlRpcStreamTransport {
- protected class ByteArrayRequestWriter extends RequestWriter {
- private final ByteArrayOutputStream baos = new
ByteArrayOutputStream();
-
- protected ByteArrayRequestWriter(XmlRpcRequest pRequest)
- throws XmlRpcException {
- super(pRequest);
- super.writeUncompressed(baos);
- }
-
- protected void writeUncompressed(OutputStream pStream) throws
XmlRpcException {
- try {
- baos.writeTo(pStream);
- pStream.close();
- pStream = null;
- } catch (IOException e) {
- throw new XmlRpcException("Failed to write
request: " + e.getMessage(), e);
- } finally {
- if (pStream != null) { try { pStream.close(); }
catch (Throwable ignore) {} }
- }
- }
-
- protected int getContentLength() { return baos.size(); }
- }
+ protected class ByteArrayReqWriter implements ReqWriter {
+ private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ByteArrayReqWriter(XmlRpcRequest pRequest)
+ throws XmlRpcException, IOException, SAXException {
+ new ReqWriterImpl(pRequest).write(baos);
+ }
+
+ protected int getContentLength() {
+ return baos.size();
+ }
+
+ public void write(OutputStream pStream) throws IOException {
+ try {
+ baos.writeTo(pStream);
+ pStream.close();
+ pStream = null;
+ } finally {
+ if (pStream != null) { try { pStream.close(); } catch
(Throwable ignore) {} }
+ }
+ }
+ }
private String userAgent;
@@ -95,20 +94,23 @@
return super.sendRequest(pRequest);
}
- protected boolean isUsingByteArrayOutput(XmlRpcHttpClientConfig
pConfig) throws XmlRpcException {
+ protected boolean isUsingByteArrayOutput(XmlRpcHttpClientConfig
pConfig) {
return !pConfig.isEnabledForExtensions()
|| !pConfig.isContentLengthOptional();
}
- protected RequestWriter newRequestWriter(XmlRpcRequest pRequest)
- throws XmlRpcException {
+ protected ReqWriter newReqWriter(XmlRpcRequest pRequest)
+ throws XmlRpcException, IOException, SAXException {
final XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig)
pRequest.getConfig();
- if (isUsingByteArrayOutput(config)) {
- ByteArrayRequestWriter result = new
ByteArrayRequestWriter(pRequest);
- setContentLength(result.getContentLength());
- return result;
+ if (isUsingByteArrayOutput(config)) {
+ ByteArrayReqWriter reqWriter = new ByteArrayReqWriter(pRequest);
+ setContentLength(reqWriter.getContentLength());
+ if (isCompressingRequest(config)) {
+ return new GzipReqWriter(reqWriter);
+ }
+ return reqWriter;
} else {
- return super.newRequestWriter(pRequest);
+ return super.newReqWriter(pRequest);
}
}
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLiteHttpTransport.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLiteHttpTransport.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLiteHttpTransport.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLiteHttpTransport.java
Fri Aug 18 02:55:18 2006
@@ -36,6 +36,7 @@
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.util.HttpUtil;
import org.apache.xmlrpc.util.LimitedInputStream;
+import org.xml.sax.SAXException;
/** A "light" HTTP transport implementation.
@@ -234,16 +235,15 @@
}
}
- protected boolean isUsingByteArrayOutput(XmlRpcHttpClientConfig
pConfig) throws XmlRpcException {
+ protected boolean isUsingByteArrayOutput(XmlRpcHttpClientConfig
pConfig) {
boolean result = super.isUsingByteArrayOutput(pConfig);
if (!result) {
- throw new XmlRpcException("The Content-Length header is required
with HTTP/1.0, and HTTP/1.1 is unsupported by the Lite HTTP Transport.");
+ throw new IllegalStateException("The Content-Length header is
required with HTTP/1.0, and HTTP/1.1 is unsupported by the Lite HTTP
Transport.");
}
return result;
}
- protected void writeRequest(RequestWriter pWriter) throws XmlRpcException {
- OutputStream ostream = getOutputStream();
- pWriter.write(ostream);
+ protected void writeRequest(ReqWriter pWriter) throws XmlRpcException,
IOException, SAXException {
+ pWriter.write(getOutputStream());
}
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransport.java
Fri Aug 18 02:55:18 2006
@@ -17,12 +17,15 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcRequest;
import org.apache.xmlrpc.common.LocalStreamConnection;
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.common.XmlRpcStreamRequestProcessor;
+import org.xml.sax.SAXException;
/** Another local transport for debugging and testing. This one is
@@ -34,6 +37,7 @@
public class XmlRpcLocalStreamTransport extends XmlRpcStreamTransport {
private final XmlRpcStreamRequestProcessor localServer;
private LocalStreamConnection conn;
+ private XmlRpcRequest request;
/** Creates a new instance.
* @param pClient The client, which is controlling the transport.
@@ -57,10 +61,17 @@
return new
ByteArrayInputStream(conn.getResponse().toByteArray());
}
- protected void writeRequest(RequestWriter pWriter) throws
XmlRpcException {
+ protected ReqWriter newReqWriter(XmlRpcRequest pRequest)
+ throws XmlRpcException, IOException, SAXException {
+ request = pRequest;
+ return super.newReqWriter(pRequest);
+ }
+
+ protected void writeRequest(ReqWriter pWriter)
+ throws XmlRpcException, IOException, SAXException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pWriter.write(baos);
- XmlRpcStreamRequestConfig config = (XmlRpcStreamRequestConfig)
pWriter.getRequest().getConfig();
+ XmlRpcStreamRequestConfig config = (XmlRpcStreamRequestConfig)
request.getConfig();
conn = new LocalStreamConnection(config, new
ByteArrayInputStream(baos.toByteArray()));
}
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransportFactory.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransportFactory.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransportFactory.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcLocalStreamTransportFactory.java
Fri Aug 18 02:55:18 2006
@@ -25,17 +25,19 @@
* and parsing.
*/
public class XmlRpcLocalStreamTransportFactory extends
XmlRpcStreamTransportFactory {
- private final XmlRpcLocalStreamTransport LOCAL_STREAM_TRANSPORT;
+ private final XmlRpcStreamRequestProcessor server;
- /** Creates a new instance.
+ /** Creates a new instance.
* @param pClient The client controlling the factory.
* @param pServer An instance of [EMAIL PROTECTED]
XmlRpcStreamRequestProcessor}.
*/
public XmlRpcLocalStreamTransportFactory(XmlRpcClient pClient,
XmlRpcStreamRequestProcessor pServer) {
super(pClient);
- LOCAL_STREAM_TRANSPORT = new
XmlRpcLocalStreamTransport(pClient, pServer);
- }
+ server = pServer;
+ }
- public XmlRpcTransport getTransport() { return LOCAL_STREAM_TRANSPORT; }
+ public XmlRpcTransport getTransport() {
+ return new XmlRpcLocalStreamTransport(getClient(), server);
+ }
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
Fri Aug 18 02:55:18 2006
@@ -39,72 +39,60 @@
* the response,
*/
public abstract class XmlRpcStreamTransport extends XmlRpcTransportImpl {
- protected class RequestWriter {
- private final XmlRpcRequest request;
+ protected interface ReqWriter {
+ /**
+ * Writes the requests data to the given output stream.
+ * The method ensures, that the target is being closed.
+ */
+ void write(OutputStream pStream) throws XmlRpcException, IOException,
SAXException;
+ }
+
+ protected class ReqWriterImpl implements ReqWriter {
+ private final XmlRpcRequest request;
+
+ protected ReqWriterImpl(XmlRpcRequest pRequest) {
+ request = pRequest;
+ }
+
+ /** Writes the requests uncompressed XML data to the given
+ * output stream. Ensures, that the output stream is being
+ * closed.
+ */
+ public void write(OutputStream pStream)
+ throws XmlRpcException, IOException, SAXException {
+ final XmlRpcStreamConfig config = (XmlRpcStreamConfig)
request.getConfig();
+ try {
+ ContentHandler h =
getClient().getXmlWriterFactory().getXmlWriter(config, pStream);
+ XmlRpcWriter xw = new XmlRpcWriter(config, h,
getClient().getTypeFactory());
+ xw.write(request);
+ pStream.close();
+ pStream = null;
+ } finally {
+ if (pStream != null) { try { pStream.close(); } catch
(Throwable ignore) {} }
+ }
+ }
+ }
+
+ protected class GzipReqWriter implements ReqWriter {
+ private final ReqWriter reqWriter;
+ protected GzipReqWriter(ReqWriter pReqWriter) {
+ reqWriter = pReqWriter;
+ }
+
+ public void write(OutputStream pStream) throws XmlRpcException,
IOException, SAXException {
+ try {
+ GZIPOutputStream gStream = new GZIPOutputStream(pStream);
+ reqWriter.write(gStream);
+ pStream.close();
+ pStream = null;
+ } catch (IOException e) {
+ throw new XmlRpcException("Failed to write request: " +
e.getMessage(), e);
+ } finally {
+ if (pStream != null) { try { pStream.close(); } catch
(Throwable ignore) {} }
+ }
+ }
+ }
- protected RequestWriter(XmlRpcRequest pRequest) {
- request = pRequest;
- }
-
- protected XmlRpcRequest getRequest() {
- return request;
- }
-
- /** Writes the requests XML data to the given output stream,
- * possibly compressing it. Ensures, that the output stream
- * is being closed.
- */
- protected void write(OutputStream pStream) throws
XmlRpcException {
- XmlRpcStreamRequestConfig config =
(XmlRpcStreamRequestConfig) request.getConfig();
- if (isCompressingRequest(config)) {
- try {
- GZIPOutputStream gStream = new
GZIPOutputStream(pStream);
- writeUncompressed(gStream);
- pStream.close();
- pStream = null;
- } catch (IOException e) {
- throw new XmlRpcException("Failed to
write request: " + e.getMessage(), e);
- } finally {
- if (pStream != null) { try {
pStream.close(); } catch (Throwable ignore) {} }
- }
- } else {
- writeUncompressed(pStream);
- }
- }
-
- /** Writes the requests uncompressed XML data to the given
- * output stream. Ensures, that the output stream is being
- * closed.
- */
- protected void writeUncompressed(OutputStream pStream)
- throws XmlRpcException {
- final XmlRpcStreamConfig config = (XmlRpcStreamConfig)
request.getConfig();
- try {
- ContentHandler h =
getClient().getXmlWriterFactory().getXmlWriter(config, pStream);
- XmlRpcWriter xw = new XmlRpcWriter(config, h,
getClient().getTypeFactory());
- xw.write(request);
- pStream.close();
- pStream = null;
- } catch (SAXException e) {
- Exception ex = e.getException();
- if (ex != null && ex instanceof
XmlRpcException) {
- throw (XmlRpcException) ex;
- } else {
- throw new XmlRpcClientException("Failed
to send request: " + e.getMessage(), e);
- }
- } catch (IOException e) {
- throw new XmlRpcException("Failed to write
request: " + e.getMessage(), e);
- } finally {
- if (pStream != null) { try { pStream.close(); }
catch (Throwable ignore) {} }
- }
- }
- }
-
- protected RequestWriter newRequestWriter(XmlRpcRequest pRequest)
- throws XmlRpcException {
- return new RequestWriter(pRequest);
- }
-
/** Creates a new instance on behalf of the given client.
*/
protected XmlRpcStreamTransport(XmlRpcClient pClient) {
@@ -122,10 +110,6 @@
*/
protected abstract boolean
isResponseGzipCompressed(XmlRpcStreamRequestConfig pConfig);
- /** Invokes the request writer.
- */
- protected abstract void writeRequest(RequestWriter pWriter) throws
XmlRpcException;
-
/** Returns the input stream, from which the response is
* being read.
*/
@@ -136,12 +120,24 @@
&& pConfig.isGzipCompressing();
}
+ protected ReqWriter newReqWriter(XmlRpcRequest pRequest)
+ throws XmlRpcException, IOException, SAXException {
+ ReqWriter reqWriter = new ReqWriterImpl(pRequest);
+ if (isCompressingRequest((XmlRpcStreamRequestConfig)
pRequest.getConfig())) {
+ reqWriter = new GzipReqWriter(reqWriter);
+ }
+ return reqWriter;
+ }
+
+ protected abstract void writeRequest(ReqWriter pWriter)
+ throws XmlRpcException, IOException, SAXException;
+
public Object sendRequest(XmlRpcRequest pRequest) throws
XmlRpcException {
XmlRpcStreamRequestConfig config = (XmlRpcStreamRequestConfig)
pRequest.getConfig();
boolean closed = false;
try {
- RequestWriter writer = newRequestWriter(pRequest);
- writeRequest(writer);
+ ReqWriter reqWriter = newReqWriter(pRequest);
+ writeRequest(reqWriter);
InputStream istream = getInputStream();
if (isResponseGzipCompressed(config)) {
istream = new GZIPInputStream(istream);
@@ -153,6 +149,13 @@
} catch (IOException e) {
throw new XmlRpcException("Failed to read servers
response: "
+ e.getMessage(), e);
+ } catch (SAXException e) {
+ Exception ex = e.getException();
+ if (ex != null && ex instanceof XmlRpcException) {
+ throw (XmlRpcException) ex;
+ }
+ throw new XmlRpcException("Failed to generate request: "
+ + e.getMessage(), e);
} finally {
if (!closed) { try { close(); } catch (Throwable
ignore) {} }
}
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?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
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
Fri Aug 18 02:55:18 2006
@@ -2,7 +2,6 @@
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URLConnection;
@@ -10,6 +9,7 @@
import org.apache.xmlrpc.XmlRpcRequest;
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.util.HttpUtil;
+import org.xml.sax.SAXException;
/** Default implementation of an HTTP transport, based on the
@@ -61,13 +61,7 @@
}
}
- protected void writeRequest(RequestWriter pWriter) throws
XmlRpcException {
- OutputStream ostream;
- try {
- ostream = conn.getOutputStream();
- } catch (IOException e) {
- throw new XmlRpcException("Failed to create output
stream: " + e.getMessage(), e);
- }
- pWriter.write(ostream);
+ protected void writeRequest(ReqWriter pWriter) throws IOException,
XmlRpcException, SAXException {
+ pWriter.write(conn.getOutputStream());
}
}
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcTransportFactory.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcTransportFactory.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcTransportFactory.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcTransportFactory.java
Fri Aug 18 02:55:18 2006
@@ -21,7 +21,7 @@
* is typically based on singletons.
*/
public interface XmlRpcTransportFactory {
- /** Returns an instance of [EMAIL PROTECTED] XmlRpcTransport}. This may
+ /** Returns an instance of [EMAIL PROTECTED] XmlRpcTransport}. This may
* be a singleton, but the caller should not depend on that:
* A new instance may as well be created for any request.
* @return The configured transport.
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/HttpUtil.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/HttpUtil.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/HttpUtil.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/HttpUtil.java
Fri Aug 18 02:55:18 2006
@@ -40,11 +40,12 @@
if (pUser == null) {
return null;
}
- String s = pUser + ':' + pPassword;
+ final String s = pUser + ':' + pPassword;
if (pEncoding == null) {
pEncoding = XmlRpcStreamConfig.UTF8_ENCODING;
}
- return new String(Base64.encode(s.getBytes(pEncoding))).trim();
+ final byte[] bytes = s.getBytes(pEncoding);
+ return Base64.encode(s.getBytes(pEncoding), 0, bytes.length, 0,
null);
}
/** Returns, whether the HTTP header value <code>pHeaderValue</code>
@@ -140,7 +141,11 @@
String auth = st.nextToken();
try {
byte[] c = Base64.decode(auth.toCharArray(), 0, auth.length());
- String str = new String(c, pConfig.getBasicEncoding());
+ String enc = pConfig.getBasicEncoding();
+ if (enc == null) {
+ enc = XmlRpcStreamConfig.UTF8_ENCODING;
+ }
+ String str = new String(c, enc);
int col = str.indexOf(':');
if (col >= 0) {
pConfig.setBasicUserName(str.substring(0, col));
Modified: webservices/xmlrpc/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/pom.xml?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/pom.xml (original)
+++ webservices/xmlrpc/trunk/pom.xml Fri Aug 18 02:55:18 2006
@@ -128,6 +128,10 @@
<email>[EMAIL PROTECTED]</email>
</contributor>
<contributor>
+ <name>Landon Fuller</name>
+ <email>[EMAIL PROTECTED]</email>
+ </contributor>
+ <contributor>
<name>Jimisola Laursen</name>
<email>[EMAIL PROTECTED]</email>
</contributor>
Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/changes/changes.xml?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Fri Aug 18 02:55:18 2006
@@ -18,6 +18,21 @@
due-to-email="[EMAIL PROTECTED]">
Fixed an endless loop, if the WebServer threw a BindException.
</action>
+ <action dev="jochen" type="fix" due-to="Landon Fuller"
+ due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-104">
+ A NullPointerException was triggered, if the BasicEncoding was set to
null.
+ </action>
+ <action dev="jochen" type="fix" due-to="Landon Fuller"
+ due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-104">
+ Basic authentication didn't work, if the base64 encoded string
with
+ user name and password contained more than 72 characters.
+ </action>
+ <action dev="jochen" type="fix" due-to="Landon Fuller"
+ due-to-email="[EMAIL PROTECTED]">
+ Basic authentication didn't work with the commons http transport,
+ because the commons httpclient wasn't configured to send credentials
+ by default. (It was waiting for a challenge.)
+ </action>
</release>
<release version="3.0rc1" date="27-Jul-2006">
<action dev="jochen" type="fix" due-to="Alan Burlison"
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java?rev=432537&r1=432536&r2=432537&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
Fri Aug 18 02:55:18 2006
@@ -17,6 +17,8 @@
import java.io.IOException;
+import javax.servlet.ServletException;
+
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClientConfig;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
@@ -52,20 +54,23 @@
return mapping;
}
- public void setUp() throws Exception {
- if (providers == null) {
- XmlRpcHandlerMapping mapping = getHandlerMapping();
- providers = new ClientProvider[]{
- new LocalTransportProvider(mapping),
- new LocalStreamTransportProvider(mapping),
- new LiteTransportProvider(mapping, true),
+ protected ClientProvider[] initProviders(XmlRpcHandlerMapping pMapping)
throws ServletException, IOException {
+ return new ClientProvider[]{
+ new LocalTransportProvider(pMapping),
+ new LocalStreamTransportProvider(pMapping),
+ new LiteTransportProvider(pMapping, true),
// new LiteTransportProvider(mapping, false), Doesn't support
HTTP/1.1
- new SunHttpTransportProvider(mapping, true),
- new SunHttpTransportProvider(mapping, false),
- new CommonsProvider(mapping),
- new ServletWebServerProvider(mapping, true),
- new ServletWebServerProvider(mapping, false)
+ new SunHttpTransportProvider(pMapping, true),
+ new SunHttpTransportProvider(pMapping, false),
+ new CommonsProvider(pMapping),
+ new ServletWebServerProvider(pMapping, true),
+ new ServletWebServerProvider(pMapping, false)
};
+ }
+
+ public void setUp() throws Exception {
+ if (providers == null) {
+ providers = initProviders(getHandlerMapping());
}
}