/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

package org.apache.tools.ant.taskdefs.condition;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.net.SocketTimeoutException;
import java.util.Locale;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectComponent;

Condition to wait for a HTTP request to succeed. Its attribute(s) are: url - the URL of the request. errorsBeginAt - number at which errors begin at; default=400. requestMethod - HTTP request method to use; GET, HEAD, etc. default=GET readTimeout - The read timeout in ms. default=0
Since:Ant 1.5
/** * Condition to wait for a HTTP request to succeed. Its attribute(s) are: * url - the URL of the request. * errorsBeginAt - number at which errors begin at; default=400. * requestMethod - HTTP request method to use; GET, HEAD, etc. default=GET * readTimeout - The read timeout in ms. default=0 * @since Ant 1.5 */
public class Http extends ProjectComponent implements Condition { private static final int ERROR_BEGINS = 400; private static final String DEFAULT_REQUEST_METHOD = "GET"; private String spec = null; private String requestMethod = DEFAULT_REQUEST_METHOD; private boolean followRedirects = true; private int errorsBeginAt = ERROR_BEGINS; private int readTimeout = 0;
Set the url attribute
Params:
  • url – the url of the request
/** * Set the url attribute * @param url the url of the request */
public void setUrl(String url) { spec = url; }
Set the errorsBeginAt attribute
Params:
  • errorsBeginAt – number at which errors begin at, default is 400
/** * Set the errorsBeginAt attribute * @param errorsBeginAt number at which errors begin at, default is * 400 */
public void setErrorsBeginAt(int errorsBeginAt) { this.errorsBeginAt = errorsBeginAt; }
Sets the method to be used when issuing the HTTP request.
Params:
  • method – The HTTP request method to use. Valid values are the same as those accepted by the HttpURLConnection.setRequestMethod() method, such as "GET", "HEAD", "TRACE", etc. The default if not specified is "GET".
See Also:
Since:Ant 1.8.0
/** * Sets the method to be used when issuing the HTTP request. * * @param method The HTTP request method to use. Valid values are * the same as those accepted by the * HttpURLConnection.setRequestMethod() method, * such as "GET", "HEAD", "TRACE", etc. The default * if not specified is "GET". * * @see java.net.HttpURLConnection#setRequestMethod * @since Ant 1.8.0 */
public void setRequestMethod(String method) { this.requestMethod = method == null ? DEFAULT_REQUEST_METHOD : method.toUpperCase(Locale.ENGLISH); }
Whether redirects sent by the server should be followed, defaults to true.
Params:
  • f – boolean
Since:Ant 1.9.7
/** * Whether redirects sent by the server should be followed, * defaults to true. * * @param f boolean * @since Ant 1.9.7 */
public void setFollowRedirects(boolean f) { followRedirects = f; }
Sets the read timeout. Any value < 0 will be ignored
Params:
  • t – the timeout value in milli seconds
See Also:
Since:Ant 1.10.6
/** * Sets the read timeout. Any value &lt; 0 will be ignored * * @param t the timeout value in milli seconds * * @see java.net.HttpURLConnection#setReadTimeout * @since Ant 1.10.6 */
public void setReadTimeout(int t) { if(t >= 0) { this.readTimeout = t; } }
Throws:
Returns:true if the HTTP request succeeds
/** * @return true if the HTTP request succeeds * @exception BuildException if an error occurs */
@Override public boolean eval() throws BuildException { if (spec == null) { throw new BuildException("No url specified in http condition"); } log("Checking for " + spec, Project.MSG_VERBOSE); try { URL url = new URL(spec); try { URLConnection conn = url.openConnection(); if (conn instanceof HttpURLConnection) { HttpURLConnection http = (HttpURLConnection) conn; http.setRequestMethod(requestMethod); http.setInstanceFollowRedirects(followRedirects); http.setReadTimeout(readTimeout); int code = http.getResponseCode(); log("Result code for " + spec + " was " + code, Project.MSG_VERBOSE); return code > 0 && code < errorsBeginAt; } } catch (ProtocolException pe) { throw new BuildException("Invalid HTTP protocol: " + requestMethod, pe); } catch (SocketTimeoutException ste) { return false; } catch (IOException e) { return false; } } catch (MalformedURLException e) { throw new BuildException("Badly formed URL: " + spec, e); } return true; } }