You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by vb...@apache.org on 2014/02/13 17:14:19 UTC

git commit: AMBARI-4651. Proxy have some problems with POST, PUT requests when passing xml data in body.(vbrodetskyi)

Updated Branches:
  refs/heads/trunk d377fe218 -> 8f4d05be5


AMBARI-4651. Proxy have some problems with POST,PUT requests when passing xml data in body.(vbrodetskyi)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8f4d05be
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8f4d05be
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8f4d05be

Branch: refs/heads/trunk
Commit: 8f4d05be56ba4c2d47b9c57df5a23c81dfaaf603
Parents: d377fe2
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Thu Feb 13 18:13:36 2014 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Thu Feb 13 18:13:36 2014 +0200

----------------------------------------------------------------------
 .../controller/internal/URLStreamProvider.java  | 12 ++++++------
 .../ambari/server/proxy/ProxyService.java       | 14 +++++++++-----
 .../ambari/server/proxy/ProxyServiceTest.java   | 20 ++++++++++----------
 3 files changed, 25 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8f4d05be/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
index be95221..e1c228d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
@@ -39,6 +39,7 @@ import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManagerFactory;
 
 import org.apache.ambari.server.controller.utilities.StreamProvider;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpStatus;
@@ -115,14 +116,13 @@ public class URLStreamProvider implements StreamProvider {
     }
 
     if (params != null) {
-      String strParams;
-      if (headers != null && headers.containsKey(CONTENT_TYPE_HEADER_PARAMETER) &&
-              headers.get(CONTENT_TYPE_HEADER_PARAMETER).toString().indexOf(APPLICATION_JSON) != -1) {
-        strParams = new Gson().toJson(params);
+      byte[] info;
+      if (params instanceof InputStream) {
+        info = IOUtils.toByteArray((InputStream)params);
       } else {
-        strParams = (String)params;
+        info = ((String)params).getBytes();
       }
-      connection.getOutputStream().write(strParams.getBytes());
+      connection.getOutputStream().write(info);
     }
 
     int statusCode = connection.getResponseCode();

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f4d05be/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java
index 3ed0b8c..0de826a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java
@@ -23,20 +23,22 @@ import org.apache.ambari.server.controller.internal.URLStreamProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import javax.ws.rs.Path;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.core.MediaType;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.util.Map;
@@ -47,7 +49,7 @@ import java.util.HashMap;
 public class ProxyService {
 
   private static final int REPO_URL_CONNECT_TIMEOUT = 3000;
-  private static final int REPO_URL_READ_TIMEOUT = 1000;
+  private static final int REPO_URL_READ_TIMEOUT = 3000;
   private static final int HTTP_ERROR_RANGE_START = 400;
 
   private static final String REQUEST_TYPE_GET = "GET";
@@ -66,12 +68,14 @@ public class ProxyService {
   }
 
   @POST
-  public Response processPostRequestForwarding(Object body, @Context HttpHeaders headers, @Context UriInfo ui) {
+  @Consumes({MediaType.WILDCARD, MediaType.TEXT_PLAIN, MediaType.TEXT_XML, MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
+  public Response processPostRequestForwarding(InputStream body, @Context HttpHeaders headers, @Context UriInfo ui) {
     return handleRequest(REQUEST_TYPE_POST, ui, body, headers);
   }
 
   @PUT
-  public Response processPutRequestForwarding(Object body, @Context HttpHeaders headers, @Context UriInfo ui) {
+  @Consumes({MediaType.WILDCARD, MediaType.TEXT_PLAIN, MediaType.TEXT_XML, MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
+  public Response processPutRequestForwarding(InputStream body, @Context HttpHeaders headers, @Context UriInfo ui) {
     return handleRequest(REQUEST_TYPE_PUT, ui, body, headers);
   }
 
@@ -80,7 +84,7 @@ public class ProxyService {
     return handleRequest(REQUEST_TYPE_DELETE, ui, null, headers);
   }
 
-  private Response handleRequest(String requestType, UriInfo ui, Object body, HttpHeaders headers) {
+  private Response handleRequest(String requestType, UriInfo ui, InputStream body, HttpHeaders headers) {
     URLStreamProvider urlStreamProvider = new URLStreamProvider(REPO_URL_CONNECT_TIMEOUT,
                                                 REPO_URL_READ_TIMEOUT, null, null, null);
     List<String> urlsToForward = ui.getQueryParameters().get(QUERY_PARAMETER_URL);

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f4d05be/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java
index 1a9a176..326eb13 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java
@@ -81,7 +81,7 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(urlConnectionMock.getResponseCode()).andReturn(200);
     expect(urlConnectionMock.getContentType()).andReturn("text/plain");
     expect(urlConnectionMock.getInputStream()).andReturn(is);
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     expect(Response.status(200)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock);
@@ -114,18 +114,18 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams);
     expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
     expect(getHttpHeaders().getMediaType()).andReturn(APPLICATION_FORM_URLENCODED_TYPE);
-    expect(streamProviderMock.processURL("testurl", "POST", "testbody", headerParamsToForward)).andReturn(urlConnectionMock);
+    expect(streamProviderMock.processURL("testurl", "POST", is, headerParamsToForward)).andReturn(urlConnectionMock);
     expect(urlConnectionMock.getResponseCode()).andReturn(200);
     expect(urlConnectionMock.getContentType()).andReturn("text/plain");
     expect(urlConnectionMock.getInputStream()).andReturn(is);
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     expect(Response.status(200)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock);
     expect(responseBuilderMock.build()).andReturn(responseMock);
     PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock);
     replay(getUriInfo(), urlConnectionMock, getHttpHeaders());
-    Response resultForPostRequest = ps.processPostRequestForwarding("testbody", getHttpHeaders(), getUriInfo());
+    Response resultForPostRequest = ps.processPostRequestForwarding(is, getHttpHeaders(), getUriInfo());
     assertSame(resultForPostRequest, responseMock);
   }
 
@@ -151,18 +151,18 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams);
     expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
     expect(getHttpHeaders().getMediaType()).andReturn(APPLICATION_FORM_URLENCODED_TYPE);
-    expect(streamProviderMock.processURL("testurl", "PUT", "testbody", headerParamsToForward)).andReturn(urlConnectionMock);
+    expect(streamProviderMock.processURL("testurl", "PUT", is, headerParamsToForward)).andReturn(urlConnectionMock);
     expect(urlConnectionMock.getResponseCode()).andReturn(200);
     expect(urlConnectionMock.getContentType()).andReturn("text/plain");
     expect(urlConnectionMock.getInputStream()).andReturn(is);
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     expect(Response.status(200)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock);
     expect(responseBuilderMock.build()).andReturn(responseMock);
     PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock);
     replay(getUriInfo(), urlConnectionMock, getHttpHeaders());
-    Response resultForPutRequest = ps.processPutRequestForwarding("testbody", getHttpHeaders(), getUriInfo());
+    Response resultForPutRequest = ps.processPutRequestForwarding(is, getHttpHeaders(), getUriInfo());
     assertSame(resultForPutRequest, responseMock);
   }
 
@@ -191,7 +191,7 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(urlConnectionMock.getResponseCode()).andReturn(200);
     expect(urlConnectionMock.getContentType()).andReturn("text/plain");
     expect(urlConnectionMock.getInputStream()).andReturn(is);
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     expect(Response.status(200)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock);
@@ -221,7 +221,7 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
     expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock);
     expect(urlConnectionMock.getResponseCode()).andReturn(405).times(2);
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     PowerMock.replay(streamProviderMock, URLStreamProvider.class);
     replay(getUriInfo(), urlConnectionMock, getHttpHeaders());
     ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo());
@@ -252,7 +252,7 @@ class ProxyServiceTest extends BaseServiceTest {
     expect(urlConnectionMock.getResponseCode()).andReturn(200);
     expect(urlConnectionMock.getContentType()).andReturn("application/json");
     expect(urlConnectionMock.getInputStream()).andReturn(new ByteArrayInputStream("{ \"test\":\"test\" }".getBytes()));
-    PowerMock.expectNew(URLStreamProvider.class, 3000, 1000, null, null, null).andReturn(streamProviderMock);
+    PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock);
     expect(Response.status(200)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.entity(map)).andReturn(responseBuilderMock);
     expect(responseBuilderMock.type("application/json")).andReturn(responseBuilderMock);