Appendix B

## B Packaging the Test Applications in Servlet-Compliant WAR Files With VI-Specific Information

The Java Servlet 4.0 specification specifies how Java Servlet applications are to be published in a Java SE environment, JAX-WS endpoint, or Servlet–compliant Web container.

Java Servlet TCK test application classes that are to be published in a Java SE environment are located under `$TS_HOME/classes`.

The Java Servlet TCK comes with prebuilt test WAR files for deployment on Java EE 8 RI , which provides a Servlet–compliant Web container. The WAR files are Eclipse GlassFish 5.0-specific, with Eclipse GlassFish 5.0’s servlet class and Eclipse GlassFish 5.0’s servlet defined in the `web.xml` deployment descriptor. To run the TCK tests against the VI in a Servlet–compliant Web container, the tests need to be repackaged to include the VI-specific servlet, and the VI-specific servlet must be defined in the deployment descriptor.

The Java Servlet TCK makes it easier for the vendor by including template WAR files that contain all of the necessary files except for the VI-specific servlet adaptor class. The Java Servlet TCK provides a tool to help with the repackaging task.

This appendix contains the following sections:

- Overview

- Creating the VI-Specific Servlet–Compliant WAR Files

### B.1 Overview

The set of prebuilt archives and classes that ship with the Java Servlet TCK were built using the Reference Implementation, and must be deployed on Java EE 8 RI and run against the Eclipse GlassFish 5.0 RI.

The prebuilt Eclipse GlassFish 5.0-specific Servlet–compliant WAR files are located under $TS_HOME`/dist`, and have `jersey` as part of their name; for example:

    $TS_HOME/dist/com/sun/ts/tests/jaxrs/ee/rs/get/jaxrs_rs_get_web.war.jersey

The names are made unique by including `jersey` to minimize the chances that the files will be overwritten or modified.

The Vendor must create VI-specific Servlet–compliant WAR files if the Vendor chooses to publish on a Servlet–compliant Web container, so that the VI-specific Servlet class will be included instead of the Eclipse GlassFish 5.0-specific Servlet class.

### B.2 Creating the TCK VI-Specific Servlet–Compliant WAR Files

All resource and application class files are already compiled. The Vendor needs to package these files. All tests also come with a `web.xml.template` file to be used for generating deployment descriptor files with a VI-specific Servlet definition.

Each test that has a Java Servlet resource class to publish comes with a template deployment descriptor file. For example, the file `$TS_HOME/src/com/sun/ts/tests/jaxrs/ee/rs/get/web.xml.template` contains the following elements:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" \
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee \
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <servlet>
            <servlet-name>CTSJAX-RSGET</servlet-name>
            <servlet-class>servlet_adaptor</servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.sun.ts.tests.jaxrs.ee.rs.get.TSAppConfig</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>CTSJAX-RSGET</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    </web-app>

In this example, the `<servlet-class>` element has a value of `servlet_adaptor`, which is a placeholder for the implementation-specific Servlet class. A Eclipse GlassFish 5.0-specific deployment descriptor also comes with the Java Servlet TCK, and has the values for the `com.sun.jersey.spi.container.servlet.ServletContainer`:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" \
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee \
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <servlet>
            <servlet-name>CTSJAX-RSGET</servlet-name>
            <servlet-class>
                org/glassfish/jersey/servlet/ServletContainer
            </servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.sun.ts.tests.jaxrs.ee.rs.get.TSAppConfig</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>CTSJAX-RSGET</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>30</session-timeout>
            </session-config>
    </web-app>

The Java Servlet TCK provides a tool, `${ts.home}/bin/xml/impl/glassfish/jersey.xml`, for the Java EE 8 RI that you can use as a model to help you create your own VI-specific Web test application.

#### B.2.1 To Create a VI-Specific Deployment Descriptor

1. Create a VI handler file.
   Create a VI-specific handler file `$TS_HOME/bin/xml/impl/${`impl.vi`}/`jaxrs_impl_name`.xml` if one does not already exist. Make sure the `jaxrs_impl_name` property is set in the `<TS_HOME>/bin/ts.jte`, file and that it has a unique name so no file will be overwritten.

2. Set the VI Servlet class property.
   Set the `servlet_adaptor` property in the `<TS_HOME>/bin/ts.jte` file. This property will be used to set the value of the `<servlet-class>` element in the deployment descriptor.

3. Create VI Ant tasks.
   Create a `update.jaxrs.wars` target in the VI handler file. Reference this `update.jaxrs.wars` target in the `jersey.xml` file.
   This target will create a `web.xml.${`jaxrs_impl_name`}` for each test that has a deployment descriptor template. The `web.xml.${`jaxrs_impl_name`}` will contain the VI-specific Servlet class name. It will also create the test WAR files under `$TS_HOME/dist`; for example:

       ls $TS_HOME/dist/com/sun/ts/tests/jaxrs/ee/rs/get/
       jaxrs_rs_get_web.war.jersey
       jaxrs_rs_get_web.war.${impl_name}

4. Change to the `$TS_HOME/bin` directory and execute the `update.jaxrs.wars` Ant target.
   This creates a `web.xml.`VI_name file for each test based on the VI’s servlet class name and repackage the tests.

Copyright © 2018, Oracle and/or its affiliates. All rights reserved.