禁用 JAX-RS 运行时环境

有些情况下,必须禁用 Java™ API for RESTful Web Services (JAX-RS) 运行时环境。禁用 JAX-RS 运行时环境时,JAX-RS 功能将不可用,包括基本 JAX-RS 运行时功能、Enterprise JavaBeans (EJB) 运行时集成、Java 上下文和依赖关系注入 (JCDI) 运行时集成以及 Servlet 3.0 Web 容器集成。

关于此任务

通过禁用 JAX-RS 运行时环境,将不再执行任何与 JAX-RS 相关的应用程序处理,包括处理带有已扫描的 JAX-RS 注释、EJB 元数据和 JCDI Bean 启用的处理。JAX-RS 运行时环境不用于处理指向和来自 Web 容器的请求与响应。

最佳实践 最佳实践: 禁用 JAX-RS 运行时环境不会对 JAX-RS 注释禁用基于 Servlet 3.0 的注释扫描,例如 javax.ws.rs.Path。要禁用注释扫描,请设置 metadata-complete 属性。如果禁用了注释扫描,那么会对 JAX-RS 外部的所有其他组件禁用该功能。bprac

IBM® JAX-RS 运行时环境的显式插入点是 com.ibm.websphere.jaxrs.server.IBMRestServlet Servlet 类和 com.ibm.websphere.jaxrs.server.IBMRestFilter 过滤器类。如果在 Web 模块的 web.xml 文件中将这些类指定为 Servlet 类或 Servlet 过滤器,那么 IBM JAX-RS 运行时环境将用于处理指向该 Servlet 的请求。

要禁止 JAX-RS 运行时环境执行此操作,请将那些类替换为可以处理指向 Servlet 的预期请求的任何其他 Servlet 或过滤器类,或者从 web.xml 文件中移除整个 Servlet。

避免故障 避免故障:IBMRestServlet 类替换为另一个类可能会修改应用程序中的现有行为。移除整个 Servlet 会导致不处理请求。gotcha

即使未显式使用 com.ibm.websphere.jaxrs.server.IBMRestServletcom.ibm.websphere.jaxrs.server.IBMRestFilter 类,JAX-RS 集成运行时环境仍可能会处理该应用程序。 例如,如果 Web 模块的 web.xml 文件基于 Servlet 3.0 并且满足相应的条件(按照 JSR-311 规范),那么 JAX-RS 集成运行时环境会处理带有 JAX-RS 注释的已扫描类,并可能会插入用于处理对应用程序中 JAX-RS 资源的请求的 Servlet。

要禁用此功能和其他功能(例如 EJB 和 JCDI 集成),请在应用程序服务器上设置com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine 定制 Java 虚拟机 (JVM) 属性并将其值设置为 true

过程

  1. web.xml 文件移除对 IBMRestServletIBMRestFilter 的引用。 以下示例说明了应用程序中的简单 web.xml 文件,该应用程序使用 IBM JAX-RS 运行时环境:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd"
        	version="3.0">
        <servlet>
            <servlet-name>MyRestApplication1</servlet-name>
            <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.ibm.websphere.jaxrs.example.Application1</param-value>
            </init-param>
            <init-param>
                <param-name>requestProcessorAttribute</param-name>
                <param-value>MyRestApplication1RequestProcessorAttribute</param-value>
            </init-param>
            		<load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>MyNonJAXRSApplication</servlet-name>
            <servlet-class>com.ibm.websphere.example.NonJAXRSServlet</servlet-class>
            		<load-on-startup>1</load-on-startup>
        </servlet>
        	<filter>
            <filter-name>MyRestApplication2</filter-name>
            <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.ibm.websphere.jaxrs.example.Application2</param-value>
            </init-param>
            <init-param>
                <param-name>requestProcessorAttribute</param-name>
                <param-value>MyRestApplication2RequestProcessorAttribute</param-value>
            </init-param>
        	</filter>
        <servlet-mapping>
            <servlet-name>MyRestApplication1</servlet-name>
            <url-pattern>/jaxrsapp1/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>MyNonJAXRSApplication</servlet-name>
            <url-pattern>/nonjaxrsapp/*</url-pattern>
        </servlet-mapping>
        	<filter-mapping>
            <filter-name>MyRestApplication2</servlet-name>
            <url-pattern>/jaxrsapp2/*</url-pattern>
        	</filter-mapping>
    <web-app>
    以下示例说明了 web.xml 文件在移除对 IBMRestServletIBMRestFilter 类的引用之后的外观:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd"
        	version="3.0">
        <servlet>
            <servlet-name>MyNonJAXRSApplication</servlet-name>
            <servlet-class>com.ibm.websphere.example.NonJAXRSServlet</servlet-class>
            		<load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>MyNonJAXRSApplication</servlet-name>
            <url-pattern>/nonjaxrsapp/*</url-pattern>
        </servlet-mapping>
    </web-app>
  2. 在应用程序服务器上设置com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine 定制 JVM 属性并将其值设置为 true
  3. 重新启动应用程序服务器以使定制 JVM 属性生效。

结果

您已阻止 JAX-RS 运行时环境处理应用程序。


指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_disable_runtime
文件名:twbs_jaxrs_disable_runtime.html