package org.jboss.resteasy.plugins.server;
import org.jboss.resteasy.plugins.providers.FormUrlEncodedProvider;
import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages;
import org.jboss.resteasy.specimpl.ResteasyUriInfo;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.util.Encode;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import java.io.IOException;
import java.net.URI;
Helper for creating HttpRequest implementations. The async code is a fake implementation to work with
http engines that don't support async HTTP.
Author: Bill Burke Version: $Revision: 1 $
/**
* Helper for creating HttpRequest implementations. The async code is a fake implementation to work with
* http engines that don't support async HTTP.
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public abstract class BaseHttpRequest implements HttpRequest
{
protected MultivaluedMap<String, String> formParameters;
protected MultivaluedMap<String, String> decodedFormParameters;
protected ResteasyUriInfo uri;
protected BaseHttpRequest(final ResteasyUriInfo uri)
{
this.uri = uri;
}
@Override
public ResteasyUriInfo getUri()
{
return uri;
}
@Override
public boolean formParametersRead() {
return formParameters != null || decodedFormParameters != null;
}
public MultivaluedMap<String, String> getFormParameters()
{
if (formParameters != null) return formParameters;
if (decodedFormParameters != null)
{
formParameters = Encode.encode(decodedFormParameters);
return formParameters;
}
MediaType mt = getHttpHeaders().getMediaType();
if (mt.isCompatible(MediaType.valueOf("application/x-www-form-urlencoded")))
{
try
{
formParameters = FormUrlEncodedProvider.parseForm(getInputStream(), mt.getParameters().get(MediaType.CHARSET_PARAMETER));
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
else
{
throw new IllegalArgumentException(Messages.MESSAGES.requestMediaTypeNotUrlencoded());
}
return formParameters;
}
public MultivaluedMap<String, String> getDecodedFormParameters()
{
if (decodedFormParameters != null) return decodedFormParameters;
decodedFormParameters = Encode.decode(getFormParameters());
return decodedFormParameters;
}
public boolean isInitial()
{
return true;
}
@Override
public void setRequestUri(URI requestUri) throws IllegalStateException
{
uri.setRequestUri(requestUri);
}
@Override
public void setRequestUri(URI baseUri, URI requestUri) throws IllegalStateException
{
uri.setUri(baseUri, requestUri);
}
}