如何通过SparkJava更改Jetty设置? / Form too Large Exception / org.eclipse.jetty.server.Request.maxFormContentSize [英] How to change Jetty settings through SparkJava? / Form too Large Exception / org.eclipse.jetty.server.Request.maxFormContentSize
问题描述
我正在使用使用Jetty 9.0.2的SparkJava 2.2。
我得到Jetty抛出的Form too large异常。如果我直接使用Jetty,我已经知道如何解决这个问题:
http://www.eclipse.org/jetty/documentation/current/setting-form-size.html
问题:
现在我需要找到一种方法来改变 org.eclipse.jetty.server.Request.maxFormContentSize
通过SparkJava进行设置。有没有办法做到这一点?
我必须注意其他方法(JVM_OPTS,System.setProperty)由于某些原因不适合我。我仍然得到同样的例外。
Stacktrace:
[qtp1858644635-27]错误spark.webserver.MatcherFilter -
java.lang.IllegalStateException:在org.eclipse.jetty.server.Request.extractParameters(Request.java:334)上格式太大308913> 200000
)
at org.eclipse.jetty.server.Request.getParameterMap(Request.java:765)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:193)
at spark。 QueryParamsMap。< init>(QueryParamsMap.java:59)
at spark.Request.initQueryMap(Request.java:364)
at spark.Request.queryMap(Request.java:349)
at spark.webserver.RequestWrapper.queryMap(RequestWrapper.java:213)
at com.xyz.analytics.webservice.RequestTools.getRequestQueryMap(RequestTools.java:27)
at com.xyz.analytics。 webservice.RequestTools.getMandrillQueryParams(RequestTools.java:22)
at com.xyz.analytics.webservice.Endpoints.lambda $ initiateEnd pointsAndExceptionHandlers $ 2(Endpoints.java:61)
at com.xyz.analytics.webservice.Endpoints $$ Lambda $ 3 / 1485697819.handle(未知来源)
at spark.SparkBase $ 1.handle(SparkBase.java :311)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:159)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
at org.eclipse。 jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse。 jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:451)
at org.eclipse.jetty。 server.HttpChannel.run(HttpChannel.java:252)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
at org.eclipse.jetty.io.AbstractConnection $ ReadCallback.run(AbstractConnection.java:240)
at org.eclipse.jetty.util.thread.QueuedTh readPool.runJob(QueuedThreadPool.java:596)
at org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:527)
at java.lang.Thread.run(Thread .java:745)
编辑:
我必须注意其他方法(JVM_OPTS,System.setProperty)对我不起作用。
好吧,调试器甚至不会停在 org.eclipse.jetty.server中设置的任何断点处。 handlerContextHandler
...当它停在 org.eclipse.jetty.server.Request
断点时,_context属性为null。似乎SparkJava以不同的方式处理它。死胡同。
在设置 maxFormContentSize = 200000;
之前,请求还要做一件事。它检查_channel.getServer()。getAttribute(org.eclipse.jetty.server.Request.maxFormContentSize)。
除了服务器的属性集合为空......我没有看到任何添加任何属性的方法。 Jetty Server由SparkBase.init()创建,它调用SparkServer.ignite()。
但它对我们没什么帮助。要打破我们自己的调整并不容易。看起来很无望。
大家好消息:)
Spark 2.6(2017年4月发布)嵌入式Jetty是完全可配置!
发行说明: http://sparkjava.com/news#spark-26-released
有关详细信息,请参阅原始的未来请求: https://github.com/perwendel/spark/issues/314
和相关的拉取请求:
https://github.com/perwendel/spark/pull/813
<请注意,也可以在另一个Web服务器而不是嵌入式Jetty服务器上运行Spark:
http://sparkjava.com/documentation#other-web-server
I'm using SparkJava 2.2 which is using Jetty 9.0.2.
I'm getting "Form too large" exception which is thrown by Jetty. I already know how to solve this problem if I was using Jetty directly:
http://www.eclipse.org/jetty/documentation/current/setting-form-size.html
PROBLEM :
Now I need to find a way to change org.eclipse.jetty.server.Request.maxFormContentSize
setting through SparkJava. Is there a way to do this?
I must note that other methods (JVM_OPTS, System.setProperty) do not work for me for some reason. I'm still getting the same exception.
Stacktrace:
[qtp1858644635-27] ERROR spark.webserver.MatcherFilter -
java.lang.IllegalStateException: Form too large 308913>200000
at org.eclipse.jetty.server.Request.extractParameters(Request.java:334)
at org.eclipse.jetty.server.Request.getParameterMap(Request.java:765)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:193)
at spark.QueryParamsMap.<init>(QueryParamsMap.java:59)
at spark.Request.initQueryMap(Request.java:364)
at spark.Request.queryMap(Request.java:349)
at spark.webserver.RequestWrapper.queryMap(RequestWrapper.java:213)
at com.xyz.analytics.webservice.RequestTools.getRequestQueryMap(RequestTools.java:27)
at com.xyz.analytics.webservice.RequestTools.getMandrillQueryParams(RequestTools.java:22)
at com.xyz.analytics.webservice.Endpoints.lambda$initiateEndpointsAndExceptionHandlers$2(Endpoints.java:61)
at com.xyz.analytics.webservice.Endpoints$$Lambda$3/1485697819.handle(Unknown Source)
at spark.SparkBase$1.handle(SparkBase.java:311)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:159)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:451)
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
at java.lang.Thread.run(Thread.java:745)
Edit:
I must note that other methods (JVM_OPTS, System.setProperty) do not work for me.
Well, debugger doesn't even stop at any breakpoint set within org.eclipse.jetty.server.handlerContextHandler
... Plus when it stops at org.eclipse.jetty.server.Request
breakpoints, _context property is null. Seems that SparkJava is handling it differently. Dead end.
Request does one more thing before setting maxFormContentSize = 200000;
. It checks _channel.getServer().getAttribute("org.eclipse.jetty.server.Request.maxFormContentSize").
Except Server's attribute collection is empty... And I don't see any way to add any attribute. Jetty Server is created by SparkBase.init() which calls SparkServer.ignite().
But it doesn't help us much. It's not easy to "break in" to make our own adjustments. It seems pretty hopeless.
Good news everyone :) In Spark 2.6 (released April 2017) embedded Jetty is fully configurable! Release notes: http://sparkjava.com/news#spark-26-released
See the original future request for more details here: https://github.com/perwendel/spark/issues/314 and related pull request here: https://github.com/perwendel/spark/pull/813
NOTE that it is also possible to run Spark on another web server instead of the embedded Jetty server: http://sparkjava.com/documentation#other-web-server
这篇关于如何通过SparkJava更改Jetty设置? / Form too Large Exception / org.eclipse.jetty.server.Request.maxFormContentSize的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!