メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

大きなファイルサイズのアップロード時にRequest exceeded size limit! FileUploadBase$SizeLimitExceededException the request was rejected because its size exceeds the configured maximum

タイトル長くてスミマセン。

環境

Wildfly 10.1.0.Final
Struts 2.3.34

最初に解決方法を書いておきます

Wildfly設定 (standalone.xml)

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" max-post-size="1073741824" />

struts.xml

<struts>
<!-- 略 -->
<constant name="struts.multipart.maxSize" value="10485760" /><!-- 10MB -->
<constant name="struts.multipart.parser" value="jakarta-stream" />
<!-- 略 -->
</struts>

※ InterceptorStackにdefaultStackが入っているか、もしくはfileUploadが含まれていること。

messages.properties

struts.message.upload.error.FileSizeLimitExceededException=ファイルサイズが大きすぎます。

説明

Wildflyは大きなサイズのリクエストを受けるとコネクションをターミネートするようになっています。この場合
java.io.IOException: UT000020: Connection terminated as request was larger than 1073741824
がスタックに出力されると思います。(1073741824は設定されている最大サイズ)
Chromeでは ERR_CONNECTION_RESET が表示されているのが確認できます。
まずこの設定されているサイズを大きくするのが、Wildflyの設定(standalone.xml)です。

一方Struts2では、サイズのチェックを行い、サイズオーバーであればエラーとするような設定をstruts.xmlに行います。
struts.multipart.maxSize にサイズを設定します。
10MBであれば、10 * 1024 * 1024 = 10485760 [byte]といった計算をして設定します。

この場合に発生するExceptionは、InterceptorStackのExceptionではハンドリングできないので、エラーメッセージはmessage.propertiesに、struts.message.upload.error.FileSizeLimitExceededException をキーにエラーメッセージを設定します。

スタック

検索用も兼ねて。こんなスタックが出ます。
リクエストサイズが大きすぎる場合にWildflyから出力されるスタック。

HH:mm:SS,SSS ERROR [stderr] (default task-10) java.io.IOException: UT000020: Connection terminated as request was larger than 1073741824
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.conduits.FixedLengthStreamSourceConduit.checkMaxSize(FixedLengthStreamSourceConduit.java:168)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.conduits.FixedLengthStreamSourceConduit.read(FixedLengthStreamSourceConduit.java:229)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.xnio.conduits.ConduitStreamSourceChannel.read(ConduitStreamSourceChannel.java:127)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.channels.DetachableStreamSourceChannel.read(DetachableStreamSourceChannel.java:209)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.HttpServerExchange$ReadDispatchChannel.read(HttpServerExchange.java:2265)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.xnio.channels.Channels.readBlocking(Channels.java:294)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.spec.ServletInputStreamImpl.readIntoBuffer(ServletInputStreamImpl.java:168)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.spec.ServletInputStreamImpl.read(ServletInputStreamImpl.java:144)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:999)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at java.io.InputStream.read(InputStream.java:101)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:617)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:634)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:1023)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:1003)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:154)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest.processUpload(JakartaStreamMultiPartRequest.java:287)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest.parse(JakartaStreamMultiPartRequest.java:248)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:849)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
HH:mm:SS,SSS ERROR [stderr] (default task-10) 	at java.lang.Thread.run(Thread.java:748)
HH:mm:SS,SSS ERROR [stderr] (default task-11) java.io.IOException: UT000020: Connection terminated as request was larger than 1073741824
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.conduits.FixedLengthStreamSourceConduit.checkMaxSize(FixedLengthStreamSourceConduit.java:168)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.conduits.FixedLengthStreamSourceConduit.read(FixedLengthStreamSourceConduit.java:229)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.xnio.conduits.ConduitStreamSourceChannel.read(ConduitStreamSourceChannel.java:127)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.channels.DetachableStreamSourceChannel.read(DetachableStreamSourceChannel.java:209)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.HttpServerExchange$ReadDispatchChannel.read(HttpServerExchange.java:2265)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.xnio.channels.Channels.readBlocking(Channels.java:294)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.spec.ServletInputStreamImpl.readIntoBuffer(ServletInputStreamImpl.java:168)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.spec.ServletInputStreamImpl.read(ServletInputStreamImpl.java:144)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:999)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at java.io.InputStream.read(InputStream.java:101)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:617)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:634)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:1023)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:1003)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:154)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest.processUpload(JakartaStreamMultiPartRequest.java:287)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest.parse(JakartaStreamMultiPartRequest.java:248)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:849)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
HH:mm:SS,SSS ERROR [stderr] (default task-11) 	at java.lang.Thread.run(Thread.java:748)

こちらはStruts2から出力されるサイズオーバーのスタックです。

HH:mm:SS,SSS INFO  [stdout] (default task-8) YYYY/MM/DD HH:mm:SS:SSS WARN  Request exceeded size limit!
HH:mm:SS,SSS INFO  [stdout] (default task-8) org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (13144152) exceeds the configured maximum (10485760)
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:968) ~[commons-fileupload-1.3.2.jar:1.3.2]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310) ~[commons-fileupload-1.3.2.jar:1.3.2]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334) ~[commons-fileupload-1.3.2.jar:1.3.2]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parseRequest(JakartaMultiPartRequest.java:192) ~[struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.processUpload(JakartaMultiPartRequest.java:131) ~[struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parse(JakartaMultiPartRequest.java:92) ~[struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84) [struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:849) [struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138) [struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) [struts2-core-2.3.32.jar:2.3.32]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) [wildfly-undertow-10.1.0.Final.jar!/:10.1.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) [wildfly-undertow-10.1.0.Final.jar!/:10.1.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) [undertow-servlet-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805) [undertow-core-1.4.0.Final.jar!/:1.4.0.Final]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
HH:mm:SS,SSS INFO  [stdout] (default task-8) 	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]

雑感

結局Wildflyで指定しているサイズをオーバーした時はブラウザは
ERR_CONNECTION_RESET になるので、なんだか解決されていない感。

参考

stackoverflow.com

stackoverflow.com

https://teratail.com/questions/67329

Undertow subsystem configuration - WildFly 10 - Project Documentation Editor

ThymeleafのJava 8 LocalDateTime対応で選択変数式th:objectとth:textの実装方法

Java8のLocalDateTimeをThymeleafで使うには

build.gradleにthymeleaf-extras-java8timeを足して
@Configurationの付いたクラス(ThymeleafConfigとか)にjava8TimeDialect()を実装して
htmlのth:textでは"${#temporals.format(myDatetime}, 'yyyy/MM/dd HH:mm')}"と書く方法が定番かと思われます。

(LocalDateTimeでもLocalDateでもLocalTimeでも同じですね。)

選択式変数と組み合わせて使う場合にはちょっと工夫が必要でした。
選択式変数とはforeachのようなシチュエーションで使う構文で、下記のようにth:objectで指定するとループ内ではアスタリスクで指定できるという利点があります。

<table><tr th:each="record : ${records}" th:object="${record}">
  <td th:text="*{value}">
</tr></table>

環境

* Spring Boot 1.5.6
* Thymeleaf 2.1.5
* Thymeleaf Module for Java 8 Time API compatibility 2.1.0.RELEASE

実装

build.gradle (抜粋)
dependencies {
  compile('org.springframework.boot:spring-boot-starter-web')
  compile('org.springframework.boot:spring-boot-starter-thymeleaf')
  compile('org.thymeleaf.extras:thymeleaf-extras-java8time:2.1.0.RELEASE')
  // 略
}
ShowListController.java (抜粋)
  @RequestMapping(method = RequestMethod.GET)
  public String index(Model model) {

    List<MyBean> myList = query(); // 何かしらの検索処理.

    model.addAttribute("myList", myList);

    return "showList";
  }
MyBean.java (抜粋)
@Data
public class MyBean implements Serializable {
  private int myNumber;
  private int myString;
  private LocalDateTime myDatetime;
}
showList.html (抜粋)
<tr th:each="myBean : ${myList}" th:object="${myBean}">
  <td th:text="*{myNumber}"></td>
  <td th:text="*{myString}"></td>
  <!-- こう書くとダメ -->
  <td th:text="${#temporals.format(*{myDatetime}, 'yyyy/MM/dd HH:mm')}"></td>
  <!-- これはまぁOK -->
  <td th:text="${#temporals.format(myList.myDatetime, 'yyyy/MM/dd HH:mm')}"></td>
  <!-- こう書くと良い -->
  <td th:text="*{#temporals.format(myDateTime, 'yyyy/MM/dd HH:mm')}"></td>
</tr>

ダメな方の実装だと
There was an unexpected error (type=Internal Server Error, status=500).
Exception evaluating SpringEL expression: "#temporals.format(*{myDatetime}, 'yyyy/MM/dd HH:mm')" (showList:46)
ってエラーが出てStacktraceは
org.springframework.expression.spel.SpelParseException: Expression [#temporals.format(*{myDatetime}, 'yyyy/MM/dd HH:mm')] @46: EL1070E: Problem parsing left operand
って感じです。

チュートリアルをちょっと変更する感じだと、こう書きがちなんですが、
これは慣れの問題ですかね。

ちなみに
"#{temporals.format(myDatetime, 'yyyy/MM/dd HH:mm')}"
と書いても表示は
??temporals.format_ja??
とか表示されてダメです。(まぁこれは当然ですね)

間違えて
"${#temporals.format(myDatetime, 'yyyy/MM/dd HH:mm')"
と書くと
java.lang.IllegalArgumentException: Cannot apply format on null
になったり、こねくり回してると
org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method format(null,java.lang.String) on null context object
が出たりしますが、
*{#temporals.format(myDateTime, 'yyyy/MM/dd HH:mm')}"
が正解です。

参考

masatoshitada.hatenadiary.jp

qiita.com

JJUG CCC 2017 Spring スライドまとめ(随時更新) #jjug_ccc

まとめました

JJUG CCC 2017 Springの発表資料(スライド)を纏めました。
現在非公開になっているものは見つけ次第、追記していこうと思います。

また、漏れてたり間違ってたり追加があったり後に非公開になったりした場合は @ryoichi_obara までお知らせ頂ければと思います。
スライドが無くて、Togetterがあるものはそちらにリンク貼っていたりします。

A0 日本Javaユーザーグループ 年次総会

www.slideshare.net

ABCD1 JJUG CCC 20th fireside chat

未公開

E1 ふつうのJavaコーディング

F1 Hipsterで学ぶ!Springによるサーバサイド開発手法

GH1 非機能要件とSpring Boot

ABCD2 Java EE 8 and its latest topics

未公開

E2 Java Clientで入門するApache Kafka

www.slideshare.net

F2 エンプラ開発におけるレガシーアプリケーションの巻き取りとモジュール分割の戦い

www.slideshare.net

GH2 Vue.js + Spring Bootで楽しくフルスタック開発やってみた

Vue.js + Spring Bootで楽しくフルスタック開発やってみた

AB3 Scala機械学習基盤PredictionIOとSparkによるレコメンドシステム

CD3 新しいTERASOLUNA Batch Frameworkとは

未公開

E3 Java libraries you can't afford to miss

www.slideshare.net

F3 SpotBugs(FindBugs)による大規模ERPのコード品質改善

www.slideshare.net

GH3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介

www.slideshare.net

I1 全部 Java で作っちゃえ!! Vaadin 8 による "オール Java" Web アプリ開発のしくみと実践

全部 Java で作っちゃえ!😁 Vaadin 8 によるオール Java Web アプリ開発の仕組みと実践

L1 How to use MicroProfile and a way to rebirth Japanese enterprise computing

www.slideshare.net

M1 JavaエンジニアのためのPostgreSQLステップアップ

www.slideshare.net

AB4 ヤフーの広告レポートシステムをSpring Cloud Stream化するまで

www.slideshare.net

CD4 Unified JVM Logging: Java 9 から変わる JVM ログ

未公開

E4 What you need to know about HotSpot and Your Code

未公開

F4 ナビタイムも導入!!ボットで始発・終電案内から観光ガイドまで 〜 Java でも日本語自然言語処理をカンタンに利用可能 Microsoft LUIS!!

docs.com

GH4 Javaエンジニアに知って欲しいRDBアンチパターン

I2 Polyglot on the JVM with Graal

www.slideshare.net

L2 JavaエンジニアのためのScala入門

JavaエンジニアのためのScala入門 #jjug_ccc #ccc_l2 · GitHub

L3 新卒2年目が鍛えられたコードレビュー道場の軌跡

M2 文型さえおさえれば英語を読む力は上がる!

M3 Selenideを使ってみた 〜 ブラウザテスト自動化 〜

AB5 Scalaによるサービス開発現場での継続的リファクタリングの実践

未公開

CD5 Javaエンジニアから見たKotlinの魅力

www.slideshare.net

E5 Javaで実装して学ぶOAuth 2.0!

F5 Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた

www.slideshare.net

GH5 Introduction of Project Jigsaw

www.slideshare.net

I3 Androidアプリ開発からみたRxJavaの使いどころ

L4 SIプロジェクトでよくあるフレームワークのカスタム開発ってまだ必要なの?

未公開

L5 Java8移行は怖くない~エンタープライズ案件でのJava8移行事例について~

www.slideshare.net

M4 今日からDL4J

M5 グラフデータベース入門

www.slideshare.net

AB6 Java8プログラミング ベストプラクティス & きしだが働いてるかどうかIDEのメモリ使用状況から機械学習で判定する

www.slideshare.net

CD6 劇的!データベース・ビフォーアフター 時代はディスクからインメモリーへ――

未公開

E6 Spark + DeepLearning4J の特長と最新動向(仮)

www.slideshare.net

id:Takakiyo 様、お知らせありがとうございます!

F6 U-NEXT学生インターン、過激なJavaの学び方と過激な要求

www.slideshare.net

GH6 Engineers can change the world ~ "世界" で活躍するエンジニアになるために

docs.com

I4 Arachne Unweaved

www.slideshare.net

L6 Javaとアイドルのコラボ!?某アイドルBot開発の裏側

L7 Javaチョットデキルへの道~JavaコアSDKに見る真似したいコード10選~

www.slideshare.net

M6 JavaFXでデスクトップガジェット風プログラムを作る

www.torutk.com

M7 新卒2年目から始めるOSSのススメ 〜明日からできるコミットデビュー〜

www.slideshare.net

AB7 VMの歩む道。Dalvik、ART、そしてJava VM

www.slideshare.net

CD7 マチコ&河村の怒り新党 〜真の最終回〜

未公開

GH7 ハックで生きる:オープンソースで会社を興すには

未公開

I5 Java x Arduinoで始めるIoT / フィジカルコンピューティング

未公開

L8 思ったほど怖くない!Haskell on JVM 超入門

www.slideshare.net

M8 Ordinary Object Pointer について調べてみた