5

Jetty 9.0.2 を使用している SparkJava 2.2 を使用しています。

Jetty によってスローされる「フォームが大きすぎます」という例外が発生します。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)

編集:

他の方法 (JVM_OPTS、System.setProperty) は機能しないことに注意してください。

まあ、デバッガーは内部で設定されたブレークポイントでも停止しませんorg.eclipse.jetty.server.handlerContextHandler...さらに、org.eclipse.jetty.server.Requestブレークポイントで停止すると、_context プロパティは null になります。SparkJava は別の方法で処理しているようです。デッドエンド。

Request は、設定する前にもう 1 つのことを行いますmaxFormContentSize = 200000;。_channel.getServer().getAttribute("org.eclipse.jetty.server.Request.maxFormContentSize") をチェックします。サーバーの属性コレクションが空であることを除いて...そして、属性を追加する方法がわかりません。Jetty サーバーは、SparkServer.ignite() を呼び出す SparkBase.init() によって作成されます。しかし、それはあまり役に立ちません。自分で調整するために「侵入」するのは簡単ではありません。それはかなり絶望的なようです。

4

3 に答える 3

4

Spark 2.2 では不可能

ServerConnectorの作成は SparkServerにハードコードされています。これらの値を後で変更することはできません。サーバーの起動前に ServerConnector に渡す必要があります。

構成可能にするために、Spark でバグを報告することをお勧めします。

https://github.com/perwendel/spark/issues

于 2015-08-03T21:49:30.380 に答える
0

Well, having access to the server object, you can always do something like:

server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", 1024 * 1024);

Hope this helps!

于 2017-06-18T01:52:43.893 に答える