[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