git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270035 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,429 @@ | |||
<html> | |||
<head> | |||
<title>Http Tasks</title> | |||
</head> | |||
<body> | |||
<h2>Http Tasks</h2> | |||
Tasks do to make the basic HTTP requests: get, post, head, put, with authentication. | |||
There is also a task to configure the proxy settings of the http tasks. | |||
<p> | |||
These tasks significantly extend the basic <a | |||
href="../CoreTasks/get.html">get task</a>, but are split off into the optional section | |||
so that | |||
<ol> | |||
<li> The core ant file doesn't get so big | |||
<li> this implementation can move to using an optional jar (HttpClient) to work around | |||
limitations of the HTTP support built in to the Java platform. | |||
</ol> | |||
<h3>Core Functionality and Parameters</h3> | |||
<p>Common functionality to the core tasks tasks is </p> | |||
<ol> | |||
<li>Ability to name the remote url which the target of the request.</li> | |||
<li>Ability to name a local file as the local store of any returned | |||
content.</li> | |||
<li>Ability to name a property as the local store of any returned | |||
content.</li> | |||
<li>Ability to name a property to be set to "true" when a | |||
request succeeds.</li> | |||
<li>The option to list a number of parameters, each with a name and a | |||
value. Some methods (HttpGet, HttpHead) attach these parameters to the | |||
stated url to generate the url to actually fetch. Others (HttpPost) send | |||
the parameters up in the standard representation of form data.</li> | |||
<li>The option to state the authentication policy and then the username | |||
and password. Currently only basic authentication is used, which is | |||
utterly insecure except over an https link</li> | |||
<li>A 'verbose' option which provides extra information and progess | |||
information during a download.</li> | |||
<li>Timestamp control, using the <i>usetimestamp</i> flag. When set the | |||
timestamp of downloaded content is set to match that of the remote file | |||
(Java 1.2 or later only), and the local timestamp of the destination | |||
file (if it exists) used to set the if-modified-since header in the | |||
request, which will trigger optional download only. </li> | |||
</ol> | |||
<h3>Parameters</h3> | |||
<p> The <i>url</i> parameter specifies the URL to access. The optional | |||
<i>dest</i> parameter specifies a destination to which the retrieved | |||
page will be written. The optional <i>destinationproperty </i>parameter | |||
specifies a name of a property to save the content to, instead of a | |||
property. If neither <i>dest</i> nor <i>destinationproperty</i> | |||
specified, the contents of the specified URL are discarded (this is | |||
useful when accessing the URL for the purpose of causing some action on | |||
the remote server).</p> | |||
<p> When the <i>verbose</i> option is enabled, the task displays a '.' for every | |||
64 KB retrieved. If the <i>blocksize</i> parameter is adjusted then files are | |||
uploaded or downloaded in a different size block from this, and progress markers | |||
appear appropriately. </p> | |||
The <i>usetimestamp</i> option enables you to control downloads so that | |||
the remote file is only fetched if newer than the local copy. If there | |||
is no local copy, the download always takes place. When a file is | |||
downloaded, the timestamp of the downloaded file is set to the remote | |||
timestamp, if the JVM is Java1.2 or later. NB: This timestamp facility | |||
only works on downloads using the HTTP protocol. | |||
<p>The <i>authtype</i>, <i>username</i>, and <i>password</i> options enable support | |||
for password protected pages. Currently only 'Basic' authentication is used, | |||
which is notoriously insecure except over an encrypted https channel.</p> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td align="center" valign="top"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">authtype</td> | |||
<td valign="top">the HTTP authentication protocol to use, <i>none</i> or <i>basic</i>.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">blocksize</td> | |||
<td valign="top">size (in kilobytes) of the data block used for upload and | |||
download. Default: 64.<br> | |||
Keep this to a multiple of the hard disk sector size for file IO performance.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top"><b>dest</b></td> | |||
<td valign="top">the file where to store the retrieved file.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">destinationProperty</td> | |||
<td valign="top">the name of a property to fill with the returned content. | |||
Ignored if <i>dest</i> is set</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">failonerror</td> | |||
<td valign="top">stop the build if the request failed. default: true</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">password</td> | |||
<td valign="top">the password for authentication.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">successProperty</td> | |||
<td valign="top">the name of a property to set to "true" if the | |||
request succeeds.<br> | |||
Set <i>failonerror</i> to false for this to be of use.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top"><b>url</b></td> | |||
<td valign="top">the URL from which to retrieve a file.</td> | |||
<td align="center" valign="top">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">usecaches</td> | |||
<td valign="top">boolean to enable 'caching' of content during the fetch process. | |||
default:false</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">useresponsecode</td> | |||
<td valign="top">boolean to enable success/failure to be determined by result | |||
of the received response code. HTTP only. default=true.</td> | |||
<td align="center" valign="top"> </td> | |||
</tr> | |||
<tr> | |||
<td valign="top">username</td> | |||
<td valign="top">the user name for authentication.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">usetimestamp</td> | |||
<td valign="top">boolean flag to conditionally download a file based on the | |||
timestamp of the local copy. HTTP only</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">verbose</td> | |||
<td valign="top"> boolean flag to control progress information display.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
<p> The <i>successProperty</i> names a property which will be set to "true" if | |||
the request was deemed successful. For any non-http protocol, success is defined | |||
as the request completing. For http and https, success is defined as the request | |||
completing, and the response code from the serving being one of the 'success' | |||
values -any number between 200 and 299 inclusive. The usual HTTP_OK (200) is | |||
therefore a success, as is HTTP_ACCEPTED (202). But failures such as BAD_REQUEST | |||
(400) and the ubiquitous HTTP_NOT_FOUND (404) are most definately errors. So | |||
an attempt to access a missing url may result 'failure',even though some content | |||
was download (such as, perhaps, the 'file not found' text). If this is not what | |||
you desire, then set <i>useresponsecode</i>="false" for the system | |||
to interpret any data back as a success. | |||
<h3>Parameters specified as nested elements</h3> | |||
<p><b>param</b></p> | |||
<p>Specifies an HTTP request parameter to send as part of the request. | |||
For <i>get</i> and <i>head</i> request methods the parameters are | |||
encoded as part of the URL. For <i>post</i> request methods, the | |||
parameters are sent as the POST request data.</p> | |||
<table cellspacing="0" cellpadding="2" border="1"> | |||
<tbody> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td valign="top" align="middle"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">name</td> | |||
<td valign="top">the name of the request property to set.</td> | |||
<td valign="top" align="middle">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">value</td> | |||
<td valign="top">the value of the request property. You may alternatively | |||
specify the value as text between the beginning and ending param tags.</td> | |||
<td valign="center" align="middle">Yes</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
<p><b>header</b></p> | |||
<p>Specifies an arbitrary HTTP request header that will be sent with the | |||
request.</p> | |||
<table cellspacing="0" cellpadding="2" border="1"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td valign="top" align="middle"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">name</td> | |||
<td valign="top">the name of the HTTP request header</td> | |||
<td valign="top" align="middle">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">value</td> | |||
<td valign="top">the value of the HTTP request header. You may alternatively | |||
specify the value as text between the beginning and ending header tags.</td> | |||
<td valign="center" align="middle">Yes</td> | |||
</tr> | |||
</table> | |||
<h3>Quirky Limitations of java.net classes</h3> | |||
Multiple HTTP headers can with the same name can <b>not</b> be set, even | |||
though the protocol permits it. Java1.1 and Java 1.2 <i>may</i> permit multiple | |||
cookies to be set, but this behaviour is explicitly not supported on Java1.3, | |||
as someone went and change the code to stop this (Java bug ID #4242254). | |||
You need to set multiple cookies in one go and hope the far end can handle it | |||
<p> | |||
Bug ID #4160499 covers another issue, to wit: some versions of Java throw | |||
exceptions when an error code is greater than 400 and the dest file isn't | |||
one of a few simple file types, but Java 1.2 and 1.3 do not. So there | |||
is no way to get the error text when a jsp page throws some exception. | |||
<p> | |||
Also, although this isnt going to be filed until we have a short | |||
test case, but if you recieve a short response with less content than | |||
the content-length header promises, the library seems to silently | |||
reduce the content length header to match, which seems the wrong action. | |||
<h2><a name="httpget">HttpGet</a></h2> | |||
<h3>Description</h3> | |||
<p>Accesses a URL to retrieve a file or to cause some action on the server.</p> | |||
<p> This task should be preferred above the <a href="#cvs">CVS task</a> when doing | |||
automated builds. CVS is significantly slower than loading a compressed archive | |||
with http/ftp. This task will also retrieve content using other supported protocols, | |||
such as ftp: and file: | |||
<p>All the attributes of httptask may be used. Note that a quirk of the implementation | |||
of the http client in java makes it impossible to reliably fetch the response | |||
details from any unsuccessful request against a URL which doesn't end in '.htm,.html | |||
or .txt'. This means that if the task is used to compile jsp pages by issuing | |||
request against them, the text details of any errors will not be picked up. | |||
<h3>Examples</h3> | |||
<pre> <httpget url="http://jakarta.apache.org/" dest="help/index.html"/></pre> | |||
<p>Fetches the index page of http://jakarta.apache.org/, and stores it in the | |||
file <code>help/index.html</code>. </p> | |||
<pre> <httpget src="http://jakarta.apache.org/builds/tomcat/nightly/ant.zip" | |||
dest="optional.jar" | |||
verbose="true" | |||
usetimestamp="true" | |||
> | |||
<header name="Cookie" value="someid=43ff2b"/> | |||
</httpget></pre> | |||
<p> Retrieves the nightly ant build from the tomcat distribution, if the local | |||
copy is missing or out of date. Uses the verbose option for progress information. | |||
A cookie is supplied for the server's benefit.</p> | |||
<pre> <httpget url="https://www.pizzaservices.com/prices.jsp" | |||
dest="pizza-prices.xml"> | |||
<param name="zipcode">57340</param> | |||
<param name="pizza">pepperoni</param> | |||
</httpget></pre> | |||
<p>Builds a URL by adding parameters ("?zipcode=57340&pizza=pepperoni") | |||
to the base URL and then fetches the contents (fictional example)</p> | |||
<h2><a name="httphead">HttpHead</a> </h2> | |||
<p>The http HEAD request is similar to the normal GET request , except it, by | |||
definition, returns no content, just a success code and http headers. Accordingly, | |||
the destination properties of the base class -<i>dest</i> and -, <i>destinationpropertyname</i>) | |||
are not supported -any attempt to use them will result in a build failure. Note | |||
also that the http and https protocols are the only protocols supported. </p> | |||
<p> | |||
HttpHead is useful for triggering server side actions, but note that many servers | |||
interpret a HEAD very differently from a GET. An HttpGet request with the | |||
return data discarded is often a more reliable approach. | |||
</p> | |||
<p> Where head can be useful is in testing for the availability and reachability | |||
of servers, such as in the following test for apache being reachable, which | |||
sets a variable on success:- | |||
<pre> | |||
<httphead url="http://www.apache.org/" | |||
failonerror="false" | |||
successproperty="reachable.apache" | |||
/> | |||
</pre> | |||
<p>Note that sometimes a missing file on a mis-configured server still generates | |||
a successful '200' response to a GET request -and returns a 'missing' file page, | |||
but a HEAD request will reliably pick up the 'missing file' error. </p> | |||
<h2><a name="httppost">HttpPost</a></h2> | |||
<p>This implements the POST request. Supplied parameter data is turned into form | |||
data and sent as the body of the request, rather than appended to the URL. If | |||
a file to upload is specified instead, using <i>uploadFile</i>, the parameter | |||
values are ignored. Instead the content type of the file is sent in the header | |||
-based on the <i>contentType</i> attribute or what the java runtime thinks the | |||
content type is based on the file extension. The file is uploaded. </p> | |||
<p>Like HttpGet, this command can return a content which can downloaded to a file, | |||
to a property, or just ignored.</p> | |||
<p>This task adds two new attributes to the base set. </p> | |||
<table cellspacing="0" cellpadding="2" border="1"> | |||
<tr> | |||
<td valign="top" width="78"><b>Attribute</b></td> | |||
<td valign="top" width="559"><b>Description</b></td> | |||
<td valign="top" align="middle" width="62"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">uploadFile</td> | |||
<td valign="top" width="559">a file to upload. when specified, all parameters | |||
are ignored.</td> | |||
<td valign="top" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">contentType </td> | |||
<td valign="top" width="559">the type of the content (text/html, text/xml, | |||
application/binary, etc). Only of relevance when a file is being uploaded, | |||
and still optional in that case. </td> | |||
<td valign="center" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
</table> | |||
<h3></h3> | |||
<pre> | |||
<httppost url="http://www.example.com/servlet/docserver" | |||
authtype="basic" username="joe" password="silly"> | |||
<param name="action" value="getdoc"/> | |||
<param name="ISBN">038550120X</param> | |||
<param name="pages">19-20</param> | |||
<header name="Accept-Language" value="en-us"/> | |||
</httppost></pre> | |||
<p>Accesses a server at www.foo.com, passing a request to some servlet asking it | |||
to retrieve several pages from a stored book. An HTTP header specifying | |||
acceptable languages for the returned contents is also sent. Basic | |||
authentication is used with a user name of "joe" and a password of | |||
"silly".</p> | |||
<p> | |||
<pre> <httppost url="https://www.pizzaservices.com" | |||
uploadFile="pizza-order.xml" | |||
contentType="text/xml"> | |||
</pre> | |||
<p>Sends a pre-prepared order for a pizza to a pizza vendor accepting orders using | |||
xml-rpc requests. (NB: fictional example) </p> | |||
<h2><a name="SetProxy"></a>SetProxy</h2> | |||
<p>This task configures the proxy settings for all http tasks which follow it | |||
in the build. That includes the original Get task, but not the telnet and FTP | |||
tasks. The proxy settings remain in place until changed or the build finishes, | |||
and will also hold for other ant build files invoked and even non-forked java | |||
invocations, and even URL resolutions of XML parsers running in the same JVM | |||
</p> | |||
<table cellspacing="0" cellpadding="2" border="1"> | |||
<tr> | |||
<td valign="top" width="78"><b>Attribute</b></td> | |||
<td valign="top" width="559"><b>Description</b></td> | |||
<td valign="top" align="middle" width="62"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">proxyHost</td> | |||
<td valign="top" width="559">hostname of a web/ftp proxy server</td> | |||
<td valign="top" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">proxyPort </td> | |||
<td valign="top" width="559">integer; the port of the proxy server</td> | |||
<td valign="center" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">socksProxyHost</td> | |||
<td valign="top" width="559">hostname of a SOCKS4 proxy server</td> | |||
<td valign="center" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td valign="top" width="78">socksProxyPort</td> | |||
<td valign="top" width="559">integer; port number of a SOCKS4 server (default=1080)</td> | |||
<td valign="center" align="middle" width="62"> | |||
<div align="center">no</div> | |||
</td> | |||
</tr> | |||
</table> | |||
<h3></h3> | |||
<p>Turn off all proxies</p> | |||
<pre> <setproxy proxyhost="" socksProxyHost="" /></pre> | |||
<p>Set web proxy to 'web-proxy:80'; do not make any changes to existing socks | |||
settings (if any)</p> | |||
<pre> <setproxy proxyHost="web-proxy" proxyPort="80"/></pre> | |||
<p>Turn on socks</p> | |||
<pre> <setproxy socksProxyHost="socks-server" socksProxyPort="1080"/></pre> | |||
<p>Do nothing</p> | |||
<pre> <setproxy/></pre> | |||
<hr> | |||
<p align="center">Copyright © 2000,2001 Apache Software Foundation. All rights | |||
Reserved.</p> | |||
</body> | |||
</html> | |||
@@ -0,0 +1,115 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
/** | |||
* This code handles Base64 encoding for basic authentication | |||
* and the like | |||
* | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created 02 April 2001 | |||
*/ | |||
class Base64Encode { | |||
/** | |||
* the encode alphabet | |||
*/ | |||
private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); | |||
/** | |||
* Encode a block of binary data as base64 as specified in RFC1521. | |||
* | |||
* @param data the binary data to encode. | |||
* @return An array of characters that represent the data encoded | |||
* as Base64 | |||
*/ | |||
public char[] encodeBase64(byte[] data) { | |||
char[] out = new char[((data.length + 2) / 3) * 4]; | |||
// | |||
// 3 bytes encode to 4 chars. Output is always an even | |||
// multiple of 4 characters. | |||
// | |||
for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { | |||
boolean quad = false; | |||
boolean triple = false; | |||
//convert to unsigned byte | |||
int val = (0xFF & (int) data[i]); | |||
val <<= 8; | |||
if ((i + 1) < data.length) { | |||
val |= (0xFF & (int) data[i + 1]); | |||
triple = true; | |||
} | |||
val <<= 8; | |||
if ((i + 2) < data.length) { | |||
val |= (0xFF & (int) data[i + 2]); | |||
quad = true; | |||
} | |||
out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)]; | |||
val >>= 6; | |||
out[index + 2] = alphabet[(triple ? (val & 0x3F) : 64)]; | |||
val >>= 6; | |||
out[index + 1] = alphabet[val & 0x3F]; | |||
val >>= 6; | |||
out[index + 0] = alphabet[val & 0x3F]; | |||
} | |||
return out; | |||
} | |||
} | |||
@@ -0,0 +1,100 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.IOException; | |||
import java.net.*; | |||
/** | |||
* this is a class to work around the fact a function I want (guessContentTypeFromName) | |||
* is protected. | |||
* | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
class ContentGuesser extends URLConnection { | |||
/** | |||
* stub Constructor for the ContentGuesser object | |||
* | |||
* @param url Description of Parameter | |||
*/ | |||
ContentGuesser(URL url) { | |||
super(url); | |||
} | |||
/** | |||
* this stub is needed for the build | |||
* | |||
* @exception IOException Description of Exception | |||
*/ | |||
public void connect() | |||
throws IOException { | |||
} | |||
/** | |||
* make a protected method public. | |||
* This guesses file type from extension. It's ok for very | |||
* well known types... | |||
* @param filename file to guess type of | |||
* @return what the system guessed | |||
*/ | |||
public static String guessContentType(String filename) { | |||
return guessContentTypeFromName(filename); | |||
} | |||
} | |||
@@ -0,0 +1,88 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import org.apache.tools.ant.BuildException; | |||
import java.net.URLConnection; | |||
/** | |||
* this interface is for use by classes which authenticate connections. | |||
* | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created 20 March 2001 | |||
*/ | |||
public interface HttpAuthenticationStrategy { | |||
/** | |||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||
* object | |||
* | |||
* @param requestConnection The current request | |||
* @param responseConnection any previous request, which can contain a | |||
* challenge for the next round. Will often be null | |||
* @param user the current user name | |||
* @param password the current password | |||
*/ | |||
public void setAuthenticationHeader(URLConnection requestConnection, | |||
URLConnection responseConnection, | |||
String user, String password) | |||
throws BuildException ; | |||
} | |||
@@ -0,0 +1,109 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.*; | |||
import org.apache.tools.ant.taskdefs.Get; | |||
/** | |||
* this class implements basic auth, the one that shouldn't be used | |||
* except over an encrypted link or trusted network. | |||
* | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created 20 March 2001 | |||
*/ | |||
public class HttpBasicAuth implements HttpAuthenticationStrategy { | |||
/** | |||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||
* object | |||
* | |||
* @param requestConnection The current request | |||
* @param responseConnection any previous request, which can contain a | |||
* challenge for the next round. Will often be null | |||
* @param user the current user name | |||
* @param password the current password | |||
*/ | |||
public void setAuthenticationHeader(URLConnection requestConnection, | |||
URLConnection responseConnection, | |||
String username, String password) | |||
throws BuildException { | |||
if (username != null) { | |||
password = username == null ? "" : password; | |||
String encodeStr = username + ":" + password; | |||
char[] encodedPass; | |||
String encodedPassStr; | |||
Base64Encode encoder = new Base64Encode(); | |||
encodedPass = encoder.encodeBase64(encodeStr.getBytes()); | |||
encodedPassStr= new String(encodedPass); | |||
/* this uses the get task | |||
Get.Base64Converter converter= new Get.Base64Converter(); | |||
encodedPassStr = converter.encode(encodeStr); | |||
*/ | |||
String authStr = "BASIC " +encodedPassStr; | |||
requestConnection.setRequestProperty("Authorization", authStr); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,100 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.*; | |||
/** | |||
* this class implements basic auth, the one that shouldn't be used | |||
* except over an encrypted link or trusted network. | |||
* | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created 20 March 2001 | |||
*/ | |||
public class HttpDigestAuth implements HttpAuthenticationStrategy { | |||
/** | |||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||
* object | |||
* | |||
* @param requestConnection The current request | |||
* @param responseConnection any previous request, which can contain a | |||
* challenge for the next round. Will often be null | |||
* @param user the current user name | |||
* @param password the current password | |||
*/ | |||
public void setAuthenticationHeader(URLConnection requestConnection, | |||
URLConnection responseConnection, | |||
String username, String password) | |||
throws BuildException { | |||
if (username != null) { | |||
password = username == null ? "" : password; | |||
String encodeStr = username + ":" + password; | |||
Base64Encode encoder = new Base64Encode(); | |||
char[] encodedPass = encoder.encodeBase64(encodeStr.getBytes()); | |||
String authStr = "BASIC " + new String(encodedPass); | |||
requestConnection.setRequestProperty("Authorization", authStr); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,93 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.*; | |||
/** | |||
* This class implements boring old HTTP1.0 get. It represents | |||
* a refactoring of Get to HttpTask and then into a specific | |||
* subclass. because almost everything is done by the parent, | |||
* this class is almost completely empty | |||
* @since ant1.5 | |||
* @author costin@dnt.ro | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
public class HttpGet extends HttpTask { | |||
/** | |||
* override of test | |||
* @return true always | |||
*/ | |||
protected boolean areParamsAddedToUrl() { | |||
return true; | |||
} | |||
/** | |||
* this must be overridden by implementations | |||
* to set the request method to GET, POST, whatever | |||
* @return GET, obviously | |||
*/ | |||
public String getRequestMethod() { | |||
return "GET"; | |||
} | |||
} |
@@ -0,0 +1,112 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.*; | |||
/** | |||
* Head is a get with a different method and the notion of | |||
* destination file missing. Why would anyone want to make a HEAD | |||
* request? a) side effects on the server and b) polling for stuff | |||
* @since ant1.5 | |||
* @author costin@dnt.ro | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
public class HttpHead extends HttpTask { | |||
/** | |||
* this must be overridden by implementations | |||
* to set the request method to GET, POST, whatever | |||
* @return HEAD always | |||
*/ | |||
public String getRequestMethod() { | |||
return "HEAD"; | |||
} | |||
/** | |||
* override of test | |||
* @return true always | |||
*/ | |||
protected boolean areParamsAddedToUrl() { | |||
return true; | |||
} | |||
/** | |||
* add a check for all the destination settings being | |||
* null; nothing else makes sense for a HEAD. | |||
* | |||
* @return true if everything is fine. false if we have encountered | |||
* problems but arent allowed to fail on an error, | |||
* @exception BuildException only throw this when the failonerror | |||
* flag is true | |||
*/ | |||
protected void verifyArguments() | |||
throws BuildException { | |||
BuildException trouble = null; | |||
if(getDest() != null || getDestinationProperty() !=null) { | |||
throw new BuildException("destination properties must not be defined for a HEAD request"); | |||
} | |||
super.verifyArguments(); | |||
} | |||
} |
@@ -0,0 +1,224 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import org.apache.tools.ant.*; | |||
/** | |||
* this class does post of form content or raw files. you can have one | |||
* or the other -as soon as a file is specified all the other properties | |||
* are dropped on the floor. | |||
* a file post will have content type determined from the extension, you can | |||
* override it | |||
* @since ant1.5 | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
public class HttpPost extends HttpTask { | |||
/** | |||
* file to upload. Null is ok | |||
*/ | |||
protected File postFile=null; | |||
/** | |||
* set the file to post | |||
*/ | |||
public void setUploadFile(File postFile) { | |||
this.postFile=postFile; | |||
} | |||
/** | |||
* query the post file | |||
* @return the file or null for 'not defined' | |||
*/ | |||
public File getUploadFile() { | |||
return postFile; | |||
} | |||
/** | |||
* content type. ignored when the file is null, | |||
* and even then we guess it if aint specified | |||
*/ | |||
private String contentType; | |||
/** | |||
* set the content type. Recommended if a file is being uploaded | |||
*/ | |||
public void setContentType(String contentType) { | |||
this.contentType=contentType; | |||
} | |||
/** | |||
* query the content type | |||
* @return the content type or null for 'not defined' | |||
*/ | |||
public String getContentType() { | |||
return contentType; | |||
} | |||
/** | |||
* override of test | |||
* @return false always | |||
*/ | |||
protected boolean areParamsAddedToUrl() { | |||
return false; | |||
} | |||
/** | |||
* this override of the base connect pumps | |||
* up the parameter vector as form data | |||
* | |||
* @param connection where to connect to | |||
* @exception BuildException build trouble | |||
* @exception IOException IO trouble | |||
*/ | |||
protected URLConnection doConnect(URLConnection connection) | |||
throws BuildException, IOException { | |||
if(postFile==null) { | |||
return doConnectFormPost(connection); | |||
} | |||
else { | |||
return doConnectFilePost(connection); | |||
} | |||
} | |||
/** | |||
* feed up the parameter vector as form data | |||
* | |||
* @param connection where to connect to | |||
* @exception BuildException build trouble | |||
* @exception IOException IO trouble | |||
*/ | |||
protected URLConnection doConnectFormPost(URLConnection connection) | |||
throws BuildException, IOException { | |||
log("Posting data as a form",Project.MSG_VERBOSE); | |||
// Create the output payload | |||
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(256); | |||
PrintWriter out = new PrintWriter(byteStream); | |||
writePostData(out); | |||
out.flush(); | |||
out.close(); | |||
byte[] data=byteStream.toByteArray(); | |||
//send it | |||
return doConnectWithUpload(connection, | |||
"application/x-www-form-urlencoded", | |||
byteStream.size(), | |||
new ByteArrayInputStream(data)); | |||
} | |||
/** | |||
* feed up the data file | |||
* | |||
* @param connection where to connect to | |||
* @exception BuildException build trouble | |||
* @exception IOException IO trouble | |||
*/ | |||
protected URLConnection doConnectFilePost(URLConnection connection) | |||
throws BuildException, IOException { | |||
int size=(int)postFile.length(); | |||
log("Posting file "+postFile,Project.MSG_VERBOSE); | |||
InputStream instream=new FileInputStream(postFile); | |||
String type=contentType; | |||
if(type==null) { | |||
type=ContentGuesser.guessContentType(postFile.getName()); | |||
} | |||
return doConnectWithUpload(connection, | |||
type, | |||
size, | |||
instream); | |||
} | |||
/** | |||
* write out post data in form mode | |||
* | |||
* @param out Description of Parameter | |||
*/ | |||
protected void writePostData(PrintWriter out) { | |||
HttpRequestParameter param; | |||
Vector params=getRequestParameters(); | |||
for (int i = 0; i < params.size(); i++) { | |||
if (i > 0) { | |||
out.print('&'); | |||
} | |||
param = (HttpRequestParameter) params.get(i); | |||
out.print(param.toString()); | |||
log("parameter : "+param.toString(),Project.MSG_DEBUG); | |||
} | |||
} | |||
/** | |||
* this must be overridden by implementations | |||
* to set the request method to GET, POST, whatever | |||
* @return the method string | |||
*/ | |||
public String getRequestMethod() { | |||
return "POST"; | |||
} | |||
} |
@@ -0,0 +1,141 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.net.URLEncoder; | |||
/** | |||
* This class is used to store name-value pairs for request parameters | |||
* and headers | |||
* | |||
* @author matth@pobox.com Matt Humphrey | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
public class HttpRequestParameter { | |||
/** | |||
* request name | |||
*/ | |||
private String name; | |||
/** | |||
* request value | |||
*/ | |||
private String value; | |||
/** | |||
* Sets the Name attribute of the request parameter | |||
* | |||
* @param name The new Name value | |||
*/ | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
/** | |||
* Sets the Value attribute of the request parameter | |||
* | |||
* @param value The new Value value | |||
*/ | |||
public void setValue(String value) { | |||
this.value = value; | |||
} | |||
/** | |||
* Gets the Name attribute of the request parameter | |||
* | |||
* @return The Name value | |||
*/ | |||
public String getName() { | |||
return name; | |||
} | |||
/** | |||
* Gets the Value attribute of the request parameter | |||
* | |||
* @return The Value | |||
*/ | |||
public String getValue() { | |||
return value; | |||
} | |||
/** | |||
* Adds a feature to the Text attribute of the request parameter | |||
* | |||
* @param text The feature to be added to the Text attribute | |||
*/ | |||
public void addText(String text) { | |||
this.value = text; | |||
} | |||
/** | |||
* simple stringifier returning name and value encoded for use in HTTP requests | |||
* | |||
* @return a string for informational purposes | |||
*/ | |||
public String toString() { | |||
return URLEncoder.encode(getName())+ | |||
'='+URLEncoder.encode(getValue()); | |||
} | |||
} | |||
@@ -0,0 +1,106 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.OutputStream; | |||
import java.io.IOException; | |||
/** | |||
* simple output stream which discards all write requests this should | |||
* really be part of java.io, as it is sporadically invaluable | |||
* | |||
* @author slo | |||
* @created March 17, 2001 | |||
*/ | |||
public class NullOutputStream extends OutputStream { | |||
/** | |||
* discard all incoming bytes | |||
* | |||
* @param b byte to write | |||
* @exception IOException never throwable in this subclass | |||
*/ | |||
public void write(int b) | |||
throws IOException { | |||
} | |||
/** | |||
* discard all incoming bytes | |||
* | |||
* @param b byte array | |||
* @exception IOException never throwable in this subclass | |||
*/ | |||
public void write(byte[] b) | |||
throws IOException { | |||
} | |||
/** | |||
* discard all incoming bytes | |||
* | |||
* @param b byte array | |||
* @param off starting offset | |||
* @param len length to write | |||
* @exception IOException never throwable in this subclass | |||
*/ | |||
public void write(byte[] b, | |||
int off, | |||
int len) | |||
throws IOException { | |||
} | |||
} | |||
@@ -0,0 +1,240 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.http; | |||
import java.io.*; | |||
import java.net.*; | |||
import java.util.*; | |||
import java.lang.reflect.*; | |||
import org.apache.tools.ant.*; | |||
/** | |||
* proxy definition task. This allows all web tasks in the build file | |||
* executed after this task to access the web through a proxy server | |||
* | |||
* @author steve_l@iseran.com Steve Loughran | |||
* @created March 17, 2001 | |||
*/ | |||
public class SetProxy extends Task { | |||
/** | |||
* proxy details | |||
*/ | |||
protected String proxyHost = null; | |||
/** | |||
* name of proxy port | |||
*/ | |||
protected int proxyPort = 80; | |||
/** | |||
* socks host. | |||
*/ | |||
private String socksProxyHost = null; | |||
/** | |||
* socks proxy port. 1080 is the default | |||
*/ | |||
private int socksProxyPort = 1080; | |||
/** | |||
* set a proxy host. the port should be defined too | |||
* | |||
* @param hostname the new proxy hostname | |||
*/ | |||
public void setProxyHost(String hostname) { | |||
proxyHost = hostname; | |||
} | |||
/** | |||
* set the proxy port number. | |||
* | |||
* @param port port number of the proxy | |||
*/ | |||
public void setProxyPort(int port) { | |||
proxyPort = port; | |||
} | |||
/** | |||
* accessor to proxy hostname | |||
* | |||
* @return the hostname or null | |||
*/ | |||
public String getProxyHost() { | |||
return proxyHost; | |||
} | |||
/** | |||
* accessor to proxy hostname | |||
* | |||
* @return the port number | |||
*/ | |||
public int getProxyPort() { | |||
return proxyPort; | |||
} | |||
/** | |||
* Set the SocksProxyHost attribute | |||
* | |||
* @param host The new SocksProxyHost value | |||
*/ | |||
public void setSocksProxyHost(String host) { | |||
this.socksProxyHost = host; | |||
} | |||
/** | |||
* Set the SocksProxyPort attribute | |||
* | |||
* @param port The new SocksProxyPort value | |||
*/ | |||
public void setSocksProxyPort(int port) { | |||
this.socksProxyPort = port; | |||
} | |||
/** | |||
* if the proxy port and host settings are not null, then the settings | |||
* get applied these settings last beyond the life of the object and | |||
* apply to all network connections | |||
* | |||
* @return true if the settings were applied | |||
*/ | |||
public void applyWebProxySettings() { | |||
boolean settingsChanged=false; | |||
Properties prop = System.getProperties(); | |||
if (getProxyHost() != null) { | |||
log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(), | |||
Project.MSG_VERBOSE); | |||
prop.put("http.proxyHost", getProxyHost()); | |||
prop.put("http.proxyPort", String.valueOf(getProxyPort())); | |||
prop.put("https.proxyHost", getProxyHost()); | |||
prop.put("https.proxyPort", String.valueOf(getProxyPort())); | |||
prop.put("ftp.proxyHost", getProxyHost()); | |||
prop.put("ftp.proxyPort", String.valueOf(getProxyPort())); | |||
settingsChanged=true; | |||
} | |||
//socks | |||
if (socksProxyHost != null) { | |||
log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(), | |||
Project.MSG_VERBOSE); | |||
prop.put("socksProxyHost", socksProxyHost); | |||
prop.put("socksProxyPort", Integer.toString(socksProxyPort)); | |||
settingsChanged=true; | |||
} | |||
//for Java1.1 we need to tell the system that the settings are new | |||
if(settingsChanged && project.getJavaVersion() == Project.JAVA_1_1) { | |||
prop.put("http.proxySet", "true"); | |||
sun.net.www.http.HttpClient.resetProperties(); | |||
} | |||
legacyResetProxySettingsCall(); | |||
} | |||
/** | |||
* make a call to sun.net.www.http.HttpClient.resetProperties(); | |||
* this is only needed for java 1.1; reflection is used to stop the compiler | |||
* whining, and in case cleanroom JVMs dont have the class. | |||
* @return Description of the Returned Value | |||
* @returns | |||
*/ | |||
protected boolean legacyResetProxySettingsCall() { | |||
try { | |||
Class c = Class.forName("sun.net.www.http.HttpClient"); | |||
Method reset = c.getMethod("resetProperties", null); | |||
reset.invoke(null, null); | |||
return true; | |||
} | |||
catch (ClassNotFoundException cnfe) { | |||
return false; | |||
} | |||
catch (NoSuchMethodException e) { | |||
return false; | |||
} | |||
catch (IllegalAccessException e) { | |||
return false; | |||
} | |||
catch (InvocationTargetException e) { | |||
return false; | |||
} | |||
} | |||
/** | |||
* Does the work. | |||
* | |||
* @exception BuildException Thrown in unrecoverable error. | |||
*/ | |||
public void execute() | |||
throws BuildException { | |||
applyWebProxySettings(); | |||
} | |||
} | |||