mirror of https://github.com/apache/jclouds.git
Issue 52: worked around host header issue in gae
git-svn-id: http://jclouds.googlecode.com/svn/trunk@1088 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
498c1dca20
commit
bf3ba3e855
|
@ -50,6 +50,7 @@ import com.google.appengine.api.urlfetch.HTTPResponse;
|
|||
import com.google.appengine.api.urlfetch.URLFetchService;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.name.Named;
|
||||
|
||||
/**
|
||||
* Google App Engine version of {@link HttpFutureCommandClient}
|
||||
|
@ -58,12 +59,17 @@ import com.google.inject.Inject;
|
|||
*/
|
||||
public class URLFetchServiceClient extends BaseHttpFutureCommandClient {
|
||||
private final URLFetchService urlFetchService;
|
||||
private final int port;
|
||||
private final boolean isSecure;
|
||||
|
||||
@Inject
|
||||
public URLFetchServiceClient(URL target, URLFetchService urlFetchService)
|
||||
throws MalformedURLException {
|
||||
public URLFetchServiceClient(@Named(HttpConstants.PROPERTY_HTTP_PORT) int port,
|
||||
@Named(HttpConstants.PROPERTY_HTTP_SECURE) boolean isSecure, URL target,
|
||||
URLFetchService urlFetchService) throws MalformedURLException {
|
||||
super(target);
|
||||
this.urlFetchService = urlFetchService;
|
||||
this.port = port;
|
||||
this.isSecure = isSecure;
|
||||
}
|
||||
|
||||
public void submit(HttpFutureCommand<?> command) {
|
||||
|
@ -74,13 +80,6 @@ public class URLFetchServiceClient extends BaseHttpFutureCommandClient {
|
|||
for (HttpRequestFilter filter : requestFilters) {
|
||||
filter.filter(request);
|
||||
}
|
||||
String hostHeader = request.getFirstHeaderOrNull(HttpConstants.HOST);
|
||||
if (hostHeader != null) {
|
||||
logger
|
||||
.warn(
|
||||
"Note that as of GAE SDK version 1.2.1, host headers are stripped. you passed %1$s",
|
||||
hostHeader);
|
||||
}
|
||||
HttpResponse response = null;
|
||||
for (;;) {
|
||||
logger.trace("%1$s - converting request %2$s", target, request);
|
||||
|
@ -157,12 +156,25 @@ public class URLFetchServiceClient extends BaseHttpFutureCommandClient {
|
|||
|
||||
@VisibleForTesting
|
||||
HTTPRequest convert(HttpRequest request) throws IOException {
|
||||
URL url = new URL(target, request.getUri());
|
||||
String hostHeader = request.getFirstHeaderOrNull(HttpConstants.HOST);
|
||||
URL url;
|
||||
// As host headers are not supported in GAE/J v1.2.1, we'll change the
|
||||
// hostname of the destination to the same value as the host header
|
||||
if (hostHeader != null) {
|
||||
url = new URL(new URL(isSecure ? "https" : "http", hostHeader, port, "/"), request
|
||||
.getUri());
|
||||
} else {
|
||||
url = new URL(target, request.getUri());
|
||||
}
|
||||
HTTPRequest gaeRequest = new HTTPRequest(url, HTTPMethod.valueOf(request.getMethod()),
|
||||
disallowTruncate().doNotFollowRedirects());
|
||||
for (String header : request.getHeaders().keySet()) {
|
||||
for (String value : request.getHeaders().get(header))
|
||||
gaeRequest.addHeader(new HTTPHeader(header, value));
|
||||
// GAE/J v1.2.1 re-writes the host header, so we'll skip it.
|
||||
if (!header.equals(HttpConstants.HOST)) {
|
||||
for (String value : request.getHeaders().get(header)) {
|
||||
gaeRequest.addHeader(new HTTPHeader(header, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (request.getPayload() != null) {
|
||||
changeRequestContentToBytes(request);
|
||||
|
|
|
@ -63,7 +63,7 @@ public class URLFetchServiceClientTest {
|
|||
@BeforeTest
|
||||
void setupClient() throws MalformedURLException {
|
||||
url = new URL("http://localhost:80");
|
||||
client = new URLFetchServiceClient(url, createNiceMock(URLFetchService.class));
|
||||
client = new URLFetchServiceClient(80, false, url, createNiceMock(URLFetchService.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue