001: package com.meterware.servletunit;
002:
003: /********************************************************************************************************************
004: * $Id: InvocationContext.java,v 1.10 2004/09/29 17:15:26 russgold Exp $
005: *
006: * Copyright (c) 2001-2004, Russell Gold
007: *
008: * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
009: * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
010: * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
011: * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included in all copies or substantial portions
014: * of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
017: * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
018: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
019: * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
020: * DEALINGS IN THE SOFTWARE.
021: *
022: *******************************************************************************************************************/
023: import com.meterware.httpunit.WebResponse;
024: import com.meterware.httpunit.FrameSelector;
025:
026: import javax.servlet.http.HttpServletRequest;
027: import javax.servlet.http.HttpServletResponse;
028: import javax.servlet.*;
029:
030: import java.io.IOException;
031:
032: /**
033: * An interface which represents the invocation of a servlet.
034: *
035: * @author <a href="mailto:russgold@httpunit.org">Russell Gold</a>
036: **/
037: public interface InvocationContext {
038:
039: /**
040: * Returns the request to be processed by the servlet or filter.
041: **/
042: HttpServletRequest getRequest();
043:
044: /**
045: * Returns the response which the servlet or filter should modify during its operation.
046: **/
047: HttpServletResponse getResponse();
048:
049: /**
050: * Invokes the current servlet or filter.
051: * @since 1.6
052: */
053: void service() throws ServletException, IOException;
054:
055: /**
056: * Returns the selected servlet, initialized to provide access to sessions
057: * and servlet context information. Only valid to call if {@link #isFilterActive} returns false.
058: **/
059: Servlet getServlet() throws ServletException;
060:
061: /**
062: * Returns the final response from the servlet. Note that this method should
063: * only be invoked after all processing has been done to the servlet response.
064: **/
065: WebResponse getServletResponse() throws IOException;
066:
067: /**
068: * Returns the target frame for the original request.
069: * @since 1.6
070: */
071: FrameSelector getFrame();
072:
073: /**
074: * Adds a request dispatcher to this context to simulate an include request.
075: */
076: void pushIncludeRequest(RequestDispatcher rd,
077: HttpServletRequest request, HttpServletResponse response)
078: throws ServletException;
079:
080: /**
081: * Adds a request dispatcher to this context to simulate a forward request.
082: */
083: void pushForwardRequest(RequestDispatcher rd,
084: HttpServletRequest request, HttpServletResponse response)
085: throws ServletException;
086:
087: /**
088: * Removes the top request dispatcher or filter from this context.
089: */
090: void popRequest();
091:
092: /**
093: * Returns true if the current context is a filter, rather than a servlet.
094: * @since 1.6
095: */
096: boolean isFilterActive();
097:
098: /**
099: * Returns the current active filter object. Only valid to call if {@link #isFilterActive} returns true.
100: * @since 1.6
101: */
102: Filter getFilter() throws ServletException;
103:
104: /**
105: * Returns the current filter chain. Only valid to call if {@link #isFilterActive} returns true.
106: * @since 1.6
107: */
108: FilterChain getFilterChain();
109:
110: /**
111: * Pushes the current filter onto the execution stack and switches to the next filter or the selected servlet.
112: * This can be used to simulate the effect of the {@link javax.servlet.FilterChain#doFilter doFilter} call.
113: * <br><b>Note:</b> this method specifies {@link ServletRequest} and {@link ServletResponse} because those are the
114: * types passed to {@link Filter#doFilter}; however, HttpUnit requires the objects to implement
115: * {@link HttpServletRequest} and {@link HttpServletResponse} because they will eventually be passed to an
116: * {@link javax.servlet.http.HttpServlet}.
117: *
118: * @param request the request to pass to the next filter. May be a wrapper.
119: * @param response the response object to pass to the next filter. May be a wrapper.
120: * @since 1.6
121: */
122: void pushFilter(ServletRequest request, ServletResponse response);
123:
124: }
|