Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Vert.x中呈现Thymeleaf模板时引发ClosedByInterruptException_Java_Thymeleaf_Vert.x_Interrupted Exception - Fatal编程技术网

Java 在Vert.x中呈现Thymeleaf模板时引发ClosedByInterruptException

Java 在Vert.x中呈现Thymeleaf模板时引发ClosedByInterruptException,java,thymeleaf,vert.x,interrupted-exception,Java,Thymeleaf,Vert.x,Interrupted Exception,我想征求关于在Vert.x中编写模板处理代码的最佳方法的建议,以避免closedbyinterrupexception。我们处理的模板并不复杂,但中建议的方法偶尔会产生下面提到的异常 Vert.x代码如下所示: engine.getThymeleafTemplateEngine().clearTemplateCache(); fileKeyObservable.toList().doError(e->LOGGER.error(“无法获取旅程文档文件”,e)).subscribe(fileKeys

我想征求关于在Vert.x中编写模板处理代码的最佳方法的建议,以避免
closedbyinterrupexception
。我们处理的模板并不复杂,但中建议的方法偶尔会产生下面提到的异常

Vert.x代码如下所示:

engine.getThymeleafTemplateEngine().clearTemplateCache();
fileKeyObservable.toList().doError(e->LOGGER.error(“无法获取旅程文档文件”,e)).subscribe(fileKeys->{
routingContext.put(“yamlFiles”,generateYamlFiles(filekey));
render(routingContext,“templates/index.html”,参考资料->{
if(resource.successed()){
debug(“成功生成模板”);
routingContext.response().putHeader(内容类型、文本HTML值).end(resource.result());
}否则{
错误(“未能呈现模板,原因:{}”,resource.cause());
routingContext.fail(resource.cause());
}
});
});
下面是异常堆栈跟踪:

2018-05-21 14:14:44,964 [RxIoScheduler-19] ERROR org.thymeleaf.TemplateEngine - [THYMELEAF][RxIoScheduler-19] Exception processing template "templates/index.html": io.vertx.core.VertxException: java.nio.channels.ClosedByInterruptException
io.vertx.core.VertxException: io.vertx.core.VertxException: java.nio.channels.ClosedByInterruptException
    at io.vertx.ext.web.impl.Utils.readFileToString(Utils.java:363) ~[vertx-web-3.5.1.jar:3.5.1]
    at io.vertx.ext.web.impl.Utils.readFileToString(Utils.java:352) ~[vertx-web-3.5.1.jar:3.5.1]
    at io.vertx.ext.web.templ.impl.ThymeleafTemplateEngineImpl$ResourceTemplateResolver.computeTemplateResource(ThymeleafTemplateEngineImpl.java:177) ~[vertx-web-templ-thymeleaf-3.5.1.jar:3.5.1]
    at org.thymeleaf.templateresolver.AbstractTemplateResolver.resolveTemplate(AbstractTemplateResolver.java:356) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:840) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:608) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1087) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1056) ~[thymeleaf-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at io.vertx.ext.web.templ.impl.ThymeleafTemplateEngineImpl.render(ThymeleafTemplateEngineImpl.java:105) ~[vertx-web-templ-thymeleaf-3.5.1.jar:3.5.1]
    at io.vertx.ext.web.templ.TemplateEngine.render(TemplateEngine.java:48) ~[vertx-web-3.5.1.jar:3.5.1]
    at com.theglue.requesthandler.DynamicIndexDocumentationHandler.lambda$handle$2(DynamicIndexDocumentationHandler.java:40) ~[request-handler-latest.jar:?]
    at rx.internal.util.ActionSubscriber.onNext(ActionSubscriber.java:39) [rxjava-1.3.8.jar:1.3.8]
    at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onNext(OnSubscribeDoOnEach.java:101) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.producers.SingleDelayedProducer.emit(SingleDelayedProducer.java:102) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.producers.SingleDelayedProducer.setValue(SingleDelayedProducer.java:85) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorToObservableList$1.onCompleted(OperatorToObservableList.java:98) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onCompleted(OnSubscribeMap.java:97) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onCompleted(OperatorMerge.java:860) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onCompleted(OperatorMerge.java:860) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onCompleted(OperatorMerge.java:860) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onCompleted(OperatorMerge.java:281) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onCompleted(OnSubscribeMap.java:97) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onCompleted(OperatorMerge.java:281) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onCompleted(OnSubscribeMap.java:97) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated(OperatorObserveOn.java:281) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:216) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230) [rxjava-1.3.8.jar:1.3.8]
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) [rxjava-1.3.8.jar:1.3.8]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_171]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_171]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_171]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_171]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: io.vertx.core.VertxException: java.nio.channels.ClosedByInterruptException

有没有更好的方法来编写模板处理代码,这样我们就不会出现线程中断异常?Vert.x示例代码似乎建议使用与我们相同的方法

错误的不是Vert.x代码示例。系统中发生了一些情况,因此在通道上执行某些IO操作时,处理模板的线程被中断(因此出现ClosedByInterruptException)。我建议您在GitHub上创建一个小型的复制器,并在Vert.x用户论坛上共享。您能告诉我您在哪里调用提供的代码片段吗?什么是
fileKeyObservable
observable对象,您的index.html是什么样子的?