質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Q&A

解決済

2回答

4600閲覧

POST送信するサイズの上限設定ができない(Play Framework 2.2)

miyasaka

総合スコア271

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

0グッド

0クリップ

投稿2017/01/24 03:44

###前提・実現したいこと
Play Framework 2.2でリモートAPIに対してpostする際にパラメータのサイズが大きいためか以下のエラーが発生してしまいます。
※言葉足らずの点もあるかと思いますので、何かあればご指摘いただければ幸いです。

###発生している問題・エラーメッセージ

[error] p.nettyException - Exception caught in Netty org.jboss.netty.handler.codec.frame.TooLongFrameException: An HTTP line is larger than 4096 bytes. at org.jboss.netty.handler.codec.http.HttpMessageDecoder.readLine(HttpMessageDecoder.java:642) ~[netty.jar:na] at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:182) ~[netty.jar:na] at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:101) ~[netty.jar:na] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:500) ~[netty.jar:na] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:485) ~[netty.jar:na] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[netty.jar:na] [ERROR] [01/24/2017 11:55:37.458] [application-akka.actor.default-dispatcher-3] [akka://application/user/$a] Remotely Closed [id: 0x6fa5d263, /127.0.0.1:56363 :> localhost/127.0.0.1:9000] java.io.IOException: Remotely Closed [id: 0x6fa5d263, /127.0.0.1:56363 :> localhost/127.0.0.1:9000] at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.channelClosed(NettyAsyncHttpProvider.java:1388) at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:88) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) at org.jboss.netty.handler.stream.ChunkedWriteHandler.handleUpstream(ChunkedWriteHandler.java:142) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) at org.jboss.netty.handler.codec.replay.ReplayingDecoder.cleanup(ReplayingDecoder.java:570) at org.jboss.netty.handler.codec.frame.FrameDecoder.channelClosed(FrameDecoder.java:371) at org.jboss.netty.handler.codec.http.HttpClientCodec$Decoder.channelClosed(HttpClientCodec.java:221) at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:88) at org.jboss.netty.handler.codec.http.HttpClientCodec.handleUpstream(HttpClientCodec.java:92) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) at org.jboss.netty.channel.Channels.fireChannelClosed(Channels.java:468) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:376) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:93) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109) at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

###該当のソースコード

String url = func.url; String req = paramList.get(0).paramText; Promise<WS.Response> response = WS.url(url) .setQueryParameter("str", req) .post("content");

###試したこと
maxInitialLineLengthの初期値が4096 bytesであり、それより大きいサイズの場合にTooLongFrameExceptionがでてしまうため、http.netty.maxInitialLineLengthを十分に大きく設定することで解決しようとしていますがどのように設定するのかわからずつまっています。application.confでは設定できないので、起動オプション等で指定するのかと思っていますが・・・
参考)https://www.playframework.com/documentation/2.2.x/ProductionConfiguration

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

リクエストをPOSTで送信するのであれば、setQueryParameterは不要かと思います。
postメソッドの引数にパラメータをJSONなどで渡してもTooLongFrameExceptionは発生するでしょうか。

java

1Promise<WS.Response> response = WS.url(url).post(Json.newObject().put("str", req));

投稿2017/01/24 08:49

makotribe

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyasaka

2017/01/24 16:20

Promise<WS.Response> response = WS.url(url).post(Json.newObject().put("str", req)); にて実装したところTooLongFrameExceptionは発生しなくなりました。 HttpRequestDecoderで初期値を設定する方法はまだわかっていませんが、 ひとまず本来やりたいことはできるようになりました。ありがとうございます。
guest

0

動作環境が準備できなかったのですけれども、調査結果だけでもご回答いたします

play.server.play.server#getPipeline()メソッドで行っている new HttpRequestDecoder()に引数を指定すれば上限を引き上げられます。たぶん。
Play framework 1.2.7 で “Request exceeds 8192 bytes”が発生した - huruyosi’s blog

とありますとおり、HttpRequestDecoderのコンストラクタにしていすれば、万事OKではないでしょか?
HttpRequestDecoder (Netty API Reference (4.0.43.Final))

ソースにあります
HttpRequestDecoder()
Creates a new instance with the default maxInitialLineLength (4096), maxHeaderSize (8192), and maxChunkSize (8192).
HttpRequestDecoder(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize)

となっていますので、この修正で問題とされている部分は解消されると考えられます

投稿2017/01/24 04:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyasaka

2017/01/24 07:09

調査ありがとうございます。 調べていただいた方法でいけそうですが、playのバージョンの問題か、見方がわるいのか、HttpRequestDecoderをnewしている場所(書き換えるべき場所)はわかりませんでした。 jarを作り直すイメージでしょうか。それともどこかで別途引数ありのコンストラクタを使用してnewし、それを使用するイメージでしょうか。理解が及ばずもうしわけありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問