Hello again,
I hope I will not offend anyone by repeating myself.
Take 2 of my patch has been created against CVS version of these files.
This change can be seen as change in API. Is voting required?
Kind Regards,
--
[newbie]Arek Wnukowski
--- 1.26/HTTPUtils.java Thu May 23 18:20:22 2002
+++ patch/HTTPUtils.java Tue May 28 12:00:16 2002
@@ -218,6 +218,38 @@
int outputBufferSize,
Boolean tcpNoDelay)
throws IllegalArgumentException, IOException, SOAPException {
+
+ return post(url, request, timeout, httpProxyHost, httpProxyPort,
+ outputBufferSize, tcpNoDelay, null, null);
+ }
+
+ /**
+ * POST something to the given URL. The headers are put in as
+ * HTTP headers, the content length is calculated and the content
+ * byte array is sent as the POST content.
+ *
+ * @param url the url to post to
+ * @param request the message
+ * @param timeout the amount of time, in ms, to block on reading data
+ * @param httpProxyHost the HTTP proxy host or null if no proxy
+ * @param httpProxyPort the HTTP proxy port, if the proxy host is not null
+ * @param outputBufferSize the size of the output buffer on the HTTP stream
+ * @param tcpNoDelay the tcpNoDelay setting for the socket
+ * @param requestCopy the buffer for capturing copy of the request or null
+ * if capture is not required.
+ * @param responseCopy the buffer for capturing copy of the response or null
+ * if capture is not required.
+ * @param the tcpNoDelay setting for the socket
+ * @return the response message
+ */
+ public static TransportMessage post(URL url, TransportMessage request,
+ int timeout,
+ String httpProxyHost, int httpProxyPort,
+ int outputBufferSize,
+ Boolean tcpNoDelay,
+ StringBuffer requestCopy,
+ StringBuffer responseCopy)
+ throws IllegalArgumentException, IOException, SOAPException {
/* Open the connection */
OutputStream outStream = null;
InputStream inStream = null;
@@ -276,6 +308,13 @@
bOutStream.write(
headerbuf.toString().getBytes(Constants.HEADERVAL_DEFAULT_CHARSET));
request.writeTo(bOutStream);
+
+ /* If required, capture a copy of the request. */
+ if (requestCopy != null) {
+ requestCopy.append(headerbuf)
+ .append(new String(request.getBytes()));
+ }
+
//bOutStream.write('\r'); bOutStream.write('\n');
//bOutStream.write('\r'); bOutStream.write('\n');
bOutStream.flush();
@@ -316,6 +355,7 @@
ByteArrayDataSource ds = new ByteArrayDataSource(bInStream,
Constants.HEADERVAL_DEFAULT_CHARSET);
+
/* Extract the headers, content type and content length. */
byte[] bytes = ds.toByteArray();
Hashtable respHeaders = new Hashtable();
@@ -369,6 +409,11 @@
if (respContentLength < 0)
respContentLength = ds.getSize() - offset - 1;
+ /* If required, capture a copy of the response. */
+ if (responseCopy != null) {
+ responseCopy.append(line).append("\r\n").append(new String(bytes));
+ }
+
/* Construct the response object. */
SOAPContext ctx;
TransportMessage response;
--- 1.21/SOAPHTTPConnection.java Thu May 23 18:20:22 2002
+++ patch/SOAPHTTPConnection.java Tue May 28 12:03:24 2002
@@ -99,6 +99,8 @@
private String cookieHeader2;
private int outputBufferSize = HTTPUtils.DEFAULT_OUTPUT_BUFFER_SIZE;
private Boolean tcpNoDelay = null;
+ private StringBuffer requestCopy = null;
+ private StringBuffer responseCopy = null;
/**
* Set HTTP proxy host.
@@ -164,6 +166,40 @@
this.proxyPassword = password;
}
+ /**
+ * Set buffer for capturing copy of the request.
+ */
+ public void setRequestCopy (StringBuffer requestCopy) {
+ this.requestCopy = requestCopy;
+ }
+
+ /**
+ * Set buffer for capturing copy of the response.
+ */
+ public void setResponseCopy (StringBuffer responseCopy) {
+ this.responseCopy = responseCopy;
+ }
+
+ /**
+ * Get Buffer containing copy of the request.
+ *
+ * @return the Buffer containing copy of the request.
+ * Returns null if buffer has not been previously set.
+ */
+ public StringBuffer getRequestCopy () {
+ return requestCopy;
+ }
+
+ /**
+ * Get Buffer containing copy of the response.
+ *
+ * @return the Buffer containing copy of the response.
+ * Returns null if buffer has not been previously set.
+ */
+ public StringBuffer getResponseCopy () {
+ return responseCopy;
+ }
+
private static String encodeAuth(String userName, String password)
throws SOAPException
{
@@ -306,9 +342,11 @@
{
TransportMessage msg = new TransportMessage(payload, ctx, headers);
msg.save();
+
response = HTTPUtils.post (sendTo, msg,
timeout, httpProxyHost, httpProxyPort,
- outputBufferSize, tcpNoDelay);
+ outputBufferSize, tcpNoDelay,
+ requestCopy, responseCopy);
} catch (MessagingException me) {
throw new IOException ("Failed to encode mime multipart: " + me);
} catch (UnsupportedEncodingException uee) {