<?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="V2ExceptionTests">
   <portlet>
      <portlet-name>ExceptionTests_PortletModeException_ApiRender</portlet-name>
      <portlet-class>javax.portlet.tck.portlets.ExceptionTests_PortletModeException_ApiRender</portlet-class>
      <expiration-cache>0</expiration-cache>
      <supports>
         <mime-type>text/html</mime-type>
      </supports>
      <supported-locale>en_US</supported-locale>
      <portlet-info>
         <title>ExceptionTests_PortletModeException_ApiRender</title>
      </portlet-info>
   <supported-public-render-parameter>tckPRP1</supported-public-render-parameter>
   </portlet>

   <portlet>
      <portlet-name>ExceptionTests_UnavailableException_ApiRender</portlet-name>
      <portlet-class>javax.portlet.tck.portlets.ExceptionTests_UnavailableException_ApiRender</portlet-class>
      <expiration-cache>0</expiration-cache>
      <supports>
         <mime-type>text/html</mime-type>
      </supports>
      <supported-locale>en_US</supported-locale>
      <portlet-info>
         <title>ExceptionTests_UnavailableException_ApiRender</title>
      </portlet-info>
   <supported-public-render-parameter>tckPRP1</supported-public-render-parameter>
   </portlet>

   <portlet>
      <portlet-name>ExceptionTests_ValidatorException_ApiRender</portlet-name>
      <portlet-class>javax.portlet.tck.portlets.ExceptionTests_ValidatorException_ApiRender</portlet-class>
      <expiration-cache>0</expiration-cache>
      <supports>
         <mime-type>text/html</mime-type>
      </supports>
      <supported-locale>en_US</supported-locale>
      <portlet-info>
         <title>ExceptionTests_ValidatorException_ApiRender</title>
      </portlet-info>
   <supported-public-render-parameter>tckPRP1</supported-public-render-parameter>
   </portlet>

   <portlet>
      <portlet-name>ExceptionTests_WindowStateException_ApiRender</portlet-name>
      <portlet-class>javax.portlet.tck.portlets.ExceptionTests_WindowStateException_ApiRender</portlet-class>
      <expiration-cache>0</expiration-cache>
      <supports>
         <mime-type>text/html</mime-type>
      </supports>
      <supported-locale>en_US</supported-locale>
      <portlet-info>
         <title>ExceptionTests_WindowStateException_ApiRender</title>
      </portlet-info>
   <supported-public-render-parameter>tckPRP1</supported-public-render-parameter>
   </portlet>



   <public-render-parameter>
      <identifier>tckPRP1</identifier>
      <qname>tck:tckPRP1</qname>
   </public-render-parameter>
</portlet-app>
