You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2002/07/10 06:54:58 UTC

cvs commit: jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods PostMethod.java

dion        2002/07/09 21:54:58

  Modified:    httpclient/src/test/org/apache/commons/httpclient
                        TestMethodsNoHost.java
               httpclient/src/java/org/apache/commons/httpclient/methods
                        PostMethod.java
  Log:
  Fix for Bug http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10553
  as supplied by Jeff Dever
  
  Revision  Changes    Path
  1.2       +71 -4     jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsNoHost.java
  
  Index: TestMethodsNoHost.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsNoHost.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestMethodsNoHost.java	24 Apr 2002 14:44:50 -0000	1.1
  +++ TestMethodsNoHost.java	10 Jul 2002 04:54:58 -0000	1.2
  @@ -71,6 +71,16 @@
    */
   public class TestMethodsNoHost extends TestCase {
   
  +    static final String NAME = "name", VALUE = "value";
  +    static final String NAME0 = "name0", VALUE0 = "value0";
  +    static final String NAME1 = "name1", VALUE1 = "value1";
  +    static final String NAME2 = "name2", VALUE2 = "value2";
  +    static final NameValuePair PAIR = new NameValuePair(NAME, VALUE);
  +    static final NameValuePair PAIR0 = new NameValuePair(NAME0, VALUE0);
  +    static final NameValuePair PAIR1 = new NameValuePair(NAME1, VALUE1);
  +    static final NameValuePair PAIR2 = new NameValuePair(NAME2, VALUE2);
  +    
  +
       // ------------------------------------------------------------ Constructor
   
       public TestMethodsNoHost(String testName) {
  @@ -106,4 +116,61 @@
               // expected
           }
       }
  +
  +      
  +    /** Ensure that parameters can be added and getted. */
  +    public void testPostAddGetParameter() {
  +        PostMethod post = new PostMethod();
  +       
  +        //no parameters
  +        assertNull(post.getParameter("non-existant"));
  +        assertEquals(0, post.getParameters().length);
  +
  +        //add one parameter
  +        post.addParameter(NAME,VALUE);
  +        assertEquals(PAIR, post.getParameter(NAME));
  +        assertEquals(1, post.getParameters().length);
  +
  +        //add another parameter
  +        post.addParameter(PAIR0);
  +        assertEquals(PAIR0, post.getParameter(PAIR0.getName()));
  +        assertEquals(2, post.getParameters().length);
  +        
  +        //add two more parameters
  +        post.addParameters(new NameValuePair[]{ PAIR1, PAIR2 });
  +        assertEquals(4, post.getParameters().length);
  +        NameValuePair[] parameters = post.getParameters();
  +        for (int i=0; i<parameters.length; i++){
  +            NameValuePair pair = parameters[i];
  +            assertEquals(pair, post.getParameter(pair.getName()));
  +        }
  +    }
  +
  +    /** Exercise some unusual and error conditions. */
  +    public void testPostAddParameterErrorCases() {
  +        PostMethod post = new PostMethod();
  +
  +        //add same parameter twice
  +        post.addParameter(PAIR0);
  +        post.addParameter(PAIR0);
  +        assertEquals(1, post.getParameters().length);
  +
  +        //add null paramter
  +        post.addParameter(null);
  +        post.addParameter(null, "value");
  +        post.addParameter("name", null);
  +    }
  +        
  + 
  +    public void testPostSetRequestBodyThrowsIllegalState() throws Exception {
  +        PostMethod post = new PostMethod("/foo");
  +        post.addParameter(NAME0, VALUE0);
  +        try {
  +            post.setRequestBody("this+is+the+body");
  +            fail("Expected IllegalStateException");
  +        } catch(IllegalStateException e) {
  +            // expected
  +        }
  +    }
  +
   }
  
  
  
  1.10      +90 -8     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java
  
  Index: PostMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PostMethod.java	24 Apr 2002 14:44:50 -0000	1.9
  +++ PostMethod.java	10 Jul 2002 04:54:58 -0000	1.10
  @@ -69,6 +69,7 @@
   import org.apache.commons.httpclient.HttpMethodBase;
   import org.apache.commons.httpclient.HttpException;
   import org.apache.commons.httpclient.URIUtil;
  +import org.apache.commons.httpclient.NameValuePair;
   import java.util.Iterator;
   import java.util.HashMap;
   import java.util.List;
  @@ -157,12 +158,10 @@
       }
   
       /**
  -     * Overrides method of {@link HttpMethodBase}
  -     * to throw {@link IllegalStateException} if
  -     * my request body has already been
  -     * {@link #generateRequestBody generated}
  -     * or {@link #setRequestBody set}.
  +     * Add a new parameter to be used in the POST request body.
        *
  +     * @param parameterName The parameter name to add.
  +     * @param parameterValue The parameter value to add.
        * @throws IllegalStateException if my request body has already been generated.
        */
       public void addParameter(String parameterName, String parameterValue) {
  @@ -186,6 +185,89 @@
               v.add(parameterValue);
               parameters.put(parameterName,v);
           }
  +    }
  +
  +
  +    /**
  +     * Add a new parameter to be used in the POST request body.
  +     * Logs a warning if the parameter argument is null.
  +     *
  +     * @param parameter The parameter to add.
  +     * @throws IllegalStateException if my request body has already been generated.
  +     * @see #addParameter(java.lang.String,java.lang.String)
  +     * @since 2.0
  +     */
  +    public void addParameter(NameValuePair parameter) {
  +        if(null == parameter){
  +            log.warn("Attempt to addParameter(null) ignored");
  +        }else{
  +            addParameter(parameter.getName(), parameter.getValue());
  +        }
  +    }
  +
  +    /**
  +     * Add a list of parameters to be used in the POST request body.
  +     * Logs a warning if the parameters argument is null.
  +     *
  +     * @param parameter The array of parameters to add.
  +     * @throws IllegalStateException if my request body has already been generated.
  +     * @see #addParameter(org.apache.commons.httpclient.NameValuePair)
  +     * @since 2.0
  +     */
  +    public void addParameters(NameValuePair[] parameters) {
  +        if(null == parameters){
  +            log.warn("Attempt to addParameters(null) ignored");
  +        }else{
  +            for (int i=0; i<parameters.length; i++){
  +                addParameter(parameters[i]);
  +            }
  +        }
  +    }
  +
  +
  +    /**
  +     * Gets the parameter of the specified name.
  +     * The returned object is new and is <b>not</b> a refrence to any 
  +     * internal data members.
  +     * 
  +     * @return If a parameter exists with the name argument, the coresponding
  +     * NameValuePair is returned.  Otherwise null.
  +     * @since 2.0
  +     */
  +    public NameValuePair getParameter(String name){
  +        String value = null;
  +        try{
  +            value = (String)parameters.get(name);
  +        }catch (ClassCastException e){
  +            log.warn("Object of non-string type has been added as a parameter");
  +            value = null;
  +        }
  +        if (name == null || value == null){
  +            return null;
  +        }else{
  +            return new NameValuePair(name, value);
  +        }
  +    }
  +
  +    /**
  +     * Gets the parameters currently added to the PostMethod.
  +     * The returned object is new and is <b>not</b> a refrence to any 
  +     * internal data members.
  +     * 
  +     * @return An array of the current parameters
  +     * @see #getParameter(java.lang.String);
  +     * @since 2.0
  +     */
  +    public NameValuePair[] getParameters(){
  +        Set keySet = parameters.keySet();
  +        Object[] keyArray = keySet.toArray();
  +        int numKeys = keyArray.length;
  +        NameValuePair[] nvPairs = new NameValuePair[numKeys];
  +        Object key;
  +        for (int i=0; i<numKeys; i++){
  +            nvPairs[i] = this.getParameter((String)keyArray[i]);
  +        }
  +        return nvPairs;
       }
   
       /**
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>