src.servletunit.HttpServletRequestSimulator Maven / Gradle / Ivy
package servletunit;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.File;
import java.security.Principal;
import java.util.*;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
// StrutsTestCase - a JUnit extension for testing Struts actions
// within the context of the ActionServlet.
// Copyright (C) 2002 Deryl Seale
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the Apache Software License as
// published by the Apache Software Foundation; either version 1.1
// of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// Apache Software Foundation Licens for more details.
//
// You may view the full text here: http://www.apache.org/LICENSE.txt
public class HttpServletRequestSimulator implements HttpServletRequest
{
private Hashtable attributes;
private String scheme;
private String protocol = "HTTP/1.1";
private String requestURI;
private String requestURL;
private String contextPath = "";
private String servletPath;
private String pathInfo;
private String queryString;
private String method;
private String contentType;
private Locale locale;
private Principal principal;
String remoteAddr;
String localAddr;
String remoteHost;
String localName;
int remotePort;
int localPort;
private String remoteUser;
private String userRole;
private String reqSessionId;
String authType;
String charEncoding;
private String serverName;
private int port;
private Hashtable parameters;
private Hashtable headers;
private Vector cookies;
private HttpSession session;
private ServletContext context;
/**
* Constant used by {@link #setMethod} to indicate that the GET method
* made this request.
*/
public final static int GET = 0;
/**
* Constant used by {@link #setMethod} to indicate that the POST method
* made this request.
*/
public final static int POST = 1;
/**
* Constant used by {@link #setMethod} to indicate that the PUT method
* made this request.
*/
public final static int PUT = 2;
public HttpServletRequestSimulator(ServletContext context)
{
scheme = "http";
attributes = new Hashtable();
parameters = new Hashtable();
headers = new Hashtable();
cookies = new Vector();
this.context = context;
//if (getHeader("Accept")==null)
//setHeader("Accept","dummy accept");
}
/**
* Adds a parameter to this object's list of parameters
*
* @param key The name of the parameter
* @param value The value of the parameter
*/
public void addParameter( String key, String value )
{
if ((key != null) && (value != null))
this.parameters.put( key, value );
}
/**
* Adds a parameter as a String array to this object's list of parameters
*/
public void addParameter(String name, String[] values) {
if ((name != null) && (values != null))
parameters.put(name,values);
}
/**
* Returns a java.util.Map of the parameters of this request.
* Request parameters
* are extra information sent with the request. For HTTP servlets,
* parameters are contained in the query string or posted form data.
*
* @return an immutable java.util.Map containing parameter names as
* keys and parameter values as map values. The keys in the parameter
* map are of type String. The values in the parameter map are of type
* String array.
*
*/
public Map getParameterMap() {
return this.parameters;
}
/**
*
* Returns the value of the named attribute as an Object
,
* or null
if no attribute of the given name exists.
*
* Attributes can be set two ways. The servlet container may set
* attributes to make available custom information about a request.
* For example, for requests made using HTTPS, the attribute
* javax.servlet.request.X509Certificate
can be used to
* retrieve information on the certificate of the client. Attributes
* can also be set programatically using
* {@link ServletRequest#setAttribute}. This allows information to be
* embedded into a request before a {@link RequestDispatcher} call.
*
*
Attribute names should follow the same conventions as package
* names. This specification reserves names matching java.*
,
* javax.*
, and sun.*
.
*
* @param s a String
specifying the name of
* the attribute
*
* @return an Object
containing the value
* of the attribute, or null
if
* the attribute does not exist
*
*/
public Object getAttribute(String s)
{
return attributes.get(s);
}
/**
* Returns an Enumeration
containing the
* names of the attributes available to this request.
* This method returns an empty Enumeration
* if the request has no attributes available to it.
*
*
* @return an Enumeration
of strings
* containing the names
* of the request's attributes
*
*/
public Enumeration getAttributeNames()
{
return attributes.keys();
}
/**
* Returns the name of the authentication scheme used to protect
* the servlet. All servlet containers support basic, form and client
* certificate authentication, and may additionally support digest
* authentication.
* If the servlet is not authenticated null
is returned.
*
*
Same as the value of the CGI variable AUTH_TYPE.
*
*
* @return one of the static members BASIC_AUTH,
* FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
* (suitable for == comparison)
* indicating the authentication scheme, or
* null
if the request was
* not authenticated.
*
*/
public String getAuthType()
{
return authType;
}
/**
* Returns the name of the character encoding used in the body of this
* request. This method returns null
if the request
* does not specify a character encoding
*
*
* @return a String
containing the name of
* the chararacter encoding, or null
* if the request does not specify a character encoding
*/
public String getCharacterEncoding()
{
return charEncoding;
}
/**
* Returns the length, in bytes, of the request body
* and made available by the input stream, or -1 if the
* length is not known. For HTTP servlets, same as the value
* of the CGI variable CONTENT_LENGTH.
*
* @return -1, since this is a mock container
*/
public int getContentLength()
{
return -1;
}
/**
* Returns the MIME type of the body of the request, or
* null
if the type is not known. For HTTP servlets,
* same as the value of the CGI variable CONTENT_TYPE.
*
* @return a String
containing the name
* of the MIME type of
* the request, or null if the type is not known
*
*/
public String getContentType()
{
return contentType;
}
/**
*
* Returns the portion of the request URI that indicates the context
* of the request. The context path always comes first in a request
* URI. The path starts with a "/" character but does not end with a "/"
* character. For servlets in the default (root) context, this method
* returns "". The container does not decode this string.
*
*
* @return a String
specifying the
* portion of the request URI that indicates the context
* of the request
*
*
*/
public String getContextPath()
{
return contextPath;
}
/**
* Adds a cookie that can be retrieved from this request via the
* getCookies() method.
*
* @param cookie a Cookie object to be retrieved from this
* request.
*
* @see #getCookies
*/
public void addCookie(Cookie cookie) {
cookies.addElement(cookie);
}
/**
* Adds a set of cookies that can be retrieved from this request via the
* getCookies() method.
*
* @param cookies an array of Cookie object to be retrieved from this
* request.
*
* @see #getCookies
*/
public void setCookies(Cookie[] cookies) {
for (int i = 0; i < cookies.length; i++)
this.cookies.addElement(cookies[i]);
}
/**
*
* Returns an array containing all of the Cookie
* objects the client sent with this request.
* This method returns null
if no cookies were sent.
*
* @return an array of all the Cookies
* included with this request, or null
* if the request has no cookies
*
*
*/
public Cookie [] getCookies()
{
if (cookies.isEmpty())
return null;
else {
Cookie[] cookieArray = new Cookie[cookies.size()];
return (Cookie []) cookies.toArray(cookieArray);
}
}
/**
* Returns the value of the specified request header as a long value that represents a Date object. Use this
* method with headers that contain dates, such as If-Modified-Since.
*
* The date is returned as the number of milliseconds since January 1, 1970 GMT. The header name is case insensitive.
*
* If the request did not have a header of the specified name, this method returns -1. If the header can't be converted to a date, the method throws an IllegalArgumentException.
* @param name a String specifying the name of the header
* @return a long
value representing the date specified in the header expressed as the number of milliseconds since January 1, 1970 GMT, or -1 if the named header was not included with the reqest.
*/
public long getDateHeader(String name)
{
String s1 = getHeader(name);
if(s1 == null)
return -1L;
try
{
DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z");
return dateFormat.parse(s1).getTime();
}
catch(ParseException exception) {
throw new IllegalArgumentException("Cannot parse date: " + s1);
}
}
/**
* Sets a header with the appropriate date string given the time in milliseconds.
* @param name the name of the header
* @param millis the time in milliseconds
*/
public void setDateHeader(String name, long millis)
{
String dateString = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z").format(new Date(millis));
setHeader(name, dateString);
}
/**
*
* Returns the value of the specified request header
* as a String
. If the request did not include a header
* of the specified name, this method returns null
.
* The header name is case insensitive. You can use
* this method with any request header.
*
* @param s a String
specifying the
* header name
*
* @return a String
containing the
* value of the requested
* header, or null
* if the request does not
* have a header of that name
*
*/
public String getHeader(String s)
{
return (String) headers.get(s);
}
/**
*
* Returns an enumeration of all the header names
* this request contains. If the request has no
* headers, this method returns an empty enumeration.
*
*
Some servlet containers do not allow do not allow
* servlets to access headers using this method, in
* which case this method returns null
*
* @return an enumeration of all the
* header names sent with this
* request; if the request has
* no headers, an empty enumeration;
* if the servlet container does not
* allow servlets to use this method,
* null
*
*
*/
public Enumeration getHeaderNames()
{
return headers.keys();
}
/**
* This operation is not supported.
*/
public Enumeration getHeaders(String s)
{
throw new UnsupportedOperationException("getHeaders operation is not supported!");
}
/**
* This operation is not supported.
*/
public ServletInputStream getInputStream() throws IOException {
throw new UnsupportedOperationException("getInputStream operation is not supported!");
}
/**
*
* Returns the value of the specified request header
* as an int
. If the request does not have a header
* of the specified name, this method returns -1. If the
* header cannot be converted to an integer, this method
* throws a NumberFormatException
.
*
*
The header name is case insensitive.
*
* @param s a String
specifying the name
* of a request header
*
* @return an integer expressing the value
* of the request header or -1
* if the request doesn't have a
* header of this name
*
* @exception NumberFormatException If the header value
* can't be converted
* to an int
*/
public int getIntHeader(String s)
{
Object header = headers.get(s);
if (header != null) {
try {
Integer intHeader = (Integer) header;
return intHeader.intValue();
} catch (ClassCastException e) {
throw new NumberFormatException("header '" + s + "' cannot be converted to number format.");
}
} else
return -1;
}
/**
*
* Returns the preferred Locale
that the client will
* accept content in, based on the Accept-Language header.
* If the client request doesn't provide an Accept-Language header,
* this method returns the default locale for the server.
*
*
* @return the preferred Locale
for the client,
* defaults to Locale.US if {@link #setLocale} has
* not been called.
*
*/
public Locale getLocale()
{
if (this.locale == null)
return Locale.US;
else
return this.locale;
}
/**
* Returns an Enumeration of Locale objects indicating, in decreasing order starting with the preferred locale, the locales that are acceptable to the client based on the Accept-Language header. If the client request doesn't provide an Accept-Language header, this method returns an Enumeration containing one Locale, the default locale for the server.
* @return an Enumeration
of preferred Locale objects for the client
*/
public Enumeration getLocales()
{
return java.util.Collections.enumeration(Collections.singleton(getLocale()));
}
/**
*
* Returns the name of the HTTP method with which this
* request was made, for example, GET, POST, or PUT.
* Same as the value of the CGI variable REQUEST_METHOD.
*
* @return a String
* specifying the name
* of the method with which
* this request was made
*
*/
public String getMethod()
{
if (method == null)
return "POST";
else
return method;
}
/**
* Returns the value of a request parameter as a String
,
* or null
if the parameter does not exist. Request parameters
* are extra information sent with the request. For HTTP servlets,
* parameters are contained in the query string or posted form data.
*
*
You should only use this method when you are sure the
* parameter has only one value. If the parameter might have
* more than one value, use {@link #getParameterValues}.
*
*
If you use this method with a multivalued
* parameter, the value returned is equal to the first value
* in the array returned by getParameterValues
.
*
*
If the parameter data was sent in the request body, such as occurs
* with an HTTP POST request, then reading the body directly via {@link
* #getInputStream} or {@link #getReader} can interfere
* with the execution of this method.
*
* @param s a String
specifying the
* name of the parameter
*
* @return a String
representing the
* single value of the parameter
*
* @see #getParameterValues
*
*/
public String getParameter( String s )
{
if (s == null)
return null;
Object param = parameters.get(s);
if( null == param )
return null;
if( param.getClass().isArray() )
return ((String[]) param)[0];
return (String)param;
}
/**
*
* Returns an Enumeration
of String
* objects containing the names of the parameters contained
* in this request. If the request has
* no parameters, the method returns an
* empty Enumeration
.
*
* @return an Enumeration
of String
* objects, each String
containing
* the name of a request parameter; or an
* empty Enumeration
if the
* request has no parameters
*
*/
public Enumeration getParameterNames()
{
return parameters.keys();
}
/**
* Returns an array of String
objects containing
* all of the values the given request parameter has, or
* null
if the parameter does not exist.
*
*
If the parameter has a single value, the array has a length
* of 1.
*
* @param s a String
containing the name of
* the parameter whose value is requested
*
* @return an array of String
objects
* containing the parameter's values
*
* @see #getParameter
*
*/
public String[] getParameterValues( String s )
{
if (s == null)
return null;
Object param = parameters.get( s );
if( null == param )
return null;
else {
if (param.getClass().isArray()) {
return (String[]) param;
} else {
return new String[] {(String) param};
}
}
}
/**
*
* Returns any extra path information associated with
* the URL the client sent when it made this request.
* The extra path information follows the servlet path
* but precedes the query string.
* This method returns null
if there
* was no extra path information.
*
*
Same as the value of the CGI variable PATH_INFO.
*
*
* @return a String
, decoded by the
* web container, specifying
* extra path information that comes
* after the servlet path but before
* the query string in the request URL;
* or null
if the URL does not have
* any extra path information
*
*/
public String getPathInfo()
{
return pathInfo;
}
/**
* This operation is not supported.
*/
public String getPathTranslated()
{
throw new UnsupportedOperationException("getPathTranslated operation is not supported!");
}
/**
* Returns the name and version of the protocol the request uses
* in the form protocol/majorVersion.minorVersion, for
* example, HTTP/1.1. For HTTP servlets, the value
* returned is the same as the value of the CGI variable
* SERVER_PROTOCOL
.
*
* @return a String
containing the protocol
* name and version number
*
*/
public String getProtocol()
{
return protocol;
}
/**
*
* Returns the query string that is contained in the request
* URL after the path. This method returns null
* if the URL does not have a query string. Same as the value
* of the CGI variable QUERY_STRING.
*
* @return a String
containing the query
* string or null
if the URL
* contains no query string. The value is not
* decoded by the container.
*
*/
public String getQueryString()
{
return queryString;
}
/**
* This operation is not supported.
*/
public BufferedReader getReader() throws IOException {
throw new UnsupportedOperationException("getReader operation is not supported!");
}
/**
*
* @deprecated As of Version 2.1 of the Java Servlet API,
* use {@link ServletContext#getRealPath} instead.
*
*/
public String getRealPath(String path)
{
File contextDirectory = ((ServletContextSimulator) context).getContextDirectory();
if ((contextDirectory == null) || (path == null))
return null;
else
return (new File(contextDirectory, path)).getAbsolutePath();
}
/**
* Returns the Internet Protocol (IP) address of the client
* that sent the request. For HTTP servlets, same as the value of the
* CGI variable REMOTE_ADDR
.
*
* @return a String
containing the
* IP address of the client that sent the request
*
*/
public String getRemoteAddr() {
return remoteAddr;
}
/**
* Returns the fully qualified name of the client that sent the
* request. If the engine cannot or chooses not to resolve the hostname
* (to improve performance), this method returns the dotted-string form of
* the IP address. For HTTP servlets, same as the value of the CGI variable
* REMOTE_HOST
.
*
* @return a String
containing the fully
* qualified name of the client
*
*/
public String getRemoteHost() {
return remoteHost;
}
/**
* Returns the fully qualified name of the client that sent the
* request. If the engine cannot or chooses not to resolve the hostname
* (to improve performance), this method returns the dotted-string form of
* the IP address. For HTTP servlets, same as the value of the CGI variable
* REMOTE_HOST
.
*
* @return a String
containing the fully
* qualified name of the client
*
*/
public String getRemoteUser()
{
return remoteUser;
}
/**
*
* Returns a {@link RequestDispatcher} object that acts as a wrapper for
* the resource located at the given path.
* A RequestDispatcher
object can be used to forward
* a request to the resource or to include the resource in a response.
* The resource can be dynamic or static.
*
*
The pathname specified may be relative, although it cannot extend
* outside the current servlet context. If the path begins with
* a "/" it is interpreted as relative to the current context root.
* This method returns null
if the servlet container
* cannot return a RequestDispatcher
.
*
*
The difference between this method and {@link
* ServletContext#getRequestDispatcher} is that this method can take a
* relative path.
*
* @param url a String
specifying the pathname
* to the resource
*
* @return a RequestDispatcher
object
* that acts as a wrapper for the resource
* at the specified path
*
* @see RequestDispatcherSimulator
* @see ServletContextSimulator#getRequestDispatcher
*
*/
public RequestDispatcher getRequestDispatcher( String url )
{
return context.getRequestDispatcher(url);
}
/**
*
* Returns the session ID specified by the client. This may
* not be the same as the ID of the actual session in use.
* For example, if the request specified an old (expired)
* session ID and the server has started a new session, this
* method gets a new session with a new ID. If the request
* did not specify a session ID, this method returns
* null
.
*
*
* @return a String
specifying the session
* ID, or null
if the request did
* not specify a session ID
*
* @see #isRequestedSessionIdValid
*
*/
public String getRequestedSessionId()
{
return reqSessionId;
}
/**
*
* Returns the part of this request's URL from the protocol
* name up to the query string in the first line of the HTTP request.
* The web container does not decode this String.
* For example:
*
*
*
* First line of HTTP request
* Returned Value
* POST /some/path.html HTTP/1.1 /some/path.html
* GET http://foo.bar/a.html HTTP/1.0
* /a.html
* HEAD /xyz?a=b HTTP/1.1 /xyz
*
*
*
* @return a String
containing
* the part of the URL from the
* protocol name up to the query string
*
*
*/
public String getRequestURI()
{
return requestURI;
}
/**
* Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.
*
* Because this method returns a StringBuffer, not a string, you can modify the URL easily, for example, to append query parameters.
*
* This method is useful for creating redirect messages and for reporting errors.
* @return a StringBuffer
object containing the reconstructed URL
*/
public StringBuffer getRequestURL()
{
return new StringBuffer(requestURL);
}
/**
* Returns the name of the scheme used to make this request,
* for example,
* http
, https
, or ftp
.
* Different schemes have different rules for constructing URLs,
* as noted in RFC 1738.
*
* @return a String
containing the name
* of the scheme used to make this request
*
*/
public String getScheme()
{
return scheme;
}
/**
* Returns the host name of the server that received
* the request. For HTTP servlets, same as the value of
* the CGI variable SERVER_NAME.
* @return the name of the server to which the request was sent
*/
public String getServerName() {
return serverName;
}
/**
* Returns the port number on which this request was received. For HTTP servlets, same as the value of the CGI variable SERVER_PORT.
* @return an integer specifying the port number
*/
public int getServerPort() {
return this.port;
}
/**
* Sets the server port to be used with {@link#getServerPort}.
*/
public void setServerPort(int port) {
this.port = port;
}
/**
*
* Returns the part of this request's URL that calls
* the servlet. This includes either the servlet name or
* a path to the servlet, but does not include any extra
* path information or a query string. Same as the value
* of the CGI variable SCRIPT_NAME.
*
*
* @return a String
containing
* the name or path of the servlet being
* called, as specified in the request URL,
* decoded.
*
*
*/
public String getServletPath()
{
return servletPath;
}
/**
*
* Returns the current session associated with this request,
* or if the request does not have a session, creates one.
*
* @return the HttpSession
associated
* with this request
*
* @see #getSession(boolean)
*
*/
public HttpSession getSession()
{
return getSession(true);
}
/**
*
* Returns the current HttpSession
* associated with this request or, if if there is no
* current session and create
is true, returns
* a new session.
*
* If create
is false
* and the request has no valid HttpSession
,
* this method returns null
.
*
*
To make sure the session is properly maintained,
* you must call this method before
* the response is committed. If the container is using cookies
* to maintain session integrity and is asked to create a new session
* when the response is committed, an IllegalStateException is thrown.
*
*
*
*
* @param b true
to create
* a new session for this request if necessary;
* false
to return null
* if there's no current session
*
*
* @return the HttpSession
associated
* with this request or null
if
* create
is false
* and the request has no valid session
*
* @see #getSession()
*
*
*/
public HttpSession getSession(boolean b)
{
if ((session == null) && (b))
this.session = new HttpSessionSimulator(context);
else if ((session != null) && (!((HttpSessionSimulator) session).isValid()) && (b))
this.session = new HttpSessionSimulator(context);
if ((session != null) && (((HttpSessionSimulator) session).isValid()))
return this.session;
else
return null;
}
/**
*
* Returns a java.security.Principal
object containing
* the name of the current authenticated user. If the user has not been
* authenticated, the method returns null
.
*
* @return a java.security.Principal
containing
* the name of the user making this request;
* null
if the user has not been
* authenticated
*
*/
public Principal getUserPrincipal()
{
return this.principal;
}
/**
*
* Checks whether the requested session ID came in as a cookie.
*
* @return true
in all cases
*
* @see #getSession
*
*/
public boolean isRequestedSessionIdFromCookie()
{
return true;
}
/**
*
* @deprecated As of Version 2.1 of the Java Servlet
* API, use {@link #isRequestedSessionIdFromURL}
* instead.
*
*/
public boolean isRequestedSessionIdFromUrl()
{
return isRequestedSessionIdFromURL();
}
/**
*
* Checks whether the requested session ID came in as part of the
* request URL.
*
* @return false
in all cases.
*
* @see #getSession
*
*/
public boolean isRequestedSessionIdFromURL()
{
return false;
}
/**
*
* Checks whether the requested session ID is still valid.
*
* @return true
if this
* request has an id for a valid session
* in the current session context;
* false
otherwise
*
* @see #getRequestedSessionId
* @see #getSession
*
*/
public boolean isRequestedSessionIdValid()
{
if (session != null) {
try {
session.getId();
return true;
} catch (IllegalStateException e) {
return false;
}
} else
return false;
}
/**
*
* Returns a boolean indicating whether this request was made using a
* secure channel, such as HTTPS.
*
*
* @return true if scheme has been set to HTTPS (ignoring case)
*
*/
public boolean isSecure()
{
if(scheme==null){
return false;
} else{
return scheme.equalsIgnoreCase("HTTPS");
}
}
/**
*
* Returns a boolean indicating whether the authenticated user is included
* in the specified logical "role". Roles and role membership can be
* defined using deployment descriptors. If the user has not been
* authenticated, the method returns false
.
*
* @param s a String
specifying the name
* of the role
*
* @return false
in all cases
*
*/
public boolean isUserInRole(String s)
{
return s.equals(userRole);
}
/**
* Sets user role to be used in {@link #isUserInRole}
*/
public void setUserRole(String role) {
this.userRole = role;
}
/**
*
* Removes an attribute from this request. This method is not
* generally needed as attributes only persist as long as the request
* is being handled.
*
*
Attribute names should follow the same conventions as
* package names. Names beginning with java.*
,
* javax.*
, and com.sun.*
, are
* reserved for use by Sun Microsystems.
*
*
* @param s a String
specifying
* the name of the attribute to remove
*
*/
public void removeAttribute(String s)
{
attributes.remove(s);
}
/**
*
* Stores an attribute in this request.
* Attributes are reset between requests. This method is most
* often used in conjunction with {@link RequestDispatcher}.
*
*
Attribute names should follow the same conventions as
* package names. Names beginning with java.*
,
* javax.*
, and com.sun.*
, are
* reserved for use by Sun Microsystems.
*
If the value passed in is null, the effect is the same as
* calling {@link #removeAttribute}.
*
*
*
* @param name a String
specifying
* the name of the attribute
*
* @param o the Object
to be stored
*
*/
public void setAttribute(String name, Object o)
{
if (o == null)
attributes.remove(name);
else
attributes.put(name, o);
}
/**
* Sets authentication scheme to be used in {@link #getAuthType}.
*/
public void setAuthType(String s)
{
authType = s;
}
/**
* Sets character encoding to be used in {@link #getCharacterEncoding}.
*/
public void setCharacterEncoding(String s)
{
charEncoding = s;
}
/**
* Sets content type to be used in {@link #getContentType}.
*/
public void setContentType(String s) {
contentType = s;
}
/**
* Sets a header to be used in {@link #getHeader}.
*/
public void setHeader(String key, String value)
{
headers.put(key,value);
}
/**
* Sets the name of the HTTP method with which this request
* was made. This value will be returned in the getMethod
* method.
*
*
* @param methodType one of the following constant values
* defined in this class: {@link #GET}, {@link #POST}, and {@link #PUT}
*
*/
public void setMethod(int methodType)
{
switch (methodType)
{
case GET:method="GET";break;
case PUT:method="PUT";break;
case POST:method="POST";break;
default:method="POST";
}
}
/**
* Sets parameter value to be used by {@link #getParameter}.
*/
public void setParameterValue( String key, String[] value )
{
parameters.put( key, value );
}
/**
* Sets path information to be used by {@link #getPathInfo}.
*/
public void setPathInfo(String s)
{
pathInfo = s;
}
/**
* Sets query string to be used by {@link #getQueryString}.
*/
public void setQueryString(String s) {
this.queryString = s;
}
/**
* Sets remote user to be used by {@link #getRemoteUser}.
*/
public void setRemoteUser(String remoteUser)
{
this.remoteUser = remoteUser;
}
/**
* Sets remote address to be used by {@link #getRemoteAddr}.
*/
public void setRemoteAddr(String remoteAddr) {
this.remoteAddr = remoteAddr;
}
/**
* Sets remote host to be used by {@link #getRemoteHost}.
*/
public void setRemoteHost(String remoteHost) {
this.remoteHost = remoteHost;
}
/**
* Sets requested session ID to be used by {@link #getRequestedSessionId}.
*/
public void setRequestedSessionId(String s)
{
reqSessionId = s;
}
/**
* Sets request URI to be used by {@link #getRequestURI}.
*/
public void setRequestURI(String requestURI)
{
this.requestURI = requestURI;
}
/**
* Sets the request URL to be used in this test. This method uses
* the given request URL to also set the scheme, server name, server
* port, request URI, and query string.
*/
public void setRequestURL(String url) {
// set request url
int queryIndex = url.lastIndexOf('?');
if (queryIndex < 0)
queryIndex = url.length();
this.requestURL = url.substring(0,queryIndex);
// set query string
if (queryIndex != url.length())
setQueryString(url.substring(queryIndex + 1));
// set scheme
int schemeIndex = url.lastIndexOf("://");
setScheme(url.substring(0,schemeIndex));
// set uri
setRequestURI(url.substring(url.indexOf('/',schemeIndex + 3),queryIndex));
// set server name and port
int portIndex = url.indexOf(':',schemeIndex + 2);
if (portIndex > 0) {
setServerName(url.substring(schemeIndex + 3, portIndex));
setServerPort(Integer.parseInt(url.substring(portIndex + 1,url.indexOf('/',schemeIndex + 3))));
} else {
setServerName(url.substring(schemeIndex + 3,url.indexOf('/',schemeIndex + 3)));
if (isSecure())
setServerPort(443);
else
setServerPort(80);
}
}
/**
* Sets scheme to be used by {@link #getScheme}.
*/
public void setScheme(String s)
{
scheme = s;
}
/**
* Sets servlet path to be used by {@link #getServletPath}.
*/
public void setServletPath(String s)
{
servletPath = s;
}
/**
* Sets server name to be used by {@link #getServerName}.
*/
public void setServerName(String s)
{
serverName = s;
}
/**
* Sets the context path to be used by {@link #getContextPath}.
*/
public void setContextPath(String s)
{
contextPath = s;
}
/**
* Sets the locale to be used by {@link #getLocale}.
*/
public void setLocale(Locale locale) {
this.locale = locale;
}
/**
* Sets the Principal used by {@link #getUserPrincipal}.
*/
public void setUserPrincipal(Principal principal) {
this.principal = principal;
}
public int getRemotePort() {
return remotePort;
}
public void setRemotePort(int remotePort) {
this.remotePort = remotePort;
}
public String getLocalAddr() {
return localAddr;
}
public void setLocalAddr(String localAddr) {
this.localAddr = localAddr;
}
public String getLocalName() {
return localName;
}
public void setLocalName(String localName) {
this.localName = localName;
}
public int getLocalPort() {
return localPort;
}
public void setLocalPort(int localPort) {
this.localPort = localPort;
}
}