You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Aaron <re...@hotmail.com> on 2004/02/19 16:58:51 UTC

[PATCH] Added http proxy support to catalina ant tasks

? jakarta-tomcat-catalina/site.patch
Index:
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/AbstractC
atalinaTask.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat-catalina/catalina/src/share/org/apache/catali
na/ant/AbstractCatalinaTask.java,v
retrieving revision 1.2
diff -u -r1.2 AbstractCatalinaTask.java
---
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/AbstractC
atalinaTask.java 6 Oct 2003 09:04:43 -0000 1.2
+++
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/AbstractC
atalinaTask.java 19 Feb 2004 15:44:54 -0000
@@ -1,307 +1,354 @@
-/*
- * $Header:
/home/cvspublic/jakarta-tomcat-catalina/catalina/src/share/org/apache/catali
na/ant/AbstractCatalinaTask.java,v 1.2 2003/10/06 09:04:43 remm Exp $
- * $Revision: 1.2 $
- * $Date: 2003/10/06 09:04:43 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 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", "Tomcat", 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.catalina.ant;
-
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import org.apache.catalina.util.Base64;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-
-/**
- * Abstract base class for Ant tasks that interact with the
- * <em>Manager</em> web application for dynamically deploying and
- * undeploying applications. These tasks require Ant 1.4 or later.
- *
- * @author Craig R. McClanahan
- * @version $Revision: 1.2 $ $Date: 2003/10/06 09:04:43 $
- * @since 4.1
- */
-
-public abstract class AbstractCatalinaTask extends Task {
-
-
- // ----------------------------------------------------- Instance
Variables
-
-
- /**
- * manager webapp's encoding.
- */ 
- private static String CHARSET = "utf-8";
-
-
- // -------------------------------------------------------------
Properties
-
-
- /**
- * The login password for the <code>Manager</code> application.
- */
- protected String password = null;
-
- public String getPassword() {
- return (this.password);
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
-
- /**
- * The URL of the <code>Manager</code> application to be used.
- */
- protected String url = "http://localhost:8080/manager";
-
- public String getUrl() {
- return (this.url);
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
-
- /**
- * The login username for the <code>Manager</code> application.
- */
- protected String username = null;
-
- public String getUsername() {
- return (this.username);
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
-
- // --------------------------------------------------------- Public
Methods
-
-
- /**
- * Execute the specified command. This logic only performs the common
- * attribute validation required by all subclasses; it does not perform
- * any functional logic directly.
- *
- * @exception BuildException if a validation error occurs
- */
- public void execute() throws BuildException {
-
- if ((username == null) || (password == null) || (url == null)) {
- throw new BuildException
- ("Must specify all of 'username', 'password', and 'url'");
- }
-
- }
-
-
- // ------------------------------------------------------ Protected
Methods
-
-
- /**
- * Execute the specified command, based on the configured properties.
- *
- * @param command Command to be executed
- *
- * @exception BuildException if an error occurs
- */
- public void execute(String command) throws BuildException {
-
- execute(command, null, null, -1);
-
- }
-
-
- /**
- * Execute the specified command, based on the configured properties.
- * The input stream will be closed upon completion of this task, whether
- * it was executed successfully or not.
- *
- * @param command Command to be executed
- * @param istream InputStream to include in an HTTP PUT, if any
- * @param contentType Content type to specify for the input, if any
- * @param contentLength Content length to specify for the input, if any
- *
- * @exception BuildException if an error occurs
- */
- public void execute(String command, InputStream istream,
- String contentType, int contentLength)
- throws BuildException {
-
- URLConnection conn = null;
- InputStreamReader reader = null;
- try {
-
- // Create a connection for this command
- conn = (new URL(url + command)).openConnection();
- HttpURLConnection hconn = (HttpURLConnection) conn;
-
- // Set up standard connection characteristics
- hconn.setAllowUserInteraction(false);
- hconn.setDoInput(true);
- hconn.setUseCaches(false);
- if (istream != null) {
- hconn.setDoOutput(true);
- hconn.setRequestMethod("PUT");
- if (contentType != null) {
- hconn.setRequestProperty("Content-Type", contentType);
- }
- if (contentLength >= 0) {
- hconn.setRequestProperty("Content-Length",
- "" + contentLength);
- }
- } else {
- hconn.setDoOutput(false);
- hconn.setRequestMethod("GET");
- }
- hconn.setRequestProperty("User-Agent",
- "Catalina-Ant-Task/1.0");
-
- // Set up an authorization header with our credentials
- String input = username + ":" + password;
- String output = new String(Base64.encode(input.getBytes()));
- hconn.setRequestProperty("Authorization",
- "Basic " + output);
-
- // Establish the connection with the server
- hconn.connect();
-
- // Send the request data (if any)
- if (istream != null) {
- BufferedOutputStream ostream =
- new BufferedOutputStream(hconn.getOutputStream(), 1024);
- byte buffer[] = new byte[1024];
- while (true) {
- int n = istream.read(buffer);
- if (n < 0) {
- break;
- }
- ostream.write(buffer, 0, n);
- }
- ostream.flush();
- ostream.close();
- istream.close();
- }
-
- // Process the response message
- reader = new InputStreamReader(hconn.getInputStream(), CHARSET);
- StringBuffer buff = new StringBuffer();
- String error = null;
- boolean first = true;
- while (true) {
- int ch = reader.read();
- if (ch < 0) {
- break;
- } else if ((ch == '\r') || (ch == '\n')) {
- String line = buff.toString();
- buff.setLength(0);
- log(line, Project.MSG_INFO);
- if (first) {
- if (!line.startsWith("OK -")) {
- error = line;
- }
- first = false;
- }
- } else {
- buff.append((char) ch);
- }
- }
- if (buff.length() > 0) {
- log(buff.toString(), Project.MSG_INFO);
- }
- if (error != null) {
- throw new BuildException(error);
- }
-
- } catch (Throwable t) {
- throw new BuildException(t);
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (Throwable u) {
- ;
- }
- reader = null;
- }
- if (istream != null) {
- try {
- istream.close();
- } catch (Throwable u) {
- ;
- }
- istream = null;
- }
- }
-
- }
-
-
-}
+/*
+ * $Header:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant
/AbstractCatalinaTask.java,v 1.2 2003/10/06 09:04:43 remm Exp $
+ * $Revision: 1.2 $
+ * $Date: 2003/10/06 09:04:43 $
+ *
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 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", "Tomcat", 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.catalina.ant;
+
+
+import java.io.BufferedOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import org.apache.catalina.util.Base64;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+
+/**
+ * Abstract base class for Ant tasks that interact with the
+ * <em>Manager</em> web application for dynamically deploying and
+ * undeploying applications. These tasks require Ant 1.4 or later.
+ *
+ * @author Craig R. McClanahan
+ * @version $Revision: 1.2 $ $Date: 2003/10/06 09:04:43 $
+ * @since 4.1
+ */
+
+public abstract class AbstractCatalinaTask extends Task {
+
+
+ // ----------------------------------------------------- Instance
Variables
+
+
+ /**
+ * manager webapp's encoding.
+ */ 
+ private static String CHARSET = "utf-8";
+
+
+ // -------------------------------------------------------------
Properties
+
+
+ /**
+ * The login password for the <code>Manager</code> application.
+ */
+ protected String password = null;
+
+ public String getPassword() {
+ return (this.password);
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+
+ /**
+ * The URL of the <code>Manager</code> application to be used.
+ */
+ protected String url = "http://localhost:8080/manager";
+
+ public String getUrl() {
+ return (this.url);
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+
+ /**
+ * The login username for the <code>Manager</code> application.
+ */
+ protected String username = null;
+
+ public String getUsername() {
+ return (this.username);
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ /**
+ * The http proxy for the <code>Manager</code> application.
+ */
+ protected String isProxy = "false";
+
+ public String getIsProxy() {
+ return (this.isProxy);
+ }
+
+ public void setIsProxy(String isProxy) {
+ this.isProxy = isProxy;
+ }
+
+ /**
+ * The http proxy address for the <code>Manager</code> application.
+ */
+ protected String proxyHost = null;
+
+ public String getProxyHost() {
+ return (this.proxyHost);
+ }
+
+ public void setProxyHost(String proxyHost) {
+ this.proxyHost = proxyHost;
+ }
+
+ /**
+ * The http proxy port for the <code>Manager</code> application.
+ */
+ protected String proxyPort = null;
+
+ public String getProxyPort() {
+ return (this.proxyPort);
+ }
+
+ public void setProxyPort(String proxyPort) {
+ this.proxyPort = proxyPort;
+ }
+
+ // --------------------------------------------------------- Public
Methods
+
+
+ /**
+ * Execute the specified command. This logic only performs the common
+ * attribute validation required by all subclasses; it does not perform
+ * any functional logic directly.
+ *
+ * @exception BuildException if a validation error occurs
+ */
+ public void execute() throws BuildException {
+ if (isProxy.equals("true"))
+ {
+ System.setProperty("http.proxyHost", proxyHost);
+ System.setProperty("http.proxyPort", proxyPort);
+ }
+ if ((username == null) || (password == null) || (url == null)) {
+ throw new BuildException
+ ("Must specify all of 'username', 'password', and 'url'");
+ }
+
+ }
+
+
+ // ------------------------------------------------------ Protected
Methods
+
+
+ /**
+ * Execute the specified command, based on the configured properties.
+ *
+ * @param command Command to be executed
+ *
+ * @exception BuildException if an error occurs
+ */
+ public void execute(String command) throws BuildException {
+
+ execute(command, null, null, -1);
+
+ }
+
+
+ /**
+ * Execute the specified command, based on the configured properties.
+ * The input stream will be closed upon completion of this task, whether
+ * it was executed successfully or not.
+ *
+ * @param command Command to be executed
+ * @param istream InputStream to include in an HTTP PUT, if any
+ * @param contentType Content type to specify for the input, if any
+ * @param contentLength Content length to specify for the input, if any
+ *
+ * @exception BuildException if an error occurs
+ */
+ public void execute(String command, InputStream istream,
+ String contentType, int contentLength)
+ throws BuildException {
+
+ if (isProxy.equals("true"))
+ {
+ System.setProperty("http.proxyHost", proxyHost);
+ System.setProperty("http.proxyPort", proxyPort);
+ }
+ URLConnection conn = null;
+ InputStreamReader reader = null;
+ try {
+
+ // Create a connection for this command
+ conn = (new URL(url + command)).openConnection();
+ HttpURLConnection hconn = (HttpURLConnection) conn;
+
+ // Set up standard connection characteristics
+ hconn.setAllowUserInteraction(false);
+ hconn.setDoInput(true);
+ hconn.setUseCaches(false);
+ if (istream != null) {
+ hconn.setDoOutput(true);
+ hconn.setRequestMethod("PUT");
+ if (contentType != null) {
+ hconn.setRequestProperty("Content-Type", contentType);
+ }
+ if (contentLength >= 0) {
+ hconn.setRequestProperty("Content-Length",
+ "" + contentLength);
+ }
+ } else {
+ hconn.setDoOutput(false);
+ hconn.setRequestMethod("GET");
+ }
+ hconn.setRequestProperty("User-Agent",
+ "Catalina-Ant-Task/1.0");
+
+ // Set up an authorization header with our credentials
+ String input = username + ":" + password;
+ String output = new String(Base64.encode(input.getBytes()));
+ hconn.setRequestProperty("Authorization",
+ "Basic " + output);
+
+ // Establish the connection with the server
+ hconn.connect();
+
+ // Send the request data (if any)
+ if (istream != null) {
+ BufferedOutputStream ostream =
+ new BufferedOutputStream(hconn.getOutputStream(), 1024);
+ byte buffer[] = new byte[1024];
+ while (true) {
+ int n = istream.read(buffer);
+ if (n < 0) {
+ break;
+ }
+ ostream.write(buffer, 0, n);
+ }
+ ostream.flush();
+ ostream.close();
+ istream.close();
+ }
+
+ // Process the response message
+ reader = new InputStreamReader(hconn.getInputStream(), CHARSET);
+ StringBuffer buff = new StringBuffer();
+ String error = null;
+ boolean first = true;
+ while (true) {
+ int ch = reader.read();
+ if (ch < 0) {
+ break;
+ } else if ((ch == '\r') || (ch == '\n')) {
+ String line = buff.toString();
+ buff.setLength(0);
+ log(line, Project.MSG_INFO);
+ if (first) {
+ if (!line.startsWith("OK -")) {
+ error = line;
+ }
+ first = false;
+ }
+ } else {
+ buff.append((char) ch);
+ }
+ }
+ if (buff.length() > 0) {
+ log(buff.toString(), Project.MSG_INFO);
+ }
+ if (error != null) {
+ throw new BuildException(error);
+ }
+
+ } catch (Throwable t) {
+ throw new BuildException(t);
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (Throwable u) {
+ ;
+ }
+ reader = null;
+ }
+ if (istream != null) {
+ try {
+ istream.close();
+ } catch (Throwable u) {
+ ;
+ }
+ istream = null;
+ }
+ }
+
+ }
+
+
+}

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: [PATCH] Added http proxy support to catalina ant tasks

Posted by Remy Maucherat <re...@apache.org>.
Aaron wrote:

> ? jakarta-tomcat-catalina/site.patch
> Index:
> jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/AbstractC
> atalinaTask.java

I'm not thrilled about the feature, but the most problematic is that 
this is a bad patch.
You might as well post the whole file ;)

Rémy


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org