diff --git a/cactus/sample/.cvsignore b/cactus/sample/.cvsignore
new file mode 100644
index 00000000..717cec97
--- /dev/null
+++ b/cactus/sample/.cvsignore
@@ -0,0 +1,4 @@
+target
+cactus_client.log
+maven.log
+project.properties
diff --git a/cactus/sample/project.xml b/cactus/sample/project.xml
new file mode 100644
index 00000000..1d0e0782
--- /dev/null
+++ b/cactus/sample/project.xml
@@ -0,0 +1,67 @@
+
+init()
+ */
+ private FilterConfig config;
+
+ /**
+ * Filter initialisation. Called by the servlet engine during the life
+ * cycle of the filter.
+ *
+ * @param theConfig the filter config
+ *
+ * @exception ServletException on failure
+ */
+ public void init(FilterConfig theConfig) throws ServletException {
+ this.config = theConfig;
+ }
+
+ /**
+ * Perform the filter function. Called by the container upon a request
+ * matching the filter pattern defined in web.xml.
+ *
+ * @param theRequest the incmoing HTTP request
+ * @param theResponse the returned HTTP response
+ * @param theChain the chain of filters extracted from the definition
+ * given in web.xml by the container.
+ *
+ * @exception ServletException on failure
+ * @exception IOException on failure
+ */
+ public void doFilter(ServletRequest theRequest,
+ ServletResponse theResponse, FilterChain theChain) throws IOException,
+ ServletException {
+ OutputStream out = theResponse.getOutputStream();
+
+ addHeader(out);
+
+ // Create a wrapper of the response so that we can later write to
+ // the response (add the footer). If we did not do this, we would
+ // get an error saying that the response has already been
+ // committed.
+ GenericResponseWrapper wrapper =
+ new GenericResponseWrapper((HttpServletResponse) theResponse);
+
+ theChain.doFilter(theRequest, wrapper);
+
+ out.write(wrapper.getData());
+ addFooter(out);
+ out.close();
+ }
+
+ /**
+ * Write the header to the output stream. The header text is extracted
+ * from a filter initialisation parameter (defined in
+ * web.xml). Don't write anything if no parameter is defined.
+ *
+ * @param theOutputStream the output stream
+ *
+ * @exception IOException on failure
+ */
+ protected void addHeader(OutputStream theOutputStream) throws IOException {
+ String header = this.config.getInitParameter("header");
+
+ if (header != null) {
+ theOutputStream.write(header.getBytes());
+ }
+ }
+
+ /**
+ * Write the footer to the output stream. The footer text is extracted
+ * from a filter initialisation parameter (defined in
+ * web.xml). Don't write anything if no parameter is defined.
+ *
+ * @param theOutputStream the output stream
+ *
+ * @exception IOException on failure
+ */
+ protected void addFooter(OutputStream theOutputStream) throws IOException {
+ String footer = this.config.getInitParameter("footer");
+
+ if (footer != null) {
+ theOutputStream.write(footer.getBytes());
+ }
+ }
+
+ /**
+ * Filter un-initialisation. Called by the servlet engine during the life
+ * cycle of the filter.
+ */
+ public void destroy() {
+ }
+}
\ No newline at end of file
diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java
new file mode 100644
index 00000000..42283357
--- /dev/null
+++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java
@@ -0,0 +1,96 @@
+package org.apache.maven.cactus.sample;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Maven" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache Maven", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * ServletOutputStream cannot be
+ * modified after a resource has committed it.
+ *
+ * Note: This code was adapted from the Filter tutorial found
+ * {@link
+ * here}
+ *
+ * @author Vincent Massol
+ *
+ * @version $Id: FilterServletOutputStream.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $
+ *
+ * @see GenericResponseWrapper
+ */
+public class FilterServletOutputStream extends ServletOutputStream {
+ /**
+ * The stream where all the data will get written to
+ */
+ private DataOutputStream stream;
+
+ /**
+ * Constructor.
+ *
+ * @param theOutput the output stream that we wrap in a
+ * DataOutputStream in order to hold the data
+ */
+ public FilterServletOutputStream(OutputStream theOutput) {
+ stream = new DataOutputStream(theOutput);
+ }
+
+ // Overriden methods from ServletOutputStream ----------------------------
+
+ /**
+ * @see ServletOutputStream#write(int)
+ */
+ public void write(int b) throws IOException {
+ stream.write(b);
+ }
+
+ /**
+ * @see ServletOutputStream#write(byte[])
+ */
+ public void write(byte[] b) throws IOException {
+ stream.write(b);
+ }
+
+ /**
+ * @see ServletOutputStream#write(byte[], int, int)
+ */
+ public void write(byte[] b, int off, int len) throws IOException {
+ stream.write(b, off, len);
+ }
+}
\ No newline at end of file
diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java
new file mode 100644
index 00000000..452e1c2d
--- /dev/null
+++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java
@@ -0,0 +1,170 @@
+package org.apache.maven.cactus.sample.util;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Maven" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache Maven", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * HttpServletResponse that we use to easily
+ * write filters that manipulate the output stream. Indeed, we cannot pass
+ * the output stream of our filter direectly to the next filter in the chain
+ * because then we won't be able to write to it (the response will have been
+ * committed). Instead, we pass this wrapper class and then copy its data
+ * to our filter output stream.
+ *
+ * Note: This code was adapted from the Filter tutorial found
+ * {@link
+ * here}
+ *
+ * @author Vincent Massol
+ *
+ * @version $Id: GenericResponseWrapper.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $
+ *
+ * @see FilterServletOutputStream
+ */
+public class GenericResponseWrapper extends HttpServletResponseWrapper {
+ /**
+ * Holder for the output data
+ */
+ private ByteArrayOutputStream output;
+
+ /**
+ * Save the content length so that we can query it at a later time
+ * (otherwise it would not be possible as
+ * HttpServletResponseWrapper does not have a method to get
+ * the content length).
+ */
+ private int contentLength;
+
+ /**
+ * Save the content type so that we can query it at a later time
+ * (otherwise it would not be possible as
+ * HttpServletResponseWrapper does not have a method to get
+ * the content type).
+ */
+ private String contentType;
+
+ // Constructors ----------------------------------------------------------
+
+ /**
+ * @param theResponse the wrapped response object
+ */
+ public GenericResponseWrapper(HttpServletResponse theResponse) {
+ super(theResponse);
+ this.output = new ByteArrayOutputStream();
+ }
+
+ // New methods -----------------------------------------------------------
+
+ /**
+ * @return the data sent to the output stream
+ */
+ public byte[] getData() {
+ return output.toByteArray();
+ }
+
+ // Overridden methods ----------------------------------------------------
+
+ /**
+ * @see HttpServletResponseWrapper#getOutputStream()
+ */
+ public ServletOutputStream getOutputStream() {
+ return new FilterServletOutputStream(this.output);
+ }
+
+ /**
+ * @see HttpServletResponseWrapper#setContentLength(int)
+ */
+ public void setContentLength(int theLength) {
+ this.contentLength = theLength;
+ super.setContentLength(theLength);
+ }
+
+ /**
+ * @see HttpServletResponseWrapper#getContentLength()
+ */
+ public int getContentLength() {
+ return this.contentLength;
+ }
+
+ /**
+ * @see HttpServletResponseWrapper#setContentType(String)
+ */
+ public void setContentType(String theType) {
+ this.contentType = theType;
+ super.setContentType(theType);
+ }
+
+ /**
+ * @see HttpServletResponseWrapper#getContentType()
+ */
+ public String getContentType() {
+ return this.contentType;
+ }
+
+ /**
+ * @see HttpServletResponseWrapper#getWriter()
+ */
+ public PrintWriter getWriter() {
+ return new PrintWriter(getOutputStream(), true);
+ }
+}
\ No newline at end of file
diff --git a/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java
new file mode 100644
index 00000000..52076451
--- /dev/null
+++ b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java
@@ -0,0 +1,166 @@
+package org.apache.maven.cactus.sample;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Maven" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache Maven", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * SampleBodyTag class.
+ *
+ * @author Nciholas Lesiecki
+ *
+ * @version $Id: TestSampleBodyTag.java,v 1.1 2003/03/22 16:39:09 vmassol Exp $
+ */
+public class TestSampleBodyTag extends JspTestCase {
+ private SampleBodyTag tag;
+ private BodyContent tagContent;
+
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param theName the testcase's name.
+ */
+ public TestSampleBodyTag(String theName)
+ {
+ super(theName);
+ }
+
+ /**
+ * Start the tests.
+ *
+ * @param theArgs the arguments. Not used
+ */
+ public static void main(String[] theArgs) {
+ junit.swingui.TestRunner.main(
+ new String[] { TestSampleBodyTag.class.getName() });
+ }
+
+ /**
+ * @return a test suite (TestSuite) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite() {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(TestSampleBodyTag.class);
+ }
+
+ /**
+ * In addition to creating the tag instance and adding the pageContext to
+ * it, this method creates a BodyContent object and passes it to the tag.
+ */
+ public void setUp() {
+ this.tag = new SampleBodyTag();
+ this.tag.setPageContext(this.pageContext);
+
+ //create the BodyContent object and call the setter on the tag instance
+ this.tagContent = this.pageContext.pushBody();
+ this.tag.setBodyContent(this.tagContent);
+ }
+
+ //-------------------------------------------------------------------------
+
+ /**
+ * Sets the replacement target and replacement String on the tag, then calls
+ * doAfterBody(). Most of the assertion work is done in endReplacement().
+ */
+ public void testReplacement() throws Exception
+ {
+ //set the target and the String to replace it with
+ this.tag.setTarget("@target@");
+ this.tag.setReplacement("replacement");
+
+ //add the tag's body by writing to the BodyContent object created in
+ //setUp()
+ this.tagContent.println("@target@ is now @target@");
+ this.tagContent.println("@target@_@target@");
+
+ //none of the other life cycle methods need to be implemented, so they
+ //do not need to be called.
+ int result = this.tag.doAfterBody();
+
+ assertEquals(BodyTag.SKIP_BODY, result);
+ }
+
+ public void tearDown()
+ {
+ //necessary for tag to output anything on most servlet engines.
+ this.pageContext.popBody();
+ }
+
+ /**
+ * Verifies that the target String has indeed been replaced in the tag's
+ * body.
+ */
+ public void endReplacement(WebResponse theResponse)
+ {
+ String content = theResponse.getText();
+
+ assertTrue("Response should have contained the ["
+ + "replacement is now replacement] string",
+ content.indexOf("replacement is now replacement") > -1);
+ assertTrue("Response should have contained the ["
+ + "replacement_replacement] string",
+ content.indexOf("replacement") > -1);
+ }
+}
\ No newline at end of file
diff --git a/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java
new file mode 100644
index 00000000..9faffe87
--- /dev/null
+++ b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java
@@ -0,0 +1,259 @@
+package org.apache.maven.cactus.sample;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Maven" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache Maven", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * SampleFilter filter class.
+ *
+ * @author Vincent Massol
+ *
+ * @version $Id: TestSampleFilter.java,v 1.1 2003/03/22 16:39:09 vmassol Exp $
+ */
+public class TestSampleFilter extends FilterTestCase
+{
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param theName the testcase's name.
+ */
+ public TestSampleFilter(String theName)
+ {
+ super(theName);
+ }
+
+ /**
+ * Start the tests.
+ *
+ * @param theArgs the arguments. Not used
+ */
+ public static void main(String[] theArgs)
+ {
+ junit.swingui.TestRunner.main(
+ new String[] { TestSampleFilter.class.getName() });
+ }
+
+ /**
+ * @return a test suite (TestSuite) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite()
+ {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(TestSampleFilter.class);
+ }
+
+ //-------------------------------------------------------------------------
+
+ /**
+ * Test that adding a header to the output stream is working fine when
+ * a header parameter is defined.
+ *
+ * @exception ServletException on test failure
+ * @exception IOException on test failure
+ */
+ public void testAddHeaderParamOK() throws ServletException, IOException
+ {
+ SampleFilter filter = new SampleFilter();
+
+ config.setInitParameter("header", "
some content
"); + writer.close(); + } + + public void init(FilterConfig theConfig) + { + } + + public void destroy() + { + } + }; + + filter.doFilter(request, response, mockFilterChain); + } + + /** + * Test that the filter does correctly add a header and footer to + * any requets it is serving. + * + * @param theResponse the response from the server side. + */ + public void endDoFilterOK(WebResponse theResponse) + { + assertEquals("some content