在NetBeans下运行的WildFly 8.1.0最终安装中,我不断收到以下看似随机的错误:
08:51:09,742 ERROR [io.undertow.request] (default task-40) Blocking request failed HttpServerExchange{ GET /web/faces/javax.faces.resource/dynamiccontent.properties}: java.lang.RuntimeException: java.io.IOException: Broken pipe
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:527)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:287)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_20]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20]
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method) [rt.jar:1.8.0_20]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) [rt.jar:1.8.0_20]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) [rt.jar:1.8.0_20]
at sun.nio.ch.IOUtil.write(IOUtil.java:65) [rt.jar:1.8.0_20]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:470) [rt.jar:1.8.0_20]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:150) [xnio-nio-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:531)
at io.undertow.conduits.ChunkedStreamSinkConduit.flush(ChunkedStreamSinkConduit.java:256)
at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:100)
at org.xnio.channels.Channels.flushBlocking(Channels.java:63) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:625)
at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:451)
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:525)
... 9 more请求的页面加载似乎没有问题,所以除了日志中的异常之外,我没有注意到任何中断。有什么想法吗?
发布于 2015-01-22 23:26:25
我也遇到过类似的问题,多亏了this response的想法,我把它向前推进了一点。我要揭发我的案子。
我使用Java (Java7) (javax.ws.rs)创建REST API并将其部署在JBoss服务器(8.x)上。
我的Api响应以下路径:
/myapi/a/myapi/a?filer=myfilter所以我这样写:
private static final String FILTER = "filter";
@GET
@Path("/a")
@Produces(MediaType.APPLICATION_JSON)
public Object
foo(@Context UriInfo requestInfo) {
LOG.info("Http request: GET /myapi/a");
if (requestParameters.getQueryParameters().containsKey(FILTER)) {
return foo(requestInfo.getQueryParameters().get(FILTER));
}
// no params
return ...
}
public Object foo(List<String> filter) {
LOG.info(" > Requested filter");
return ...;
}但有时我会从服务器(而不是我的代码)收到由java.io.IOException: Broken pipe引起的UT005023: Exception handling request to ... sessionState: org.jboss.resteasy.spi.UnhandledException: Response is committed, can't handle exception异常
在调查它时,我发现了一些非常有趣的事情:它只能在Safari浏览器上重现,而不能从Chrome上重现。那又怎么样?关键是Safari有一个Chrome没有的功能:当Safari自动完成请求时,会发送请求。在按下enter按钮之前,Chrome不会发送请求。这一点很重要,因为只有在以下情况下才会出现错误:
使用Safari的自动完成功能向/a?filter=f
在这一点上,我不知道原因(这与http报头有关) => as stephen-c,问题是您正在尝试做一些需要更改HTTP响应头的事情……在发送标头之后
编辑过的
我几乎可以肯定(99%)我们无法处理该异常。基本上,它是说你丢失了一个请求,作为一个警告,服务器会告诉你你不会处理它。
还有另一种方法可以重新创建异常:尝试将手指放在F5或CMD-R上。您将创建数百个请求...但是您会丢失其中的一些(与池线程、工作线程等相关),并且您将看到这些丢失请求的异常。
我决定不再担心这件事了。
发布于 2019-04-15 16:47:28
发布于 2020-10-18 23:48:42
如果在IE中发送multipart/ form -data请求,则必须将隐藏类型附加到表单,如下所示
<form>
...
<!-- for IE -->
<input type='hidden' name='_4ie' value='for IE'>
</form>https://stackoverflow.com/questions/26061606
复制相似问题