[jboss-svn-commits] JBL Code SVN: r37347 - in labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb: http/configurators and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 3 12:42:26 EDT 2011


Author: tcunning
Date: 2011-08-03 12:42:26 -0400 (Wed, 03 Aug 2011)
New Revision: 37347

Modified:
   labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java
   labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/http/configurators/HttpProtocol.java
Log:
JBESB-3646
Change the HTTPProtocol configurator and the HttpRouter so they report
the host to the httpclient correctly.    Took changes over from CP05 in
order to do this.


Modified: labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java
===================================================================
--- labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java	2011-08-03 16:20:57 UTC (rev 37346)
+++ labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java	2011-08-03 16:42:26 UTC (rev 37347)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.esb.actions.routing.http;
 
+import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethodBase;
 import org.apache.commons.httpclient.HttpStatus;
@@ -57,6 +58,7 @@
     private ConfigTree config;
     private Properties httpClientProps = new Properties();
     private HttpClient httpclient;
+    private HostConfiguration hostconfig;
     private URL endpointUrl;
     private String method;
     private HttpMethodFactory methodFactory;
@@ -79,6 +81,12 @@
         // to the HttpClientFacatory...
         extractHttpClientProps(config);
         httpclient = HttpClientFactory.createHttpClient(httpClientProps);
+        
+        // JBESB-3021: we need to hold onto the configured HostConfiguration then replace it with a dummy instance because
+        // executeMethod overrides the Protocol on us with one from a static (yuck!) map if the instances are the same!
+        hostconfig = httpclient.getHostConfiguration();
+
+        
         method = config.getRequiredAttribute("method");
         
         responseType = ResponseType.valueOf(config.getAttribute("responseType", ResponseType.STRING.toString()));
@@ -98,7 +106,8 @@
             try {
                 setRequestHeaders(method, message);
                 
-                int responseCode = httpclient.executeMethod(method);
+                // JBESB-3021: use the hostconfig with the appropriate Protocol
+                int responseCode = httpclient.executeMethod(hostconfig, method);
                 if(responseCode != HttpStatus.SC_OK) {
                     logger.warn("Received status code '" + responseCode + "' on HTTP " + method + " request to '" + endpointUrl + "'.");
                 }

Modified: labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/http/configurators/HttpProtocol.java
===================================================================
--- labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/http/configurators/HttpProtocol.java	2011-08-03 16:20:57 UTC (rev 37346)
+++ labs/jbossesb/tags/GSS-SOA-3222-CP02/product/rosetta/src/org/jboss/soa/esb/http/configurators/HttpProtocol.java	2011-08-03 16:42:26 UTC (rev 37347)
@@ -77,7 +77,7 @@
         URI targetURI = getTargetURI(properties, true);
         String factory;
         String scheme = targetURI.getScheme();
-        final int port ;
+        int port = targetURI.getPort();
         org.apache.commons.httpclient.protocol.Protocol protocol;
         KeyMaterial keyMaterial = null;
         ProtocolSocketFactory socketFactory;
@@ -86,26 +86,34 @@
             // We're only interested in HTTP for this...
             return;
         }
-
-        if(scheme.equals("https")) {
+        
+        final int defaultPort ;
+        boolean secure = "https".equals(scheme);
+        if (secure) {
             factory = properties.getProperty("protocol-socket-factory", StrictSSLProtocolSocketFactory.class.getName());
             keyMaterial = getKeyMaterial(properties);
-            setHttpsProxyHost(httpClient, properties);
-
-            port = 443;
+            defaultPort = 443;
         } else {
             factory = properties.getProperty("protocol-socket-factory", DefaultProtocolSocketFactory.class.getName());
-            setHttpProxyHost(httpClient, properties);
+            defaultPort = 80;
+        }
+        if (port <= 0) {
+            port = defaultPort ;
+        }
 
-            port = 80;
-        }
         assertPropertySetAndNotBlank(factory, "protocol-socket-factory");
         socketFactory = createFactoryClass(factory, keyMaterial, properties);
         
-
         // And finally... configure the host with the protocol....
         protocol = new Protocol(scheme, socketFactory, port);
-        Protocol.registerProtocol(scheme, protocol);
+        // these lines have to happen after registerProtocol, otherwise they pick up the wrong static value
+        if (secure) {
+                setHttpsProxyHost(httpClient, properties);
+        } else {
+                setHttpProxyHost(httpClient, properties);
+        }
+        // Use our own protocol, see JBESB-3021 comments for more information.
+        httpClient.getHostConfiguration().setHost(targetURI.getHost(), port, protocol);
     }
     
     /**
@@ -195,7 +203,7 @@
         ProtocolSocketFactory socketFactory = null;
 
         try {
-            Class factoryClass = ClassUtil.forName(factory, HttpProtocol.class);
+            Class<?> factoryClass = ClassUtil.forName(factory, HttpProtocol.class);
 
             if(ProtocolSocketFactoryBuilder.class.isAssignableFrom(factoryClass)) {
                 try {



More information about the jboss-svn-commits mailing list