【发布时间】:2013-08-12 09:25:19
【问题描述】:
我有 JAX-RS JSON 通道:
@Path("/data")
public class DataChannel {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getGridData(@HeaderParam("Range") String rangeHeader) {
问题是(通常)在第一次调用时我从 Wink 的 HtmlProvider 中得到了异常,而随后的调用被正确处理并返回 JSON:
0000006f 小服务程序 E com.ibm.ws.webcontainer.servlet.ServletWrapper 服务 SRVE0068E: 一个 servlet 的服务方法之一引发了异常 应用程序 [qmslmsv_ear] 中的 [de.datev.qmrzsv.rest.ApplicationConfig]。 创建异常:[javax.ws.rs.WebApplicationException: com.ibm.ws.jsp.webcontainerext.JSPErrorReport: JSPG0036E: 未能 在以下位置找到资源 /HtmlDefaultRepresentation/defaultHtmlEntry.jsp org.apache.wink.server.internal.providers.entity.html.HtmlProvider.include(HtmlProvider.java:78) 在 org.apache.wink.server.internal.providers.entity.html.HtmlProvider.writeTo(HtmlProvider.java:112) 在 org.apache.wink.server.internal.providers.entity.html.HtmlProvider.writeTo(HtmlProvider.java:46) 在 org.apache.wink.server.internal.providers.entity.html.HtmlSyndEntryProvider.writeTo(HtmlSyndEntryProvider.java:81) 在 org.apache.wink.server.internal.providers.entity.html.HtmlSyndEntryProvider.writeTo(HtmlSyndEntryProvider.java:38) 在 org.apache.wink.common.internal.providers.entity.FormatedExceptionProvider.writeTo(FormatedExceptionProvider.java:108) 在 org.apache.wink.common.internal.providers.entity.FormatedExceptionProvider.writeTo(FormatedExceptionProvider.java:48) 在 org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:199) 在 org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.internal.log.Responses.handleResponse(Responses.java:90) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26) 在 org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) 在 org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75) 在 org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60) 在 org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:232) 在 org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154) 在 org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:124) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1225) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:775) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:457) 在 com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032) 在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3761) 在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) 在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:975) 在 com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 在 com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) 在 com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:87) 在 com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 在 com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 在 com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 在 com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 在 com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 在 com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 在 com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1815) 原因: com.ibm.ws.jsp.webcontainerext.JSPErrorReport: JSPG0036E: 未能 在以下位置找到资源 /HtmlDefaultRepresentation/defaultHtmlEntry.jsp com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:447) 在 com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.getServletWrapper(AbstractJSPExtensionProcessor.java:338) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:965) 在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384) 在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:548) 在 org.apache.wink.server.internal.providers.entity.html.HtmlProvider.include(HtmlProvider.java:75) ... 58 更多原因:java.io.FileNotFoundException:JSPG0036E: 找不到资源 /HtmlDefaultRepresentation/defaultHtmlEntry.jsp ... 64 更多
运行时环境是 WebSphere server 8.5。
看起来在第一次选择错误的提供者时,标头明确指出应该使用 JSON 作为响应。从客户端发送的 HTTP 标头也隐含了 JSON 是预期的状态:
接受 text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Encoding gzip, deflate Accept-Language en,de;q=0.5 内容类型应用程序/json
是什么导致了这个问题以及如何避免它?
【问题讨论】:
标签: java json websphere jax-rs apache-wink