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/09/27 04:07:55 UTC

cvs commit: jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http SessionTag.java Proxy.java OptionsTag.java HttpTagSupport.java BodyTag.java HeadTag.java ParameterTag.java GetTag.java DeleteTag.java HttpTagLibrary.java PutTag.java PostTag.java HeaderTag.java

dion        2002/09/26 19:07:54

  Modified:    jelly/src/java/org/apache/commons/jelly/tags/http
                        GetTag.java DeleteTag.java HttpTagLibrary.java
                        PutTag.java PostTag.java HeaderTag.java
  Added:       jelly/src/java/org/apache/commons/jelly/tags/http
                        SessionTag.java Proxy.java OptionsTag.java
                        HttpTagSupport.java BodyTag.java HeadTag.java
                        ParameterTag.java
  Log:
  Move Latka HTTP Tag library over to Jelly
  
  Revision  Changes    Path
  1.2       +30 -17    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/GetTag.java
  
  Index: GetTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/GetTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- GetTag.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ GetTag.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,29 +56,42 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
  +
   package org.apache.commons.jelly.tags.http;
   
   import java.net.MalformedURLException;
   
  -import org.apache.commons.httpclient.HttpException;
  -import org.apache.commons.httpclient.HttpMethod;
  +import org.apache.commons.httpclient.HttpUrlMethod;
   import org.apache.commons.httpclient.methods.UrlGetMethod;
   
  -/** 
  - * Performs a HTTP GET request fron a given URL.
  +/**
  + * A http get tag
    *
  - * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  - * @version $Revision$
  + * @author  dion
  + * @version $Id$
    */
  -public class GetTag extends MethodSupportTag {
  -
  +public class GetTag extends HttpTagSupport {
  +    
  +    /** the get method */
  +    private UrlGetMethod _getMethod;
  +    
  +    /**
  +     * Creates a new instance of GetTag
  +     */
  +    public GetTag() {
  +    }
  +    
       /**
  -     * @return the HTTP method to invoke
  +     * @return a url method for a get request
  +     * @throws MalformedURLException when the url is bad
        */
  -    public HttpMethod getMethod() throws HttpException, MalformedURLException {
  -        return new UrlGetMethod(getUrl());
  +    protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
  +        if (_getMethod == null) {
  +            _getMethod = new UrlGetMethod(getResolvedUrl());
  +        }
  +        return _getMethod;
       }
  +        
   }
  
  
  
  1.2       +30 -17    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/DeleteTag.java
  
  Index: DeleteTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/DeleteTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DeleteTag.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ DeleteTag.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,29 +56,42 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
  +
   package org.apache.commons.jelly.tags.http;
   
   import java.net.MalformedURLException;
   
  -import org.apache.commons.httpclient.HttpException;
  -import org.apache.commons.httpclient.HttpMethod;
  +import org.apache.commons.httpclient.HttpUrlMethod;
   import org.apache.commons.httpclient.methods.UrlDeleteMethod;
   
  -/** 
  - * Performs a HTTP POST request fron a given URL.
  +/**
  + * A http delete tag
    *
  - * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  - * @version $Revision$
  + * @author  dion
  + * @version $Id$
    */
  -public class DeleteTag extends MethodSupportTag {
  -
  +public class DeleteTag extends HttpTagSupport {
  +    
  +    /** the delete method */
  +    private UrlDeleteMethod _deleteMethod;
  +    
  +    /**
  +     * Creates a new instance of DeleteTag
  +     */
  +    public DeleteTag() {
  +    }
  +    
       /**
  -     * @return the HTTP method to invoke
  +     * @return a url method for a get request
  +     * @throws MalformedURLException when the url is bad
        */
  -    public HttpMethod getMethod() throws HttpException, MalformedURLException {
  -        return new UrlDeleteMethod(getUrl());
  +    protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
  +        if (_deleteMethod == null) {
  +            _deleteMethod = new UrlDeleteMethod(getResolvedUrl());
  +        }
  +        return _deleteMethod;
       }
  +        
   }
  
  
  
  1.2       +37 -15    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HttpTagLibrary.java
  
  Index: HttpTagLibrary.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HttpTagLibrary.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HttpTagLibrary.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ HttpTagLibrary.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,25 +56,47 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
  +
   package org.apache.commons.jelly.tags.http;
   
  +import java.util.Map;
  +
   import org.apache.commons.jelly.TagLibrary;
   
  -/** Describes the Taglib. This class could be generated by XDoclet
  -  *
  -  * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision$
  -  */
  +/**
  + * The set of jelly tags provided by Latka
  + *
  + * @author dion
  + * @version $Id$
  + */
   public class HttpTagLibrary extends TagLibrary {
  -
  +    
  +    /** 
  +     * Creates a new instance of LatkaTagLibrary
  +     */
       public HttpTagLibrary() {
  -        registerTag("delete", DeleteTag.class);
  +        registerTag("session", SessionTag.class);
           registerTag("get", GetTag.class);
  -        registerTag("header", HeaderTag.class);
  -        registerTag("post", GetTag.class);
  +        registerTag("post", PostTag.class);
  +        registerTag("delete", DeleteTag.class);
  +        registerTag("head", HeadTag.class);
  +        registerTag("options", OptionsTag.class);
           registerTag("put", PutTag.class);
  +        registerTag("parameter", ParameterTag.class);
  +        registerTag("header", HeaderTag.class);
  +        registerTag("body", BodyTag.class);
  +    }
  +    
  +    /**
  +     * @see TagLibarary#getTagClasses()
  +     *
  +     * @return a Map of tag name to tag class
  +     */
  +    public Map getTagClasses() {
  +        return super.getTagClasses();
       }
  +    
   }
  +
  
  
  
  1.2       +48 -17    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/PutTag.java
  
  Index: PutTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/PutTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PutTag.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ PutTag.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,29 +56,60 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
  +
   package org.apache.commons.jelly.tags.http;
   
   import java.net.MalformedURLException;
  -
  -import org.apache.commons.httpclient.HttpException;
  -import org.apache.commons.httpclient.HttpMethod;
  +import org.apache.commons.httpclient.HttpUrlMethod;
   import org.apache.commons.httpclient.methods.UrlPutMethod;
   
  -/** 
  - * Performs a HTTP POST request fron a given URL.
  +
  +/**
  + * A http put
    *
  - * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  - * @version $Revision$
  + * @author  dion
  + * @version $Id$
    */
  -public class PutTag extends MethodSupportTag {
  +public class PutTag extends HttpTagSupport {
  +    
  +    /** the put method */
  +    private UrlPutMethod _putMethod;
   
  +    /** Creates a new instance of PutTag */
  +    public PutTag() {
  +    }
  +    
  +    /** 
  +     * Return a {@link HttpUrlMethod method} to be used for put'ing
  +     *
  +     * @return a HttpUrlMethod implementation
  +     * @throws MalformedURLException when the {@link getUrl() url} or
  +     * {@link #getPath() path} is invalid
  +     */
  +    protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
  +        if (_putMethod == null) {
  +            _putMethod = new UrlPutMethod(getResolvedUrl());
  +        }
  +        return _putMethod;
  +    }
  +    
  +    /** 
  +     * Set the current parameters on the url method ready for processing
  +     *
  +     */
  +    protected void setParameters() {
  +    }
  +    
       /**
  -     * @return the HTTP method to invoke
  +     * Fail as PUT requests don't have parameters
  +     *
  +     * @param name the parameter name
  +     * @param value the parameter value
        */
  -    public HttpMethod getMethod() throws HttpException, MalformedURLException {
  -        return new UrlPutMethod(getUrl());
  +    public void addParameter(String name, String value) {
  +        throw new IllegalArgumentException("PUT requests don't have params");
       }
  +
   }
  
  
  
  1.2       +47 -18    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/PostTag.java
  
  Index: PostTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/PostTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PostTag.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ PostTag.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,29 +56,58 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
  +
   package org.apache.commons.jelly.tags.http;
   
   import java.net.MalformedURLException;
  -
  -import org.apache.commons.httpclient.HttpException;
  -import org.apache.commons.httpclient.HttpMethod;
  +import org.apache.commons.httpclient.HttpUrlMethod;
  +import org.apache.commons.httpclient.NameValuePair;
   import org.apache.commons.httpclient.methods.UrlPostMethod;
   
  -/** 
  - * Performs a HTTP POST request fron a given URL.
  +
  +/**
  + * A http post
    *
  - * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  - * @version $Revision$
  + * @author  dion
    */
  -public class PostTag extends MethodSupportTag {
  +public class PostTag extends HttpTagSupport {
  +    
  +    /** the post method */
  +    private UrlPostMethod _postMethod;
   
  -    /**
  -     * @return the HTTP method to invoke
  +    /** Creates a new instance of PostTag */
  +    public PostTag() {
  +    }
  +    
  +    /** 
  +     * Return a {@link HttpUrlMethod method} to be used for post'ing
  +     *
  +     * @return a HttpUrlMethod implementation
  +     * @throws MalformedURLException when the {@link getUrl() url} or
  +     * {@link #getPath() path} is invalid
  +     */
  +    protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
  +        if (_postMethod == null) {
  +            _postMethod = new UrlPostMethod(getResolvedUrl());
  +        }
  +        return _postMethod;
  +    }
  +    
  +    /** 
  +     * Set the current parameters on the url method ready for processing
  +     *
  +     * This method <strong>must</strong> be called after 
  +     *  {@link getHttpUrlMethod}
        */
  -    public HttpMethod getMethod() throws HttpException, MalformedURLException {
  -        return new UrlPostMethod(getUrl());
  +    protected void setParameters() {
  +        NameValuePair nvp = null;
  +        for (int index = 0; index < getParameters().size(); index++) {
  +            NameValuePair parameter = (NameValuePair) getParameters().
  +                get(index);
  +            _postMethod.addParameter(parameter);
  +        }
       }
  +
   }
  
  
  
  1.2       +64 -47    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HeaderTag.java
  
  Index: HeaderTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HeaderTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HeaderTag.java	24 Jun 2002 11:17:09 -0000	1.1
  +++ HeaderTag.java	27 Sep 2002 02:07:54 -0000	1.2
  @@ -7,7 +7,7 @@
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -56,63 +56,80 @@
    * individuals on behalf of the Apache Software Foundation.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - * 
  - * $Id$
  + *
    */
   
   package org.apache.commons.jelly.tags.http;
   
  -import org.apache.commons.jelly.JellyException;
  -import org.apache.commons.jelly.MissingAttributeException;
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.XMLOutput;
   
  -/** Defines a header on an outer HTTP tag
  -  *
  -  * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision$
  -  */
  +/**
  + * A tag to hold request headers
  + * 
  + * @author  dion
  + * @version $Id$
  + */
   public class HeaderTag extends TagSupport {
  -
  -    /** Stores the name of the property */
  -    private String name;
  -    
  -    /** Stores the value of the property */
  -    private Object value;
  -    
  +    /** parameter name */
  +    private String _name;
  +    /** parameter value */
  +    private String _value;
       
  -    // Tag interface
  -    //-------------------------------------------------------------------------                    
  -    public void doTag(XMLOutput output) throws Exception {
  -        if ( name == null ) {
  -            throw new MissingAttributeException("name");
  -        }
  -        MethodSupportTag tag = (MethodSupportTag) findAncestorWithClass( MethodSupportTag.class );
  -        if ( tag == null ) {
  -            throw new JellyException("<http:header> tag must be within a <http:method> tag");
  -        }
  -        
  -        if ( value != null ) {
  -            tag.addHeader(name, value.toString());
  -        }
  -        else {
  -            tag.addHeader(name, getBodyText());
  -        }
  +    /** Creates a new instance of HeaderTag */
  +    public HeaderTag() {
       }
   
  +    /**
  +     * Perform the tag functionality. In this case, simply evaluate the body.
  +     *
  +     * @param xmlOutput where to send output
  +     * @throws Exception when an error occurs
  +     */
  +    public void doTag(XMLOutput xmlOutput) throws Exception {
  +        HttpTagSupport http = (HttpTagSupport) findAncestorWithClass(
  +            HttpTagSupport.class);
  +        http.addRequestHeader(getName(), getValue());
  +        invokeBody(xmlOutput);
  +    }
  +
  +    //--------------------------------------------------------------------------
  +    // Property accessors/mutators
  +    //--------------------------------------------------------------------------
  +    /**
  +     * Getter for property name.
  +     *
  +     * @return Value of property name.
  +     */
  +    public String getName() {
  +        return _name;
  +    }
       
  -    // Properties
  -    //-------------------------------------------------------------------------                    
  -    /** Sets the name of the JMS property
  -      */
  +    /**
  +     * Setter for property name.
  +     *
  +     * @param name New value of property name.
  +     */
       public void setName(String name) {
  -        this.name = name;
  +        _name = name;
       }
       
  -    /** Sets the value of the JMS property. 
  -      * If no value is set then the body of the tag is used
  -      */
  -    public void setValue(Object value) {
  -        this.value = value;
  +    /**
  +     * Getter for property value.
  +     *
  +     * @return Value of property value.
  +     */
  +    public String getValue() {
  +        return _value;
       }
  +    
  +    /**
  +     * Setter for property value.
  +     *
  +     * @param value New value of property value.
  +     */
  +    public void setValue(String value) {
  +        _value = value;
  +    }
  +    
   }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/SessionTag.java
  
  Index: SessionTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/SessionTag.java,v 1.8 2002/07/14 12:38:22 dion Exp $
   * $Revision: 1.8 $
   * $Date: 2002/07/14 12:38:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import org.apache.commons.httpclient.HttpMultiClient;
  import org.apache.commons.jelly.TagSupport;
  import org.apache.commons.jelly.XMLOutput;
  
  /**
   * A http session. This is the container for data shared across requests
   *
   * @author dion
   */
  public class SessionTag extends TagSupport {
      
      /** default host for requests */
      private String _host;
      /** default port for requests */
      private String _port;
      /** Proxy details for requests */
      private Proxy _proxy = new Proxy();
      /** whether the default is for secure comms */
      private boolean _secure;
      /** the browser identifier */
      private String _userAgent;
      /** strict compliance */
      private boolean _strictMode = false;
      
      /** http client used to store state and execute requests */
      private HttpMultiClient _httpClient;
      
      /** 
       * Creates a new instance of SessionTag
       */
      public SessionTag() {
      }
      
      /**
       * Process the tag
       *
       * @param xmlOutput to write output
       * @throws Exception when any error occurs
       */
      public void doTag(XMLOutput xmlOutput) throws Exception {
          if (isProxyAvailable()) {
              _httpClient = new HttpMultiClient(getProxyHost(), getProxyPort());
          } else {
              _httpClient = new HttpMultiClient();
          }
          
          invokeBody(xmlOutput);
      }
      
      /**
       * Getter for property httpClient.
       *
       * @return Value of property httpClient.
       */
      public HttpMultiClient getHttpClient() {
          return _httpClient;
      }
      
      /**
       * Setter for property httpClient.
       *
       * @param httpClient New value of property httpClient.
       */
      public void setHttpClient(HttpMultiClient httpClient) {
          _httpClient = httpClient;
      }
      /**
       * Tests whether the {@link #getProxy() proxy} is ready for use
       *
       * @return true if the {@link #getProxy() proxy} is configured for use
       */
      public boolean isProxyAvailable() {
          return getProxy() != null && getProxy().getHost() != null 
              && getProxy().getPort() != Proxy.PORT_UNSPECIFIED;
      }
      
      /**
       * Helper method for proxy host property
       *
       * @return the {@link #getProxy() proxy's} host property
       */
      public String getProxyHost() {
          return getProxy().getHost();
      }
      
      /**
       * Helper method for proxy <code>host</code> property
       *
       * @param host the {@link #getProxy() proxy's} host property
       */
      public void setProxyHost(String host) {
          getProxy().setHost(host);
      }
      
      /**
       * Helper method for proxy <code>port</code> property
       *
       * @return the {@link #getProxy() proxy's} port property
       */
      public int getProxyPort() {
          return getProxy().getPort();
      }
      
      /**
       * Helper method for proxy <code>port</code> property
       *
       * @param port the {@link #getProxy() proxy's} port property
       */
      public void setProxyPort(int port) {
          getProxy().setPort(port);
      }
      
      /**
       * Getter for property host.
       *
       * @return Value of property host.
       */
      public String getHost() {
          return _host;
      }
      
      /**
       * Setter for property host.
       *
       * @param host New value of property host.
       */
      public void setHost(String host) {
          _host = host;
      }
      
      /** Getter for property port.
       * @return Value of property port.
       */
      public String getPort() {
          return _port;
      }
      
      /** Setter for property port.
       * @param port New value of property port.
       */
      public void setPort(String port) {
          _port = port;
      }
      
      /**
       * Getter for property proxy.
       *
       * @return Value of property proxy.
       */
      public Proxy getProxy() {
          return _proxy;
      }
      
      /**
       * Setter for property proxy.
       *
       * @param proxy New value of property proxy.
       */
      public void setProxy(Proxy proxy) {
          _proxy = proxy;
      }
      
      /**
       * Getter for property secure.
       *
       * @return Value of property secure.
       */
      public boolean isSecure() {
          return _secure;
      }
      
      /**
       * Setter for property secure.
       *
       * @param secure New value of property secure.
       */
      public void setSecure(boolean secure) {
          _secure = secure;
      }
  
      /** Getter for property userAgent.
       * @return Value of property userAgent.
       */
      public String getUserAgent() {
          return _userAgent;
      }
      
      /** Setter for property userAgent.
       * @param userAgent New value of property userAgent.
       */
      public void setUserAgent(String userAgent) {
          _userAgent = userAgent;
      }
      
      /** Getter for property strictMode.
       * @return Value of property strictMode.
       */
      public boolean isStrictMode() {
          return _strictMode;
      }
      
      /** Setter for property strictMode.
       * @param strictMode New value of property strictMode.
       */
      public void setStrictMode(boolean strictMode) {
          _strictMode = strictMode;
      }
      
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/Proxy.java
  
  Index: Proxy.java
  ===================================================================
  /*
   *
   *
   *
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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", "Commons", 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.commons.jelly.tags.http;
  
  /**
   * A class that holds proxy details for a session. 
   * At the moment this is a placeholder for two simple properties that may
   * get added to as time goes by
   *
   * @author  dion
   * @version $Id: Proxy.java,v 1.3 2002/07/04 14:06:32 dion Exp $
   */
  public class Proxy {
      
      /** the host to use as a proxy */
      private String _host;
      /** the port to send proxied requests on */
      private int _port;
      /** the port number that represents port is unassigned */
      public static final int PORT_UNSPECIFIED = -1;
      
      /**
       * Creates a new instance of Proxy
       */
      public Proxy() {
          this(null, Proxy.PORT_UNSPECIFIED);
      }
      
      /** 
       * Create a proxy given a host name and port number .
       *
       * @param host the host name of the proxy to be used.
       * @param port the port to send proxied requests on.
       */
      public Proxy(String host, int port) {
          setHost(host);
          setPort(port);
      }
      
      /**
       * Getter for property host.
       *
       * @return the host name of the proxy to be used.
       */
      public String getHost() {
          return _host;
      }
      
      /**
       * Setter for property host.
       *
       * @param host the host name of the proxy to be used.
       */
      public void setHost(String host) {
          _host = host;
      }
      
      /**
       * Getter for property port.
       *
       * @return the port to send proxied requests on.
       */
      public int getPort() {
          return _port;
      }
      
      /**
       * Setter for property port.
       *
       * @param port the port to send proxied requests on.
       */
      public void setPort(int port) {
          _port = port;
      }
      
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/OptionsTag.java
  
  Index: OptionsTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/OptionsTag.java,v 1.2 2002/07/14 12:38:22 dion Exp $
   * $Revision: 1.2 $
   * $Date: 2002/07/14 12:38:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import java.net.MalformedURLException;
  
  import org.apache.commons.httpclient.HttpUrlMethod;
  import org.apache.commons.httpclient.methods.UrlOptionsMethod;
  
  /**
   * A http get tag
   *
   * @author  dion
   * @version $Id: OptionsTag.java,v 1.2 2002/07/14 12:38:22 dion Exp $
   */
  public class OptionsTag extends HttpTagSupport {
      
      /** the options method */
      private UrlOptionsMethod _optionsMethod;
      
      /**
       * Creates a new instance of OptionsTag
       */
      public OptionsTag() {
      }
      
      /**
       * @return a url method for an options request
       * @throws MalformedURLException when the url is bad
       */
      protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
          if (_optionsMethod == null) {
              _optionsMethod = new UrlOptionsMethod(getResolvedUrl());
          }
          return _optionsMethod;
      }
          
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HttpTagSupport.java
  
  Index: HttpTagSupport.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/HttpTagSupport.java,v 1.3 2002/07/14 16:51:33 dion Exp $
   * $Revision: 1.3 $
   * $Date: 2002/07/14 16:51:33 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import java.net.MalformedURLException;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.apache.commons.httpclient.HttpMultiClient;
  import org.apache.commons.httpclient.HttpUrlMethod;
  import org.apache.commons.httpclient.NameValuePair;
  import org.apache.commons.jelly.TagSupport;
  import org.apache.commons.jelly.XMLOutput;
  
  /**
   * The base tag for all http requests
   *
   * @author  dion
   * @version $Id: HttpTagSupport.java,v 1.3 2002/07/14 16:51:33 dion Exp $
   */
  public abstract class HttpTagSupport extends TagSupport {
      
      /** unique identifier of the tag/ variable to store result in */
      private String _var;
  
      /**
       * the path to be tested relative to the host/port specifed on the parent
       * {@link SuiteTag suite tag}. 
       * Either this property and the suite's host
       * must be provided, or the {@link #getUrl() url} property must be specifed
       */
      private String _path;
      
      /**
       * The complete uri to be processed
       * Either this property or the {@link #getPath() path} and the suite's host
       * must be provided.
       */
      private String _uri;
      
      /** whether or not to follow redirects */ 
      private boolean _followRedirects = true;
      /** list of parameters as name value pairs */
      private List _parameters;
      /** list of headers as name value pairs */
      private List _requestHeaders;
      /** the header name for the user agent */
      private static final String HEADER_NAME_USER_AGENT = "User-Agent";
      
      /**
       * Creates a new instance of HttpTag
       */
      public HttpTagSupport() {
          setParameters(new ArrayList());
          setRequestHeaders(new ArrayList());
      }
      
      /**
       * @return the url specified by the tag, either the url if not null, or
       * a combination of the host, port and path
       */
      public String getResolvedUrl() {
          if (getUri() != null) {
              return getUri();
          } else {
              // build it from path, host and optionally port
              SessionTag session = (SessionTag) findAncestorWithClass(
                  SessionTag.class);
              String host = session.getHost();
              String port = session.getPort();
              // short term hack, need to add port and security in
              return "http://" + host + getPath();
          }
      }
      
      /**
       * A method that must be implemented by subclasses to provide the 
       * {@link HttpUrlMethod url method} implementation
       *
       * @return a HttpUrlMethod implementation
       * @throws MalformedURLException when the {@link getUrl() url} or 
       * {@link #getPath() path} is invalid
       */
      protected abstract HttpUrlMethod getHttpUrlMethod() 
          throws MalformedURLException;
      
      /**
       * Perform the tag functionality. In this case, get the http url method
       * execute it and make it available for validation
       *
       * @param xmlOutput where to send output
       * @throws Exception when an error occurs
       */
      public void doTag(XMLOutput xmlOutput) throws Exception {
          // allow nested tags first, e.g body
          invokeBody(xmlOutput);
          HttpUrlMethod urlMethod = getConfiguredHttpMethod();
          // track request execution
          long start = System.currentTimeMillis();
          getHttpClient().executeMethod(urlMethod);
          long end = System.currentTimeMillis();
          // set variable to value
          if (getVar() != null) {
              getContext().setVariable(getVar(), urlMethod);
              getContext().setVariable(getVar() + ".responseTime", 
                  String.valueOf(end - start));
          }
      }
  
      /** 
       * retrieve the {@link HttpUrlMethod method} from the subclass and 
       * configure it ready for execution
       *
       * @return a configured {@link HttpUrlMethod method}
       * @throws MalformedURLException when retrieving the URL fails
       */
      private HttpUrlMethod getConfiguredHttpMethod() throws 
      MalformedURLException {
          // retrieve and configure url method
          HttpUrlMethod urlMethod = getHttpUrlMethod();
          urlMethod.setFollowRedirects(isFollowRedirects());
          // add request headers
          NameValuePair header = null;
          for (int index = 0; index < getRequestHeaders().size(); index++) {
              header = (NameValuePair) getRequestHeaders().get(index);
              urlMethod.addRequestHeader(header.getName(), header.getValue());
          }
          // add parameters
          setParameters(urlMethod);
          // add the default user agent to the list if one doesn't exist
          // and the session tag does exist and have a user agent
          if (urlMethod.getRequestHeader(HttpTagSupport.HEADER_NAME_USER_AGENT) 
              == null && getSessionTag() != null
              && getSessionTag().getUserAgent() != null) {
                  
              urlMethod.addRequestHeader(HttpTagSupport.HEADER_NAME_USER_AGENT,
                      getSessionTag().getUserAgent());
          }
          return urlMethod;
      }
      
      /** 
       * Set the current parameters on the url method ready for processing
       *
       * @param method the {@link HttpUrlMethod method} to configure
       * @throws MalformedURLException when {@link #getHttpUrlMethod()} does
       */
      protected void setParameters(HttpUrlMethod method) throws 
      MalformedURLException {
          if (getParameters().size() > 0) {
              NameValuePair[] parameters = (NameValuePair[]) getParameters().
                  toArray(new NameValuePair[0]);
              method.setQueryString(parameters);
          }
      }
      
      /**
       * retrieve the optional parent session tag
       *
       * @return the ancestor tag with class {@link SessionTag} or null if
       *      not found
       */
      private SessionTag getSessionTag() {
          SessionTag sessionTag = (SessionTag) findAncestorWithClass(
              SessionTag.class);
          return sessionTag;
      }
  
      /**
       * return a HttpClient shared on the session tag, or a new one if no
       * session tag exists
       *
       * @return the shared http client from the session tag, or create a new one.
       */
      private HttpMultiClient getHttpClient() {
          SessionTag session = getSessionTag();
          HttpMultiClient client = null;
          if (session != null) {
              client = session.getHttpClient();
              client.setStrictMode(session.isStrictMode());
          } else {
              client = new HttpMultiClient();
          }
          return client;
      }
      
      /**
       * Add a parameter to the list
       *
       * @param name the parameter name
       * @param value the parameter value
       */
      public void addParameter(String name, String value) {
          getParameters().add(new NameValuePair(name, value));
      }
      
      /**
       * Add a request header to the list
       *
       * @param name the header name
       * @param value the header value
       */
      public void addRequestHeader(String name, String value) {
          getRequestHeaders().add(new NameValuePair(name, value));
      }
      
      //--------------------------------------------------------------------------
      // Property accessors/mutators
      //--------------------------------------------------------------------------
      
      /**
       * Getter for property var.
       *
       * @return Value of property var.
       */
      public String getVar() {
          return _var;
      }
      
      /**
       * Setter for property var.
       *
       * @param var New value of property var.
       */
      public void setVar(String var) {
          _var = var;
      }
  
      /** 
       * Getter for property path.
       *
       * @return Value of property path.
       */
      public String getPath() {
          return _path;
      }
      
      /**
       * Setter for property path.
       *
       * @param path New value of property path.
       */
      public void setPath(String path) {
          _path = path;
      }
      
      /**
       * Getter for property uri.
       *
       * @return Value of property uri.
       */
      public String getUri() {
          return _uri;
      }
      
      /**
       * Setter for property uri.
       *
       * @param uri New value of property uri.
       */
      public void setUri(String uri) {
          _uri = uri;
      }
      
      /**
       * Getter for property followRedirects.
       *
       * @return Value of property followRedirects.
       */
      public boolean isFollowRedirects() {
          return _followRedirects;
      }
      
      /**
       * Setter for property followRedirects.
       *
       * @param followRedirects New value of property followRedirects.
       */
      public void setFollowRedirects(boolean followRedirects) {
          _followRedirects = followRedirects;
      }
      
      /**
       * Getter for property parameters.
       *
       * @return Value of property parameters.
       */
      public List getParameters() {
          return _parameters;
      }
      
      /**
       * Setter for property parameters.
       *
       * @param parameters New value of property parameters.
       */
      public void setParameters(List parameters) {
          _parameters = parameters;
      }
      
      /**
       * Getter for property requestHeaders.
       *
       * @return Value of property requestHeaders.
       */
      public List getRequestHeaders() {
          return _requestHeaders;
      }
      
      /** 
       * Setter for property requestHeaders.
       *
       * @param requestHeaders New value of property requestHeaders.
       */
      public void setRequestHeaders(List requestHeaders) {
          _requestHeaders = requestHeaders;
      }
      
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/BodyTag.java
  
  Index: BodyTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/BodyTag.java,v 1.3 2002/07/14 16:44:10 dion Exp $
   * $Revision: 1.3 $
   * $Date: 2002/07/14 16:44:10 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import org.apache.commons.httpclient.HttpUrlMethod;
  import org.apache.commons.httpclient.methods.UrlPostMethod;
  import org.apache.commons.httpclient.methods.UrlPutMethod;
  import org.apache.commons.jelly.TagSupport;
  import org.apache.commons.jelly.XMLOutput;
  
  /**
   * A tag to set the body for posts and puts etc
   *
   * @author  dion
   * @version $Id: BodyTag.java,v 1.3 2002/07/14 16:44:10 dion Exp $
   */
  public class BodyTag extends TagSupport {
      
      /** Creates a new instance of BodyTag */
      public BodyTag() {
      }
      
      /**
       * Perform the tag functionality. In this case, get the parent http tag,
       * and if it's a post or put, set the request body from the body of this
       * tag.
       *
       * @param xmlOutput for writing output to
       * @throws Exception when any error occurs
       */
      public void doTag(XMLOutput xmlOutput) throws Exception {
          HttpTagSupport httpTag = (HttpTagSupport) findAncestorWithClass(
              HttpTagSupport.class);
          HttpUrlMethod httpMethod = httpTag.getHttpUrlMethod();
          String bodyText = getBodyText();
          if (httpMethod instanceof UrlPostMethod) {
              UrlPostMethod postMethod = (UrlPostMethod) httpMethod;
              postMethod.setRequestBody(bodyText);
          } else if (httpMethod instanceof UrlPutMethod) {
              UrlPutMethod putMethod = (UrlPutMethod) httpMethod;
              putMethod.setRequestBody(bodyText);
          } else {
              throw new IllegalStateException("Http method from parent was "
                  + "not post or put");
          }
      }
      
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/HeadTag.java
  
  Index: HeadTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/HeadTag.java,v 1.2 2002/07/14 12:38:22 dion Exp $
   * $Revision: 1.2 $
   * $Date: 2002/07/14 12:38:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import java.net.MalformedURLException;
  
  import org.apache.commons.httpclient.HttpUrlMethod;
  import org.apache.commons.httpclient.methods.UrlHeadMethod;
  
  /**
   * A http get tag
   *
   * @author  dion
   * @version $Id: HeadTag.java,v 1.2 2002/07/14 12:38:22 dion Exp $
   */
  public class HeadTag extends HttpTagSupport {
      
      /** the head method */
      private UrlHeadMethod _headMethod;
      
      /**
       * Creates a new instance of HeadTag
       */
      public HeadTag() {
      }
      
      /**
       * @return a url method for a Head request
       * @throws MalformedURLException when the url is bad
       */
      protected HttpUrlMethod getHttpUrlMethod() throws MalformedURLException {
          if (_headMethod == null) {
              _headMethod = new UrlHeadMethod(getResolvedUrl());
          }
          return _headMethod;
      }
          
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/http/ParameterTag.java
  
  Index: ParameterTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/ParameterTag.java,v 1.3 2002/07/14 12:38:22 dion Exp $
   * $Revision: 1.3 $
   * $Date: 2002/07/14 12:38:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 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", "Commons", 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.commons.jelly.tags.http;
  
  import org.apache.commons.jelly.TagSupport;
  import org.apache.commons.jelly.XMLOutput;
  
  /**
   * A tag to hold parameters
   * 
   * @author  dion
   * @version $Id: ParameterTag.java,v 1.3 2002/07/14 12:38:22 dion Exp $
   */
  public class ParameterTag extends TagSupport {
      /** parameter name */
      private String _name;
      /** parameter value */
      private String _value;
      
      /** Creates a new instance of ParameterTag */
      public ParameterTag() {
      }
  
      /**
       * Perform the tag functionality. In this case, simply evaluate the body.
       *
       * @param xmlOutput where to send output
       * @throws Exception when an error occurs
       */
      public void doTag(XMLOutput xmlOutput) throws Exception {
          HttpTagSupport http = (HttpTagSupport) findAncestorWithClass(
              HttpTagSupport.class);
          http.addParameter(getName(), getValue());
          invokeBody(xmlOutput);
      }
  
      //--------------------------------------------------------------------------
      // Property accessors/mutators
      //--------------------------------------------------------------------------
      /**
       * Getter for property name.
       *
       * @return Value of property name.
       */
      public String getName() {
          return _name;
      }
      
      /**
       * Setter for property name.
       *
       * @param name New value of property name.
       */
      public void setName(String name) {
          _name = name;
      }
      
      /**
       * Getter for property value.
       *
       * @return Value of property value.
       */
      public String getValue() {
          return _value;
      }
      
      /**
       * Setter for property value.
       *
       * @param value New value of property value.
       */
      public void setValue(String value) {
          _value = value;
      }
      
  }
  
  
  

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