请求io.undertow.servlet.spec.HttpServletRequestImpl不是原始的或包装器

时间:2014-09-03 12:12:52

标签: rest wildfly undertow

我尝试将请求从WildFly 8.1中的Rest方法转发到JSP页面,但这会抛出异常:

Caused by: java.lang.IllegalArgumentException: UT010023: Request io.undertow.servlet.spec.HttpServletRequestImpl@88ad706 was not original or a wrapper
    at io.undertow.servlet.spec.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:103) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at my.domain.RestResource.myRestMethod(RestResource.java:525) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_51]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_51]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_51]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_51]
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.8.Final.jar:]
    ... 31 more

代码:

@GET
@Path("/my-path")
public void myRestMethod(@Context final HttpServletResponse response,
        @Context final HttpServletRequest request) throws ServletException, IOException {

     RequestDispatcher dispatcher = request.getRequestDispatcher("/path/to/jsp");
     dispatcher.forward(request, response);
}

这段代码在Jboss 7.1中没有问题。

1 个答案:

答案 0 :(得分:7)

我没有足够的调试来理解为什么/何时添加了这些检查(显然这是Servlet规范所要求的),但是Undertow中有一个选项可以禁用它:

standalone/configuration/standalone.xml文件中更改servlet-container XML元素,使其具有属性allow-non-standard-wrappers="true"

有关详细信息,请查看the official documentationServlet container configuration部分)。