portals-pluto-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From msnickl...@apache.org
Subject [02/35] Created test code for multiple includes and for using a wrappered portlet request & response in theinclude / forward call
Date Fri, 22 Aug 2014 13:13:40 GMT
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/portlets/DispatcherTests4_SPEC2_19_IncludeServletResource.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/portlets/DispatcherTests4_SPEC2_19_IncludeServletResource.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/portlets/DispatcherTests4_SPEC2_19_IncludeServletResource.java
new file mode 100644
index 0000000..c43defc
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/portlets/DispatcherTests4_SPEC2_19_IncludeServletResource.java
@@ -0,0 +1,134 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet DispatcherTests4_SPEC2_19_IncludeServletResource_event
+ *
+ */
+public class DispatcherTests4_SPEC2_19_IncludeServletResource implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_IncludeServletResource.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      portletResp.setRenderParameters(portletReq.getParameterMap());
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      // Prereq for: V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke3
+      portletReq = new ResourceRequestWrapper((ResourceRequest)portletReq);
+      portletResp = new ResourceResponseWrapper((ResourceResponse)portletResp);
+
+      {
+         // Prereq for: V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke8
+         // include the multiple include portlet
+         String target = "/MultipleIncludeServlet?" + QUERY_STRING;
+         PortletRequestDispatcher rd = portletConfig.getPortletContext()
+               .getRequestDispatcher(target);
+         rd.include(portletReq, portletResp);
+      }
+
+      // Now do the actual dispatch
+      String target = SERVLET_PREFIX + "DispatcherTests4_SPEC2_19_IncludeServletResource_servlet" + SERVLET_SUFFIX + "?" + QUERY_STRING;
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher(target);
+      rd.include(portletReq, portletResp);
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute(THREADID_ATTR, tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      writer.write("<div id=\"DispatcherTests4_SPEC2_19_IncludeServletResource\">no resource output.</div>\n");
+      ResourceURL resurl = portletResp.createResourceURL();
+      resurl.setCacheability(PAGE);
+      writer.write("<script>\n");
+      writer.write("(function () {\n");
+      writer.write("   var xhr = new XMLHttpRequest();\n");
+      writer.write("   xhr.onreadystatechange=function() {\n");
+      writer.write("      if (xhr.readyState==4 && xhr.status==200) {\n");
+      writer.write("         document.getElementById(\"DispatcherTests4_SPEC2_19_IncludeServletResource\").innerHTML=xhr.responseText;\n");
+      writer.write("      }\n");
+      writer.write("   };\n");
+      writer.write("   xhr.open(\"GET\",\"" + resurl.toString() + "\",true);\n");
+      writer.write("   xhr.send();\n");
+      writer.write("})();\n");
+      writer.write("</script>\n");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletAction_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletAction_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletAction_servlet.java
new file mode 100644
index 0000000..e289fdc
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletAction_servlet.java
@@ -0,0 +1,92 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_ForwardServletAction
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_ForwardServletAction_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_ForwardServletAction_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardServletAction_invoke3   */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDSERVLETACTION_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_ForwardServletAction",
+                   writer.toString());
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet.java
new file mode 100644
index 0000000..5cb5688
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet.java
@@ -0,0 +1,92 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_ForwardServletEvent
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_ForwardServletEvent_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardServletEvent_invoke3    */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDSERVLETEVENT_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_ForwardServletEvent",
+                   writer.toString());
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletRender_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletRender_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletRender_servlet.java
new file mode 100644
index 0000000..a05768c
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletRender_servlet.java
@@ -0,0 +1,89 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_ForwardServletRender
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_ForwardServletRender_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_ForwardServletRender_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardServletRender_invoke3   */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDSERVLETRENDER_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletResource_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletResource_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletResource_servlet.java
new file mode 100644
index 0000000..616ddcc
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_ForwardServletResource_servlet.java
@@ -0,0 +1,89 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_ForwardServletResource
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_ForwardServletResource_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_ForwardServletResource_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardServletResource_invoke3 */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDSERVLETRESOURCE_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletAction_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletAction_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletAction_servlet.java
new file mode 100644
index 0000000..4c79145
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletAction_servlet.java
@@ -0,0 +1,103 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_IncludeServletAction
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_IncludeServletAction_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_IncludeServletAction_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletAction_invoke3   */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETACTION_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletAction_invoke8   */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETACTION_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_IncludeServletAction",
+                   writer.toString());
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet.java
new file mode 100644
index 0000000..b112504
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet.java
@@ -0,0 +1,103 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_IncludeServletEvent
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_IncludeServletEvent_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletEvent_invoke3    */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETEVENT_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletEvent_invoke8    */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETEVENT_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_IncludeServletEvent",
+                   writer.toString());
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletRender_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletRender_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletRender_servlet.java
new file mode 100644
index 0000000..4a38e57
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletRender_servlet.java
@@ -0,0 +1,100 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_IncludeServletRender
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_IncludeServletRender_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_IncludeServletRender_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletRender_invoke3   */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETRENDER_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletRender_invoke8   */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETRENDER_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletResource_servlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletResource_servlet.java b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletResource_servlet.java
new file mode 100644
index 0000000..6214c72
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/java/javax/portlet/tck/servlets/DispatcherTests4_SPEC2_19_IncludeServletResource_servlet.java
@@ -0,0 +1,100 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package javax.portlet.tck.servlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+
+/**
+ * Servlet for JSR 362 request dispatcher testing.
+ * Used by portlet: DispatcherTests4_SPEC2_19_IncludeServletResource
+ *
+ * @author nick
+ *
+ */
+public class DispatcherTests4_SPEC2_19_IncludeServletResource_servlet extends HttpServlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests4_SPEC2_19_IncludeServletResource_servlet.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   @Override
+   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+         throws ServletException, IOException {
+      processTCKReq(req, resp);
+   }
+
+   // The tck uses only get & post requests
+   protected void processTCKReq(HttpServletRequest request, HttpServletResponse response)
+         throws ServletException, IOException {
+      LOGGER.entering(LOG_CLASS, "servlet entry");
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke3 */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETRESOURCE_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke8 */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDESERVLETRESOURCE_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/resources/xml-resources/additionalTCs.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/resources/xml-resources/additionalTCs.xml b/portlet-tck_3.0/V2DispatcherTests4/src/main/resources/xml-resources/additionalTCs.xml
new file mode 100644
index 0000000..36c96b5
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/resources/xml-resources/additionalTCs.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.     
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<!-- JSR 286 API DispatcherTests4 test case names and page mappings -->
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletAction_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletAction_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletEvent_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletEvent_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletRender_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletRender_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeServletResource_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardServletAction_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardServletEvent_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardServletRender_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardServletResource_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPAction_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPAction_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPEvent_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPEvent_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPRender_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPRender_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPResource_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_IncludeJSPResource_invoke8">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardJSPAction_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardJSPEvent_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardJSPRender_invoke3">V2DispatcherTests4</entry>
+<entry key="V2DispatcherTests4_SPEC2_19_ForwardJSPResource_invoke3">V2DispatcherTests4</entry>
+</properties>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPAction.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPAction.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPAction.jsp
new file mode 100644
index 0000000..2c4f787
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPAction.jsp
@@ -0,0 +1,39 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardJSPAction_invoke3       */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDJSPACTION_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_ForwardJSPAction",
+                   writer.toString());
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPEvent.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPEvent.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPEvent.jsp
new file mode 100644
index 0000000..b4d4f02
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPEvent.jsp
@@ -0,0 +1,39 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardJSPEvent_invoke3        */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDJSPEVENT_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_ForwardJSPEvent",
+                   writer.toString());
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPRender.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPRender.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPRender.jsp
new file mode 100644
index 0000000..157a8d4
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPRender.jsp
@@ -0,0 +1,36 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardJSPRender_invoke3       */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDJSPRENDER_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPResource.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPResource.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPResource.jsp
new file mode 100644
index 0000000..2c43474
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_ForwardJSPResource.jsp
@@ -0,0 +1,36 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_ForwardJSPResource_invoke3     */
+      /* Details: "Parameters to the forward method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_FORWARDJSPRESOURCE_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPAction.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPAction.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPAction.jsp
new file mode 100644
index 0000000..8e4e959
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPAction.jsp
@@ -0,0 +1,50 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPAction_invoke3       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPACTION_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPAction_invoke8       */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPACTION_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_IncludeJSPAction",
+                   writer.toString());
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPEvent.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPEvent.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPEvent.jsp
new file mode 100644
index 0000000..65b9a09
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPEvent.jsp
@@ -0,0 +1,50 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPEvent_invoke3        */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPEVENT_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPEvent_invoke8        */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPEVENT_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+      request.getSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests4_SPEC2_19_IncludeJSPEvent",
+                   writer.toString());
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPRender.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPRender.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPRender.jsp
new file mode 100644
index 0000000..59678aa
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPRender.jsp
@@ -0,0 +1,47 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPRender_invoke3       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPRENDER_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPRender_invoke8       */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPRENDER_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPResource.jsp
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPResource.jsp b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPResource.jsp
new file mode 100644
index 0000000..b179dbc
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/jsp/DispatcherTests4_SPEC2_19_IncludeJSPResource.jsp
@@ -0,0 +1,47 @@
+<%@ page session="false" %>
+<%@ taglib uri="http://java.sun.com/portlet_2_0"  prefix="portlet" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page import="java.io.*,java.util.*,java.util.logging.*" %>
+<%@ page import="static java.util.logging.Logger.*" %>
+<%@ page import="javax.portlet.*,javax.portlet.filter.*" %>
+<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
+<%@ page import="javax.portlet.tck.beans.*,javax.portlet.tck.constants.*" %>
+<%@ page import="static javax.portlet.tck.constants.Constants.*" %>
+<%@ page import="static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*" %>
+<%
+
+      PortletRequest portletReq = (PortletRequest) request.getAttribute("javax.portlet.request");
+      PortletResponse portletResp = (PortletResponse) request.getAttribute("javax.portlet.response");
+      PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
+      long svtTid = Thread.currentThread().getId();
+      long reqTid = (Long) portletReq.getAttribute(THREADID_ATTR);
+
+      PrintWriter writer = ((MimeResponse)portletResp).getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPResource_invoke3     */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      TestResult tr0 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPRESOURCE_INVOKE3);
+      try {
+         // If this gets executed, include worked.
+         tr0.setTcSuccess(true);
+      } catch(Exception e) {tr0.appendTcDetail(e.toString());}
+      tr0.writeTo(writer);
+
+      /* TestCase: V2DispatcherTests4_SPEC2_19_IncludeJSPResource_invoke8     */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      TestResult tr1 = tcd.getTestResultFailed(V2DISPATCHERTESTS4_SPEC2_19_INCLUDEJSPRESOURCE_INVOKE8);
+      try {
+         // Check the attribute to make sure the include servlet was really included
+         String val = (String) request.getAttribute(MULTIPLE_INCLUDE_ATTR);
+         tr1.setTcSuccess(val != null);
+      } catch(Exception e) {tr1.appendTcDetail(e.toString());}
+      tr1.writeTo(writer);
+
+%>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/738540a7/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/portlet.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/portlet.xml b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/portlet.xml
new file mode 100644
index 0000000..67174fb
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests4/src/main/webapp/WEB-INF/portlet.xml
@@ -0,0 +1,378 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.     
+-->
+<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
+   xmlns:tck="http://www.apache.org/portals/pluto/portlet-tck_3.0"
+   version="2.0" id="V2DispatcherTests4">
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeServletAction</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeServletAction</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeServletAction</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeServletEvent</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeServletEvent</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeServletEvent</title>
+      </portlet-info>
+      <supported-publishing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_IncludeServletEvent</qname>
+      </supported-publishing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeServletEvent_event</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeServletEvent_event</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeServletEvent_event</title>
+      </portlet-info>
+      <supported-processing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_IncludeServletEvent</qname>
+      </supported-processing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeServletRender</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeServletRender</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeServletRender</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeServletResource</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeServletResource</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeServletResource</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardServletAction</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardServletAction</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardServletAction</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardServletEvent</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardServletEvent</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardServletEvent</title>
+      </portlet-info>
+      <supported-publishing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_ForwardServletEvent</qname>
+      </supported-publishing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardServletEvent_event</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardServletEvent_event</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardServletEvent_event</title>
+      </portlet-info>
+      <supported-processing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_ForwardServletEvent</qname>
+      </supported-processing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardServletRender</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardServletRender</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardServletRender</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardServletResource</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardServletResource</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardServletResource</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeJSPAction</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeJSPAction</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeJSPAction</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeJSPEvent</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeJSPEvent</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeJSPEvent</title>
+      </portlet-info>
+      <supported-publishing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_IncludeJSPEvent</qname>
+      </supported-publishing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeJSPEvent_event</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeJSPEvent_event</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeJSPEvent_event</title>
+      </portlet-info>
+      <supported-processing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_IncludeJSPEvent</qname>
+      </supported-processing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeJSPRender</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeJSPRender</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeJSPRender</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_IncludeJSPResource</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_IncludeJSPResource</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_IncludeJSPResource</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardJSPAction</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardJSPAction</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardJSPAction</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardJSPEvent</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardJSPEvent</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardJSPEvent</title>
+      </portlet-info>
+      <supported-publishing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_ForwardJSPEvent</qname>
+      </supported-publishing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardJSPEvent_event</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardJSPEvent_event</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardJSPEvent_event</title>
+      </portlet-info>
+      <supported-processing-event>
+         <qname>tck:DispatcherTests4_SPEC2_19_ForwardJSPEvent</qname>
+      </supported-processing-event>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardJSPRender</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardJSPRender</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardJSPRender</title>
+      </portlet-info>
+   </portlet>
+
+   <portlet>
+      <portlet-name>DispatcherTests4_SPEC2_19_ForwardJSPResource</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.DispatcherTests4_SPEC2_19_ForwardJSPResource</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>DispatcherTests4_SPEC2_19_ForwardJSPResource</title>
+      </portlet-info>
+   </portlet>
+
+   <event-definition>
+      <qname>tck:DispatcherTests_SPEC2_19_DispatchServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests_SPEC2_19_IncludeServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests_SPEC2_19_ForwardServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests2_SPEC2_19_IncludeJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests2_SPEC2_19_ForwardJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests3S_SPEC2_19_IncludeServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests3S_SPEC2_19_ForwardServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests3S_SPEC2_19_IncludeJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests3S_SPEC2_19_ForwardJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests4_SPEC2_19_IncludeServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests4_SPEC2_19_ForwardServletEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests4_SPEC2_19_IncludeJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <event-definition>
+      <qname>tck:DispatcherTests4_SPEC2_19_ForwardJSPEvent</qname>
+      <value-type>java.lang.String</value-type>
+   </event-definition>
+
+   <public-render-parameter>
+      <identifier>tckPRP1</identifier>
+      <qname>tck:tckPRP1</qname>
+   </public-render-parameter>
+</portlet-app>


Mime
View raw message