org.jboss.resteasy.plugins.server.servlet.ServletUtil Maven / Gradle / Ivy
package org.jboss.resteasy.plugins.server.servlet;
import org.jboss.resteasy.core.Headers;
import org.jboss.resteasy.specimpl.ResteasyHttpHeaders;
import org.jboss.resteasy.spi.ResteasyUriInfo;
import org.jboss.resteasy.util.HttpHeaderNames;
import org.jboss.resteasy.util.MediaTypeHelper;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Bill Burke
* @version $Revision: 1 $
*/
public class ServletUtil
{
public static ResteasyUriInfo extractUriInfo(HttpServletRequest request, String servletPrefix)
{
String contextPath = request.getContextPath();
if (servletPrefix != null && servletPrefix.length() > 0 && !servletPrefix.equals("/"))
{
if (!contextPath.endsWith("/") && !servletPrefix.startsWith("/"))
contextPath += "/";
contextPath += servletPrefix;
}
return new ResteasyUriInfo(request.getRequestURL().toString(), request.getQueryString(), contextPath);
}
public static ResteasyHttpHeaders extractHttpHeaders(HttpServletRequest request)
{
MultivaluedMap requestHeaders = extractRequestHeaders(request);
ResteasyHttpHeaders headers = new ResteasyHttpHeaders(requestHeaders);
String contentType = request.getContentType();
if (contentType != null) headers.getMutableHeaders().putSingle(HttpHeaders.CONTENT_TYPE, contentType);
Map cookies = extractCookies(request);
headers.setCookies(cookies);
// test parsing should throw an exception on error
headers.testParsing();
return headers;
}
static Map extractCookies(HttpServletRequest request)
{
Map cookies = new HashMap();
if (request.getCookies() != null)
{
for (javax.servlet.http.Cookie cookie : request.getCookies())
{
cookies.put(cookie.getName(), new Cookie(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain(), cookie.getVersion()));
}
}
return cookies;
}
public static List extractAccepts(MultivaluedMap requestHeaders)
{
List acceptableMediaTypes = new ArrayList();
List accepts = requestHeaders.get(HttpHeaderNames.ACCEPT);
if (accepts == null) return acceptableMediaTypes;
for (String accept : accepts)
{
acceptableMediaTypes.addAll(MediaTypeHelper.parseHeader(accept));
}
return acceptableMediaTypes;
}
public static List extractLanguages(MultivaluedMap requestHeaders)
{
List acceptable = new ArrayList();
List accepts = requestHeaders.get(HttpHeaderNames.ACCEPT_LANGUAGE);
if (accepts == null) return acceptable;
for (String accept : accepts)
{
String[] splits = accept.split(",");
for (String split : splits) acceptable.add(split.trim());
}
return acceptable;
}
@SuppressWarnings("unchecked")
public static MultivaluedMap extractRequestHeaders(HttpServletRequest request)
{
Headers requestHeaders = new Headers();
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements())
{
String headerName = headerNames.nextElement();
Enumeration headerValues = request.getHeaders(headerName);
while (headerValues.hasMoreElements())
{
String headerValue = headerValues.nextElement();
requestHeaders.add(headerName, headerValue);
}
}
return requestHeaders;
}
}