You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2007/02/12 10:17:42 UTC

svn commit: r506384 - in /cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl: pom.xml src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java

Author: cziegeler
Date: Mon Feb 12 01:17:42 2007
New Revision: 506384

URL: http://svn.apache.org/viewvc?view=rev&rev=506384
Log:
Update http client to 3.0.1

Modified:
    cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/pom.xml
    cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java
    cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java

Modified: cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/pom.xml?view=diff&rev=506384&r1=506383&r2=506384
==============================================================================
--- cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/pom.xml (original)
+++ cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/pom.xml Mon Feb 12 01:17:42 2007
@@ -43,7 +43,7 @@
     <dependency>
       <groupId>commons-httpclient</groupId>
       <artifactId>commons-httpclient</artifactId>
-      <version>2.0.2</version>
+      <version>3.0.1</version>
     </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>

Modified: cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java?view=diff&rev=506384&r1=506383&r2=506384
==============================================================================
--- cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java (original)
+++ cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/HttpProxyGenerator.java Mon Feb 12 01:17:42 2007
@@ -37,6 +37,7 @@
 import org.apache.commons.httpclient.HttpState;
 import org.apache.commons.httpclient.HttpURL;
 import org.apache.commons.httpclient.HostConfiguration;
+import org.apache.commons.httpclient.HttpVersion;
 import org.apache.commons.httpclient.NameValuePair;
 import org.apache.commons.httpclient.URIException;
 import org.apache.commons.httpclient.methods.GetMethod;
@@ -57,16 +58,20 @@
  */
 public class HttpProxyGenerator extends ServiceableGenerator implements Configurable {
 
+    /** The configured method. */
+    private String methodString;
     /** The HTTP method to use at request time. */
-    private HttpMethodBase method = null;
+    private HttpMethodBase method;
     /** The base HTTP URL for requests. */
-    private HttpURL url = null;
+    private HttpURL url;
     /** The list of request parameters for the request */
-    private ArrayList reqParams = null;
+    private ArrayList reqParams;
     /** The list of query parameters for the request */
-    private ArrayList qryParams = null;
+    private ArrayList qryParams;
     /** Wether we want a debug output or not */
     private boolean debug = false;
+    /** The host configuration. */
+    private HostConfiguration hostConfiguration;
 
     /**
      * Default (empty) constructor.
@@ -85,31 +90,25 @@
     public void configure(Configuration configuration)
     throws ConfigurationException {
 
-        /* Setup the HTTP method to use. */
-        String method = configuration.getChild("method").getValue("GET");
-        if ("GET".equalsIgnoreCase(method)) {
-            this.method = new GetMethod();
-        } else if ("POST".equalsIgnoreCase(method)) {
-            this.method = new PostMethod();
-            /* TODO: Is this still needed? Does it refer to a bug in bugzilla?
-             *       At least the handling in httpclient has completely changed.
-             * Work around a bug from the HttpClient library */
-            ((PostMethod) this.method).setRequestBody("");
-        } else {
+        // Setup the HTTP method to use.
+        this.methodString = configuration.getChild("method").getValue("GET");
+        if ( !this.methodString.equalsIgnoreCase("GET") && !this.methodString.equalsIgnoreCase("POST") ) {
             throw new ConfigurationException("Invalid method \"" + method + "\" specified"
                     + " at " + configuration.getChild("method").getLocation());
+            
         }
-
-        /* Create the base URL */
+        // Create the base URL.
         String url = configuration.getChild("url").getValue(null);
         try {
-            if (url != null) this.url = new HttpURL(url);
+            if (url != null) {
+                this.url = new HttpURL(url);
+            }
         } catch (URIException e) {
             throw new ConfigurationException("Cannot process URL \"" + url + "\" specified"
                     + " at " + configuration.getChild("url").getLocation());
         }
 
-        /* Prepare the base request and query parameters */
+        // Prepare the base request and query parameters.
         this.reqParams = this.getParams(configuration.getChildren("param"));
         this.qryParams = this.getParams(configuration.getChildren("query"));
     }
@@ -130,25 +129,30 @@
     public void setup(SourceResolver sourceResolver, Map objectModel,
             String source, Parameters parameters)
     throws ProcessingException, SAXException, IOException {
-        /* Do the usual stuff */
+        // Do the usual stuff
         super.setup(sourceResolver, objectModel, source, parameters);
 
-        /*
-         * Parameter handling: In case the method is a POST method, query
-         * parameters and request parameters will be two different arrays
-         * (one for the body, one for the query string, otherwise it's going
-         * to be the same one, as all parameters are passed on the query string
-         */
+        if ("GET".equalsIgnoreCase(this.methodString)) {
+            this.method = new GetMethod();
+        } else if ("POST".equalsIgnoreCase(this.methodString)) {
+            this.method = new PostMethod();
+        }
+        //
+        // Parameter handling: In case the method is a POST method, query
+        // parameters and request parameters will be two different arrays
+        // (one for the body, one for the query string, otherwise it's going
+        // to be the same one, as all parameters are passed on the query string
+        //
         ArrayList req = new ArrayList();
         ArrayList qry = req;
         if (this.method instanceof PostMethod) qry = new ArrayList();
         req.addAll(this.reqParams);
         qry.addAll(this.qryParams);
 
-        /*
-         * Parameter handling: complete or override the configured parameters with
-         * those specified in the pipeline.
-         */
+        //
+        // Parameter handling: complete or override the configured parameters with
+        // those specified in the pipeline.
+        //
         String names[] = parameters.getNames();
         for (int x = 0; x < names.length; x++) {
             String name = names[x];
@@ -170,7 +174,7 @@
             }
         }
 
-        /* Process the current source URL in relation to the configured one */
+        // Process the current source URL in relation to the configured one
         HttpURL src = (super.source == null ? null : new HttpURL(super.source));
         if (this.url != null) src = (src == null ? this.url : new HttpURL(this.url, src));
         if (src == null) throw new ProcessingException("No URL specified");
@@ -178,14 +182,13 @@
             throw new ProcessingException("Invalid URL \"" + src.toString() + "\"");
         }
 
-        /* Configure the method with the resolved URL */
-        HostConfiguration hc = new HostConfiguration();
-        hc.setHost(src);
-        this.method.setHostConfiguration(hc);
+        // Configure the method with the resolved URL
+        this.hostConfiguration = new HostConfiguration();
+        this.hostConfiguration.setHost(src);
         this.method.setPath(src.getPath());
         this.method.setQueryString(src.getQuery());
 
-        /* And now process the query string (from the parameters above) */
+        // And now process the query string (from the parameters above)
         if (qry.size() > 0) {
             String qs = this.method.getQueryString();
             NameValuePair nvpa[] = new NameValuePair[qry.size()];
@@ -195,14 +198,14 @@
             }
         }
 
-        /* Finally process the body parameters */
+        // Finally process the body parameters
         if ((this.method instanceof PostMethod) && (req.size() > 0)) {
             PostMethod post = (PostMethod) this.method;
             NameValuePair nvpa[] = new NameValuePair[req.size()];
             post.setRequestBody((NameValuePair []) req.toArray(nvpa));
         }
 
-        /* Check the debugging flag */
+        // Check the debugging flag
         this.debug = parameters.getParameterAsBoolean("debug", false);
     }
 
@@ -215,14 +218,13 @@
      * @see #generate()
      */
     public void recycle() {
-        /* Recycle the method */
-        this.method.recycle();
-        /* TODO: Is this still needed? Does it refer to a bug in bugzilla?
-         *       At least the handling in httpclient has completely changed.
-         *  Work around a bug from the HttpClient library */
-        if (this.method instanceof PostMethod) ((PostMethod) this.method).setRequestBody("");
+        this.hostConfiguration = null;
+        if ( this.method != null ) {
+            this.method.releaseConnection();
+            this.method = null;
+        }
 
-        /* Clean up our parent */
+        // Clean up our parent.
         super.recycle();
     }
 
@@ -236,14 +238,14 @@
      */
     public void generate()
     throws ResourceNotFoundException, ProcessingException, SAXException, IOException {
-        /* Do the boring stuff in case we have to do a debug output (blablabla) */
+        // Do the boring stuff in case we have to do a debug output
         if (this.debug) {
             this.generateDebugOutput();
             return;
         }
 
-        /* Call up the remote HTTP server */
-        HttpConnection connection = new HttpConnection(this.method.getHostConfiguration());
+        // Call up the remote HTTP server
+        HttpConnection connection = new HttpConnection(this.hostConfiguration);
         HttpState state = new HttpState();
         this.method.setFollowRedirects(true);
         int status = this.method.execute(state, connection);
@@ -256,7 +258,7 @@
         }
         InputStream response = this.method.getResponseBodyAsStream();
 
-        /* Let's try to set up our InputSource from the response output stream and to parse it */
+        // Let's try to set up our InputSource from the response output stream and to parse it
         SAXParser parser = null;
         try {
             InputSource inputSource = new InputSource(response);
@@ -285,28 +287,15 @@
         attributes.addAttribute("", "method", "method", "CDATA", this.method.getName());
         attributes.addAttribute("", "url", "url", "CDATA", this.method.getURI().toString());
         attributes.addAttribute("", "protocol", "protocol", "CDATA",
-                (this.method.isHttp11() ? "HTTP/1.1" : "HTTP/1.0"));
+                (method.getParams().getVersion().compareTo(HttpVersion.HTTP_1_1) == 0 ? "HTTP/1.1" : "HTTP/1.0"));
         super.xmlConsumer.startElement("", "request", "request", attributes);
 
         if (this.method instanceof PostMethod) {
-            String body = ((PostMethod) this.method).getRequestBodyAsString();
-
             attributes.clear();
             attributes.addAttribute("", "name", "name", "CDATA", "Content-Type");
             attributes.addAttribute("", "value", "value", "CDATA", "application/x-www-form-urlencoded");
             super.xmlConsumer.startElement("", "header", "header", attributes);
             super.xmlConsumer.endElement("", "header", "header");
-
-            attributes.clear();
-            attributes.addAttribute("", "name", "name", "CDATA", "Content-Length");
-            attributes.addAttribute("", "value", "value", "CDATA", Integer.toString(body.length()));
-            super.xmlConsumer.startElement("", "header", "header", attributes);
-            super.xmlConsumer.endElement("", "header", "header");
-
-            attributes.clear();
-            super.xmlConsumer.startElement("", "body", "body", attributes);
-            super.xmlConsumer.characters(body.toCharArray(), 0, body.length());
-            super.xmlConsumer.endElement("", "body", "body");
         }
 
         super.xmlConsumer.endElement("", "request", "request");

Modified: cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java?view=diff&rev=506384&r1=506383&r2=506384
==============================================================================
--- cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java (original)
+++ cocoon/trunk/blocks/cocoon-proxy/cocoon-proxy-impl/src/main/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java Mon Feb 12 01:17:42 2007
@@ -28,7 +28,6 @@
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.URI;
 import org.apache.commons.httpclient.URIException;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.PostMethod;
@@ -42,6 +41,8 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Map;
@@ -225,7 +226,11 @@
              * connection regardless of whether the server returned an error or not.
              * {@link http://jakarta.apache.org/commons/httpclient/tutorial.html}
              */
-            response = method.getResponseBody();
+            try {
+                response = method.getResponseBody();
+            } catch (IOException e) {
+                // ignore
+            }
             method.releaseConnection();
         }
 
@@ -236,7 +241,7 @@
      * Create one per client session. 
      */
     protected HttpClient getHttpClient() throws ProcessingException {
-        URI uri = null;
+        URL uri = null;
         String host = null;
         Request request = ObjectModelHelper.getRequest(objectModel);
         Session session = request.getSession(true);
@@ -258,10 +263,10 @@
              * here need to be resolved before being set in the HostConfiguration?
              */
             try {
-                uri = new URI(this.source);
+                uri = new URL(this.source);
                 host = uri.getHost();
-                config.setHost(uri);
-            } catch (URIException ex) {
+                config.setHost(uri.getHost());
+            } catch (MalformedURLException ex) {
                 throw new ProcessingException("URI format error: " + ex, ex);
             }