diff --git a/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HtmlUnitInprocRequest.java b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HtmlUnitInprocRequest.java
new file mode 100644
index 0000000..57a1e98
--- /dev/null
+++ b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HtmlUnitInprocRequest.java
@@ -0,0 +1,57 @@
+package com.thoughtworks.inproctester.htmlunit;
+
+import com.gargoylesoftware.htmlunit.WebRequest;
+import com.thoughtworks.inproctester.jetty.InProcRequest;
+import com.thoughtworks.inproctester.jetty.UrlHelper;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+class HtmlUnitInProcRequest implements InProcRequest {
+ private WebRequest request;
+ private Map headers = new HashMap();
+
+ public HtmlUnitInProcRequest(WebRequest request) {
+ this.request = request;
+ headers.put("Host", UrlHelper.getRequestHost(request.getUrl()));
+ headers.put("Content-Type", request.getEncodingType().getName() + ";" + request.getCharset());
+ headers.putAll(request.getAdditionalHeaders());
+ }
+
+ @Override
+ public String getHttpMethod() {
+ return request.getHttpMethod().name();
+ }
+
+ @Override
+ public URI getUri() {
+ try {
+ return request.getUrl().toURI();
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public String getFormData() {
+ return new UrlEncodedContent(request.getRequestParameters()).generateFormDataAsString();
+ }
+
+ @Override
+ public String getHeader(String headerName) {
+ return headers.get(headerName);
+ }
+
+ @Override
+ public Set getHeaderNames() {
+ return headers.keySet();
+ }
+
+ @Override
+ public void addHeader(String headerName, String header) {
+ headers.put(headerName, header);
+ }
+}
diff --git a/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HttpTesterAdaptor.java b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HttpTesterAdaptor.java
index b4a9523..c301e23 100644
--- a/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HttpTesterAdaptor.java
+++ b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/HttpTesterAdaptor.java
@@ -14,18 +14,14 @@
*/
package com.thoughtworks.inproctester.htmlunit;
-import com.gargoylesoftware.htmlunit.FormEncodingType;
-import com.gargoylesoftware.htmlunit.HttpMethod;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponseData;
import com.gargoylesoftware.htmlunit.util.NameValuePair;
-import com.thoughtworks.inproctester.jetty.UrlHelper;
+import com.thoughtworks.inproctester.jetty.InProcRequest;
import org.eclipse.jetty.testing.HttpTester;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
+import java.util.*;
public class HttpTesterAdaptor {
static WebResponseData adaptResponse(HttpTester httpTester) throws IOException {
@@ -44,18 +40,8 @@ static WebResponseData adaptResponse(HttpTester httpTester) throws IOException {
return new WebResponseData(content.getBytes(httpTester.getCharacterEncoding()), httpTester.getStatus(), httpTester.getReason(), headers);
}
- static HttpTester adaptRequest(WebRequest request) {
- HttpTester httpTester = new HttpTester();
- httpTester.setMethod(request.getHttpMethod().name());
- httpTester.setURI(UrlHelper.getRequestPath(request.getUrl()));
- httpTester.addHeader("Host", UrlHelper.getRequestHost(request.getUrl()));
-
- if (request.getHttpMethod() == HttpMethod.POST) {
- httpTester.setHeader("Content-Type", request.getEncodingType().getName());
- if (request.getEncodingType() == FormEncodingType.URL_ENCODED) {
- httpTester.setContent(new UrlEncodedContent(request.getRequestParameters()).generateFormDataAsString());
- }
- }
- return httpTester;
+ static InProcRequest adaptRequest(WebRequest request) {
+ return new HtmlUnitInProcRequest(request);
}
+
}
diff --git a/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/InProcessWebConnection.java b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/InProcessWebConnection.java
index ec60b41..c165108 100644
--- a/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/InProcessWebConnection.java
+++ b/inproctester-htmlunit/src/main/java/com/thoughtworks/inproctester/htmlunit/InProcessWebConnection.java
@@ -17,6 +17,7 @@
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.util.Cookie;
import com.thoughtworks.inproctester.jetty.InProcConnection;
+import com.thoughtworks.inproctester.jetty.InProcRequest;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jetty.testing.HttpTester;
@@ -42,14 +43,14 @@ public WebResponse getResponse(WebRequest webRequest) throws IOException {
return new WebResponse(adaptResponse(processTesterRequest(adaptRequest(webRequest))), webRequest, 0);
}
- private HttpTester processTesterRequest(HttpTester testerRequest) throws IOException {
- addCookiesToRequest(testerRequest);
- HttpTester testerResponse = processRequest(inProcConnection, testerRequest);
- storeCookiesFromResponse(testerRequest, testerResponse);
+ private HttpTester processTesterRequest(InProcRequest inProcRequest) throws IOException {
+ addCookiesToRequest(inProcRequest);
+ HttpTester testerResponse = processRequest(inProcConnection, inProcRequest);
+ storeCookiesFromResponse(inProcRequest, testerResponse);
return testerResponse;
}
- private void storeCookiesFromResponse(HttpTester testerRequest, HttpTester testerResponse) {
+ private void storeCookiesFromResponse(InProcRequest testerRequest, HttpTester testerResponse) {
String requestHostName = testerRequest.getHeader("Host").split(":", 1)[0];
Enumeration headerNames = testerResponse.getHeaderNames();
while (headerNames.hasMoreElements()) {
@@ -80,7 +81,7 @@ private void removeCookie(CookieManager cookieManager, String cookieName) {
}
}
- private void addCookiesToRequest(HttpTester httpTester) {
+ private void addCookiesToRequest(InProcRequest httpTester) {
Set cookies = cookieManager.getCookies();
if (!cookies.isEmpty()) {
List cookieStrings = new ArrayList();
diff --git a/inproctester-jersey/src/main/java/com/thoughtworks/inproctester/jersey/InPocessClientHandler.java b/inproctester-jersey/src/main/java/com/thoughtworks/inproctester/jersey/InPocessClientHandler.java
index 694c412..d617bdc 100644
--- a/inproctester-jersey/src/main/java/com/thoughtworks/inproctester/jersey/InPocessClientHandler.java
+++ b/inproctester-jersey/src/main/java/com/thoughtworks/inproctester/jersey/InPocessClientHandler.java
@@ -14,22 +14,19 @@
*/
package com.thoughtworks.inproctester.jersey;
-import com.sun.jersey.api.client.ClientHandlerException;
-import com.sun.jersey.api.client.ClientRequest;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.TerminatingClientHandler;
+import com.sun.jersey.api.client.*;
import com.sun.jersey.api.container.ContainerException;
import com.sun.jersey.core.header.InBoundHeaders;
import com.thoughtworks.inproctester.jetty.HttpAppTester;
import com.thoughtworks.inproctester.jetty.HttpAppTesterExtensions;
+import com.thoughtworks.inproctester.jetty.InProcRequest;
import com.thoughtworks.inproctester.jetty.UrlHelper;
import org.eclipse.jetty.testing.HttpTester;
import javax.ws.rs.core.MultivaluedMap;
import java.io.*;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
+import java.net.URI;
+import java.util.*;
public class InPocessClientHandler extends TerminatingClientHandler {
private final HttpAppTester w;
@@ -38,20 +35,8 @@ public InPocessClientHandler(HttpAppTester appTester) {
this.w = appTester;
}
-
public ClientResponse handle(ClientRequest clientRequest) {
- byte[] requestEntity = writeRequestEntity(clientRequest);
-
- final HttpTester cRequest = new HttpTester();
- cRequest.setMethod(clientRequest.getMethod());
- cRequest.setURI(UrlHelper.getRequestPath(clientRequest.getURI()));
- cRequest.addHeader("Host", UrlHelper.getRequestHost(clientRequest.getURI()));
- try {
- cRequest.setContent(new String(requestEntity, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- throw new ContainerException(e);
- }
- writeOutBoundHeaders(clientRequest.getHeaders(), cRequest);
+ final InProcRequest cRequest = new JerseyClientInprocRequest(clientRequest);
HttpTester cResponse;
try {
@@ -80,14 +65,6 @@ private byte[] getContent(HttpTester cResponse) throws UnsupportedEncodingExcept
return contentString.getBytes(cResponse.getCharacterEncoding());
}
- private void writeOutBoundHeaders(MultivaluedMap headers, HttpTester uc) {
- for (Map.Entry> e : headers.entrySet()) {
- for (Object v : e.getValue()) {
- uc.addHeader(e.getKey(), ClientRequest.getHeaderValue(v));
- }
- }
- }
-
private InBoundHeaders getInBoundHeaders(HttpTester httpTester) {
InBoundHeaders headers = new InBoundHeaders();
Enumeration headerNames = httpTester.getHeaderNames();
@@ -102,22 +79,80 @@ private InBoundHeaders getInBoundHeaders(HttpTester httpTester) {
return headers;
}
- private byte[] writeRequestEntity(ClientRequest ro) {
- try {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- writeRequestEntity(ro, new RequestEntityWriterListener() {
+ class JerseyClientInprocRequest implements InProcRequest {
+ private Map headers = new HashMap();
+ private ClientRequest clientRequest;
- public void onRequestEntitySize(long size) throws IOException {
- }
+ public JerseyClientInprocRequest(ClientRequest clientRequest) {
+ this.clientRequest = clientRequest;
+ headers.put("Host", UrlHelper.getRequestHost(clientRequest.getURI()));
+ headers.putAll(asMap(clientRequest.getHeaders()));
+ }
+
+
+ @Override
+ public String getHttpMethod() {
+ return clientRequest.getMethod();
+ }
+
+ @Override
+ public URI getUri() {
+ return clientRequest.getURI();
+ }
+
+ @Override
+ public String getFormData() {
+ byte[] requestEntity = writeRequestEntity(clientRequest);
+
+ try {
+ return new String(requestEntity, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new ContainerException(e);
+ }
+ }
+
+ @Override
+ public String getHeader(String headerName) {
+ return headers.get(headerName);
+ }
+
+ @Override
+ public Set getHeaderNames() {
+ return headers.keySet();
+ }
- public OutputStream onGetOutputStream() throws IOException {
- return baos;
+ @Override
+ public void addHeader(String headerName, String header) {
+ headers.put(headerName, header);
+ }
+
+ private Map asMap(MultivaluedMap headers) {
+ HashMap map = new HashMap();
+ for (Map.Entry> e : headers.entrySet()) {
+ for (Object v : e.getValue()) {
+ map.put(e.getKey(), ClientRequest.getHeaderValue(v));
}
- });
- return baos.toByteArray();
- } catch (IOException ex) {
- throw new ClientHandlerException(ex);
+ }
+ return map;
}
- }
+ private byte[] writeRequestEntity(ClientRequest ro) {
+ try {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ InPocessClientHandler.this.writeRequestEntity(ro, new RequestWriter.RequestEntityWriterListener() {
+
+ public void onRequestEntitySize(long size) throws IOException {
+ }
+
+ public OutputStream onGetOutputStream() throws IOException {
+ return baos;
+ }
+ });
+ return baos.toByteArray();
+ } catch (IOException ex) {
+ throw new ClientHandlerException(ex);
+ }
+ }
+
+ }
}
diff --git a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTester.java b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTester.java
index baeae97..caf42c2 100644
--- a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTester.java
+++ b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTester.java
@@ -14,14 +14,12 @@
*/
package com.thoughtworks.inproctester.jetty;
-import org.eclipse.jetty.io.ByteArrayBuffer;
import org.eclipse.jetty.server.LocalConnector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.webapp.WebAppContext;
import javax.servlet.Filter;
@@ -129,7 +127,7 @@ public void stop() {
}
@Override
- public String getResponses(String rawRequests) {
- return localConnection.getResponses(rawRequests);
+ public String getResponses(InProcRequest inProcRequest) {
+ return localConnection.getResponses(inProcRequest);
}
}
diff --git a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTesterExtensions.java b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTesterExtensions.java
index c8c4385..1242bda 100644
--- a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTesterExtensions.java
+++ b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/HttpAppTesterExtensions.java
@@ -19,8 +19,8 @@
import java.io.IOException;
public class HttpAppTesterExtensions {
- public static HttpTester processRequest(InProcConnection inProcConnection, HttpTester testerRequest) throws IOException {
- String rawResponse = inProcConnection.getResponses(testerRequest.generate());
+ public static HttpTester processRequest(InProcConnection inProcConnection, InProcRequest testerRequest) throws IOException {
+ String rawResponse = inProcConnection.getResponses(testerRequest);
HttpTester testerResponse = new HttpTester();
testerResponse.parse(rawResponse);
return testerResponse;
diff --git a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcConnection.java b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcConnection.java
index e513dba..18b2c97 100644
--- a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcConnection.java
+++ b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcConnection.java
@@ -15,5 +15,5 @@
package com.thoughtworks.inproctester.jetty;
public interface InProcConnection {
- String getResponses(String rawRequests);
+ String getResponses(InProcRequest rawRequests);
}
diff --git a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcRequest.java b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcRequest.java
new file mode 100644
index 0000000..14d3c9b
--- /dev/null
+++ b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/InProcRequest.java
@@ -0,0 +1,18 @@
+package com.thoughtworks.inproctester.jetty;
+
+import java.net.URI;
+import java.util.Set;
+
+public interface InProcRequest {
+ String getHttpMethod();
+
+ URI getUri();
+
+ String getFormData();
+
+ String getHeader(String headerName);
+
+ Set getHeaderNames();
+
+ void addHeader(String headerName, String header);
+}
diff --git a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/LocalConnection.java b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/LocalConnection.java
index 49b3cd9..8441be5 100644
--- a/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/LocalConnection.java
+++ b/inproctester-jetty/src/main/java/com/thoughtworks/inproctester/jetty/LocalConnection.java
@@ -16,18 +16,21 @@
import org.eclipse.jetty.io.ByteArrayBuffer;
import org.eclipse.jetty.server.LocalConnector;
+import org.eclipse.jetty.testing.HttpTester;
import org.eclipse.jetty.util.StringUtil;
+import java.io.IOException;
+
public class LocalConnection implements InProcConnection {
- private LocalConnector connector;
+ private LocalConnector connector;
+
+ public LocalConnection(LocalConnector connector) {
+ this.connector = connector;
+ }
- public LocalConnection(LocalConnector connector) {
- this.connector = connector;
- }
- @Override
- public String getResponses(String rawRequests) {
+ private String getResponses(String rawRequests) {
try {
ByteArrayBuffer result = connector.getResponses(new ByteArrayBuffer(rawRequests, StringUtil.__UTF8), false);
return result == null ? null : result.toString(StringUtil.__UTF8);
@@ -38,4 +41,23 @@ public String getResponses(String rawRequests) {
}
}
+ @Override
+ public String getResponses(InProcRequest request) {
+ HttpTester httpTester = new HttpTester();
+ httpTester.setMethod(request.getHttpMethod());
+ httpTester.setURI(UrlHelper.getRequestPath(request.getUri()));
+ for (String headerName : request.getHeaderNames()) {
+ httpTester.addHeader(headerName, request.getHeader(headerName));
+ }
+
+ if ("POST".equals(request.getHttpMethod())) {
+ httpTester.setContent(request.getFormData());
+ }
+
+ try {
+ return getResponses(httpTester.generate());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
diff --git a/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/InProcessClientExecutor.java b/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/InProcessClientExecutor.java
index bdabbb5..73a3ff2 100644
--- a/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/InProcessClientExecutor.java
+++ b/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/InProcessClientExecutor.java
@@ -2,7 +2,7 @@
import com.thoughtworks.inproctester.jetty.HttpAppTester;
import com.thoughtworks.inproctester.jetty.HttpAppTesterExtensions;
-import com.thoughtworks.inproctester.jetty.UrlHelper;
+import com.thoughtworks.inproctester.jetty.InProcRequest;
import org.eclipse.jetty.http.HttpException;
import org.eclipse.jetty.testing.HttpTester;
import org.jboss.resteasy.client.ClientExecutor;
@@ -14,12 +14,14 @@
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriBuilder;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
-import java.util.Map;
public class InProcessClientExecutor implements ClientExecutor {
@@ -47,15 +49,9 @@ public ClientRequest createRequest(UriBuilder uriBuilder) {
public ClientResponse execute(ClientRequest clientRequest) throws Exception {
- final HttpTester testerRequest = new HttpTester();
- testerRequest.setMethod(clientRequest.getHttpMethod());
- URI requestUri = new URI(clientRequest.getUri());
- testerRequest.setURI(UrlHelper.getRequestPath(requestUri));
- testerRequest.addHeader("Host", UrlHelper.getRequestHost(requestUri));
- loadContent(clientRequest, testerRequest);
- writeOutBoundHeaders(clientRequest.getHeaders(), testerRequest);
+ final InProcRequest testerRequest = new RestEasyClientInProcRequest(clientRequest);
- final HttpTester testerResponse = HttpAppTesterExtensions.processRequest(routeToTesterApplication(requestUri), testerRequest);
+ final HttpTester testerResponse = HttpAppTesterExtensions.processRequest(routeToTesterApplication(testerRequest.getUri()), testerRequest);
BaseClientResponse> clientResponse = new BaseClientResponse(new BaseClientResponse.BaseClientResponseStreamFactory() {
InputStream stream;
@@ -90,23 +86,6 @@ private HttpAppTester routeToTesterApplication(URI requestUri) throws HttpExcept
throw new HttpException(404, "Unknown Route: " + requestUri);
}
- private void loadContent(ClientRequest clientRequest, HttpTester testerRequest) throws IOException {
-
- if (clientRequest.getBody() != null && !clientRequest.getFormParameters().isEmpty())
- throw new RuntimeException("You cannot send both form parameters and an entity body");
-
- if (!clientRequest.getFormParameters().isEmpty()) {
- throw new UnsupportedOperationException("InProcessClientExecutpr doesn't support form parameters yet");
- } else if (clientRequest.getBody() != null) {
- if ("GET".equals(clientRequest.getHttpMethod()))
- throw new RuntimeException("A GET request cannot have a body.");
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- clientRequest.writeRequestBody(clientRequest.getHeadersAsObjects(), baos);
- byte[] requestEntity = writeRequestEntity(clientRequest);
- testerRequest.setHeader("Content-type", clientRequest.getBodyContentType().toString());
- testerRequest.setContent(new String(requestEntity, "UTF-8"));
- }
- }
private byte[] getContent(HttpTester cResponse) throws UnsupportedEncodingException {
String contentString = cResponse.getContent();
@@ -129,19 +108,5 @@ private MultivaluedMap extractHeaders(HttpTester httpTester) {
return headers;
}
- private void writeOutBoundHeaders(MultivaluedMap headers, HttpTester uc) {
- for (Map.Entry> header : headers.entrySet()) {
- for (String v : header.getValue()) {
- uc.addHeader(header.getKey(), v);
- }
- }
- }
-
-
- private byte[] writeRequestEntity(ClientRequest ro) throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ro.writeRequestBody(ro.getHeadersAsObjects(), baos);
- return baos.toByteArray();
- }
}
diff --git a/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/RestEasyClientInProcRequest.java b/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/RestEasyClientInProcRequest.java
new file mode 100644
index 0000000..2589e82
--- /dev/null
+++ b/inproctester-resteasy/src/main/java/com/thoughtworks/inproctester/resteasy/RestEasyClientInProcRequest.java
@@ -0,0 +1,105 @@
+package com.thoughtworks.inproctester.resteasy;
+
+import com.thoughtworks.inproctester.jetty.InProcRequest;
+import com.thoughtworks.inproctester.jetty.UrlHelper;
+import org.jboss.resteasy.client.ClientRequest;
+
+import javax.ws.rs.core.MultivaluedMap;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class RestEasyClientInProcRequest implements InProcRequest {
+ private ClientRequest clientRequest;
+ private Map headers = new HashMap();
+
+ public RestEasyClientInProcRequest(ClientRequest clientRequest) {
+ this.clientRequest = clientRequest;
+ try {
+ headers.put("Host", UrlHelper.getRequestHost(new URI(clientRequest.getUri())));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ headers.put("Content-type", clientRequest.getBodyContentType().toString());
+ headers.putAll(asMap(clientRequest.getHeaders()));
+ }
+
+ @Override
+ public String getHttpMethod() {
+ return clientRequest.getHttpMethod();
+ }
+
+ @Override
+ public URI getUri() {
+ try {
+ return new URI(clientRequest.getUri());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public String getFormData() {
+ try {
+ return new String(writeRequestEntity(clientRequest), "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public String getHeader(String headerName) {
+ return headers.get(headerName);
+ }
+
+ @Override
+ public Set getHeaderNames() {
+ return headers.keySet();
+ }
+
+ @Override
+ public void addHeader(String headerName, String header) {
+ headers.put(headerName, header);
+ }
+
+ private Map asMap(MultivaluedMap headers) {
+ HashMap map = new HashMap();
+ for (Map.Entry> header : headers.entrySet()) {
+ for (String v : header.getValue()) {
+ map.put(header.getKey(), v);
+ }
+ }
+ return map;
+ }
+
+
+ private byte[] writeRequestEntity(ClientRequest clientRequest) {
+
+ if (clientRequest.getBody() != null && !clientRequest.getFormParameters().isEmpty())
+ throw new RuntimeException("You cannot send both form parameters and an entity body");
+
+ if (!clientRequest.getFormParameters().isEmpty()) {
+ throw new UnsupportedOperationException("InProcessClientExecutpr doesn't support form parameters yet");
+ }
+
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ if (clientRequest.getBody() != null) {
+ if ("GET".equals(clientRequest.getHttpMethod()))
+ throw new RuntimeException("A GET request cannot have a body.");
+
+ try {
+ clientRequest.writeRequestBody(clientRequest.getHeadersAsObjects(), baos);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return baos.toByteArray();
+ }
+
+}