You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2005/03/14 12:34:58 UTC

cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/optional/ide VAJRemoteUtil.java

bodewig     2005/03/14 03:34:58

  Modified:    .        WHATSNEW
               src/main/org/apache/tools/ant/taskdefs/optional/ide
                        VAJRemoteUtil.java
  Log:
  More VAJ URL encoding issues
  
  Revision  Changes    Path
  1.776     +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.775
  retrieving revision 1.776
  diff -u -r1.775 -r1.776
  --- WHATSNEW	14 Mar 2005 10:42:35 -0000	1.775
  +++ WHATSNEW	14 Mar 2005 11:34:58 -0000	1.776
  @@ -388,6 +388,9 @@
   * <cab> didn't work for files with spaces in their names on Windows.
     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
   ===================================
   
  
  
  
  1.15      +82 -52    ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java
  
  Index: VAJRemoteUtil.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- VAJRemoteUtil.java	9 Mar 2004 16:48:28 -0000	1.14
  +++ VAJRemoteUtil.java	14 Mar 2005 11:34:58 -0000	1.15
  @@ -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");
    *  you may not use this file except in compliance with the License.
  @@ -56,14 +56,15 @@
                                  boolean exportResources, boolean exportSources,
                                  boolean useDefaultExcludes, boolean overwrite) {
           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) {
               throw new BuildException(ex);
           }
  @@ -78,14 +79,15 @@
                               boolean importClasses, boolean importResources,
                               boolean importSources, boolean useDefaultExcludes) {
           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) {
               throw new BuildException(ex);
           }
  @@ -93,36 +95,32 @@
       }
   
       /**
  -     * Assemble string for parameters common for import and export
  +     * Add parameters common for import and export to vector
        * 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) {
               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) {
               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 @@
        */
       public void loadProjects(Vector projectDescriptions) {
           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();) {
                   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) {
               throw new BuildException(ex);
           }
  @@ -155,16 +150,51 @@
           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.
  +     *
  +     * 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;
  +        
  +        // 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 {
  -            log("Request: " + request, MSG_DEBUG);
  +            log("Request: " + url, MSG_DEBUG);
   
               //must be HTTP connection
  -            URL requestUrl = new URL(request);
  +            URL requestUrl = new URL(url);
               HttpURLConnection connection =
                   (HttpURLConnection) requestUrl.openConnection();
   
  @@ -179,8 +209,8 @@
                   }
               }
               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
  @@ -203,7 +233,7 @@
   
           } catch (IOException ex) {
               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) {
               throw new BuildException("VAJ tool request failed");
  
  
  

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