/*
* Copyright (c) 2012 - 2016 Jadler contributors
* This program is made available under the terms of the MIT License.
*/
package net.jadler.stubbing.server.jetty;
import net.jadler.Request;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.Enumeration;
import static org.apache.commons.io.IOUtils.toByteArray;
import static org.apache.commons.lang.StringUtils.isNotBlank;
/**
* Converts {@link javax.servlet.http.HttpServletRequest} to {@link net.jadler.stubbing.Request}.
*/
class RequestUtils {
static Request convert(final HttpServletRequest source) throws IOException {
final Charset encoding = isNotBlank(source.getCharacterEncoding())
? Charset.forName(source.getCharacterEncoding())
: null;
final Request.Builder builder = Request.builder()
.method(source.getMethod())
.requestURI(URI.create(source.getRequestURL() + getQueryString(source)))
.body(toByteArray(source.getInputStream()));
if (encoding != null) {
builder.encoding(encoding);
}
return addHeaders(builder, source).build();
}
private static String getQueryString(final HttpServletRequest source) {
return source.getQueryString() != null ? ("?" + source.getQueryString()) : "";
}
private static Request.Builder addHeaders(final Request.Builder builder, final HttpServletRequest req) {
@SuppressWarnings("unchecked")
Enumeration<String> names = req.getHeaderNames();
while (names.hasMoreElements()) {
final String name = names.nextElement();
@SuppressWarnings("unchecked")
final Enumeration<String> values = req.getHeaders(name);
while (values.hasMoreElements()) {
builder.header(name, values.nextElement());
}
}
return builder;
}
}