Browse Source

More VAJ URL encoding issues

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277934 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 20 years ago
parent
commit
4ac9a8932c
2 changed files with 85 additions and 52 deletions
  1. +3
    -0
      WHATSNEW
  2. +82
    -52
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java

+ 3
- 0
WHATSNEW View File

@@ -388,6 +388,9 @@ Fixed bugs:
* <cab> didn't work for files with spaces in their names on Windows. * <cab> didn't work for files with spaces in their names on Windows.
Bugzilla Report 17182. Bugzilla Report 17182.


* The VAJ tasks could fail if the project name contained characters
that need to get URL encoded. Bugzilla Report 23322.

Changes from Ant 1.6.1 to Ant 1.6.2 Changes from Ant 1.6.1 to Ant 1.6.2
=================================== ===================================




+ 82
- 52
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2001-2004 The Apache Software Foundation
* Copyright 2001-2005 The Apache Software Foundation
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -56,14 +56,15 @@ class VAJRemoteUtil implements VAJUtil {
boolean exportResources, boolean exportSources, boolean exportResources, boolean exportSources,
boolean useDefaultExcludes, boolean overwrite) { boolean useDefaultExcludes, boolean overwrite) {
try { try {
String request = "http://" + remoteServer + "/servlet/vajexport?"
+ VAJExportServlet.WITH_DEBUG_INFO + "=" + exportDebugInfo + "&"
+ VAJExportServlet.OVERWRITE_PARAM + "=" + overwrite + "&"
+ assembleImportExportParams(destDir,
includePatterns, excludePatterns,
exportClasses, exportResources,
exportSources, useDefaultExcludes);
sendRequest(request);
String request = "http://" + remoteServer + "/servlet/vajexport";
Vector parameters = new Vector();
parameters.addElement(new URLParam(VAJExportServlet.WITH_DEBUG_INFO, exportDebugInfo));
parameters.addElement(new URLParam(VAJExportServlet.OVERWRITE_PARAM, overwrite));
assembleImportExportParams(parameters, destDir,
includePatterns, excludePatterns,
exportClasses, exportResources,
exportSources, useDefaultExcludes);
sendRequest(request, parameters);
} catch (Exception ex) { } catch (Exception ex) {
throw new BuildException(ex); throw new BuildException(ex);
} }
@@ -78,14 +79,15 @@ class VAJRemoteUtil implements VAJUtil {
boolean importClasses, boolean importResources, boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes) { boolean importSources, boolean useDefaultExcludes) {
try { try {
String request = "http://" + remoteServer + "/servlet/vajimport?"
+ VAJImportServlet.PROJECT_NAME_PARAM + "="
+ importProject + "&"
+ assembleImportExportParams(srcDir,
includePatterns, excludePatterns,
importClasses, importResources,
importSources, useDefaultExcludes);
sendRequest(request);
String request = "http://" + remoteServer + "/servlet/vajimport";
Vector parameters = new Vector();
parameters.addElement(new
URLParam(VAJImportServlet.PROJECT_NAME_PARAM, importProject));
assembleImportExportParams(parameters, srcDir,
includePatterns, excludePatterns,
importClasses, importResources,
importSources, useDefaultExcludes);
sendRequest(request, parameters);
} catch (Exception ex) { } catch (Exception ex) {
throw new BuildException(ex); throw new BuildException(ex);
} }
@@ -93,36 +95,32 @@ class VAJRemoteUtil implements VAJUtil {
} }


/** /**
* Assemble string for parameters common for import and export
* Add parameters common for import and export to vector
* Helper method to remove double code. * Helper method to remove double code.
*/ */
private String assembleImportExportParams(
File dir,
String[] includePatterns, String[] excludePatterns,
boolean includeClasses, boolean includeResources,
boolean includeSources, boolean useDefaultExcludes) {
String result =
VAJToolsServlet.DIR_PARAM + "="
+ URLEncoder.encode(dir.getPath()) + "&"
+ VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&"
+ VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&"
+ VAJToolsServlet.SOURCES_PARAM + "=" + includeSources + "&"
+ VAJToolsServlet.DEFAULT_EXCLUDES_PARAM + "=" + useDefaultExcludes;
private void assembleImportExportParams(Vector parameters,
File dir,
String[] includePatterns, String[] excludePatterns,
boolean includeClasses, boolean includeResources,
boolean includeSources, boolean useDefaultExcludes) {
parameters.addElement(new URLParam(VAJToolsServlet.DIR_PARAM, dir.getPath()));
parameters.addElement(new URLParam(VAJToolsServlet.CLASSES_PARAM, includeClasses));
parameters.addElement(new URLParam(VAJToolsServlet.RESOURCES_PARAM, includeResources));
parameters.addElement(new URLParam(VAJToolsServlet.SOURCES_PARAM, includeSources));
parameters.addElement(new URLParam(VAJToolsServlet.DEFAULT_EXCLUDES_PARAM, useDefaultExcludes));


if (includePatterns != null) { if (includePatterns != null) {
for (int i = 0; i < includePatterns.length; i++) { for (int i = 0; i < includePatterns.length; i++) {
result = result + "&" + VAJExportServlet.INCLUDE_PARAM + "="
+ URLEncoder.encode(includePatterns[i]);
parameters.addElement(new
URLParam(VAJExportServlet.INCLUDE_PARAM, includePatterns[i]));
} }
} }
if (excludePatterns != null) { if (excludePatterns != null) {
for (int i = 0; i < excludePatterns.length; i++) { for (int i = 0; i < excludePatterns.length; i++) {
result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "="
+ URLEncoder.encode(excludePatterns[i]);
parameters.addElement(new
URLParam(VAJExportServlet.EXCLUDE_PARAM, excludePatterns[i]));
} }
} }

return result;
} }


/** /**
@@ -130,19 +128,16 @@ class VAJRemoteUtil implements VAJUtil {
*/ */
public void loadProjects(Vector projectDescriptions) { public void loadProjects(Vector projectDescriptions) {
try { try {
String request = "http://" + remoteServer + "/servlet/vajload?";
String delimiter = "";
String request = "http://" + remoteServer + "/servlet/vajload";
Vector parameters = new Vector();
for (Enumeration e = projectDescriptions.elements(); e.hasMoreElements();) { for (Enumeration e = projectDescriptions.elements(); e.hasMoreElements();) {
VAJProjectDescription pd = (VAJProjectDescription) e.nextElement(); VAJProjectDescription pd = (VAJProjectDescription) e.nextElement();
request = request
+ delimiter + VAJLoadServlet.PROJECT_NAME_PARAM
+ "=" + pd.getName().replace(' ', '+')
+ "&" + VAJLoadServlet.VERSION_PARAM
+ "=" + pd.getVersion().replace(' ', '+');
//the first param needs no delimiter, but all other
delimiter = "&";
parameters.addElement(new
URLParam(VAJLoadServlet.PROJECT_NAME_PARAM, pd.getName()));
parameters.addElement(new
URLParam(VAJLoadServlet.VERSION_PARAM, pd.getVersion()));
} }
sendRequest(request);
sendRequest(request, parameters);
} catch (Exception ex) { } catch (Exception ex) {
throw new BuildException(ex); throw new BuildException(ex);
} }
@@ -155,16 +150,51 @@ class VAJRemoteUtil implements VAJUtil {
caller.log(msg, level); caller.log(msg, level);
} }


private class URLParam {
private String name;
private String value;
public URLParam(String name, String value) {
this.name = name;
this.value = value;
}
public URLParam(String name, boolean value) {
this.name = name;
this.value = (new Boolean(value)).toString();
}
public void setValue(String value) { this.value = value; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public String getValue() { return value; }
}
/** /**
* Sends a servlet request. * Sends a servlet request.
*
* The passed URL and parameter list are combined into a
* valid URL (with proper URL encoding for the parameters)
* and the URL is requested.
*
* @param request Request URL without trailing characters (no ?)
* @param parameters Vector of URLParam objects to append as parameters.
*/ */
private void sendRequest(String request) {
private void sendRequest(String request, Vector parameters) {
boolean requestFailed = false; boolean requestFailed = false;
// Build request & URL encode parameters
String url = request + "?";
for (int i=0; i<parameters.size(); i++) {
URLParam p = (URLParam)parameters.elementAt(i);
url += p.getName() + "=" + URLEncoder.encode(p.getValue());
url += (i==parameters.size()-1)?"":"&";
}


try { try {
log("Request: " + request, MSG_DEBUG);
log("Request: " + url, MSG_DEBUG);


//must be HTTP connection //must be HTTP connection
URL requestUrl = new URL(request);
URL requestUrl = new URL(url);
HttpURLConnection connection = HttpURLConnection connection =
(HttpURLConnection) requestUrl.openConnection(); (HttpURLConnection) requestUrl.openConnection();


@@ -179,8 +209,8 @@ class VAJRemoteUtil implements VAJUtil {
} }
} }
if (is == null) { if (is == null) {
log("Can't get " + request, MSG_ERR);
throw new BuildException("Couldn't execute " + request);
log("Can't get " + url, MSG_ERR);
throw new BuildException("Couldn't execute " + url);
} }


// log the response // log the response
@@ -203,7 +233,7 @@ class VAJRemoteUtil implements VAJUtil {


} catch (IOException ex) { } catch (IOException ex) {
log("Error sending tool request to VAJ" + ex, MSG_ERR); log("Error sending tool request to VAJ" + ex, MSG_ERR);
throw new BuildException("Couldn't execute " + request);
throw new BuildException("Couldn't execute " + url);
} }
if (requestFailed) { if (requestFailed) {
throw new BuildException("VAJ tool request failed"); throw new BuildException("VAJ tool request failed");


Loading…
Cancel
Save