Pat*_*a K 5 java jetty embedded-jetty spark-java
我正在使用使用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)由于某些原因不适合我.我仍然得到同样的例外.
堆栈跟踪:
[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)
Run Code Online (Sandbox Code Playgroud)
我必须注意其他方法(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