2016-05-03 3 views
2

私はPlay 2.2.xコードのスニペット以下:Play WS例外:java.lang.IllegalArgumentException:nameには、禁止されている以下の文字のいずれかが含まれています:=、;: t r n v f:エージェント、

def call(server: String, api: String) = { 
    import play.api.libs.ws._ 
    import scala.concurrent.Await 
    import scala.concurrent.duration._ 
    val request = WS.url(server + api) 
    Await.result(request.get(), 1 minute) 
} 

私はこのエラーを取得しています:

java.lang.IllegalArgumentException: name contains one of the following prohibited characters: =,;: \t\r\n\v\f: Agent, 
     at org.jboss.netty.handler.codec.http.HttpCodecUtil.validateHeaderName(HttpCodecUtil.java:38) 
     at org.jboss.netty.handler.codec.http.HttpHeaders.validateHeaderName(HttpHeaders.java:834) 
     at org.jboss.netty.handler.codec.http.HttpHeaders.addHeader(HttpHeaders.java:838) 
     at org.jboss.netty.handler.codec.http.DefaultHttpMessage.addHeader(DefaultHttpMessage.java:44) 
     at org.jboss.netty.handler.codec.http.HttpMessageDecoder.readHeaders(HttpMessageDecoder.java:496) 
     at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:193) 
     at org.jboss.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:143) 
     at org.jboss.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:127) 
     at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:500) 
     at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) 
     at org.jboss.netty.handler.codec.http.HttpClientCodec.handleUpstream(HttpClientCodec.java:92) 
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) 
     at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) 
     at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) 
     at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) 
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
     at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
     at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) 
     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 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) 

私が間違って何をしているのですか? server + apiには、特殊文字はまったくありません。

また

ないでください、これはScalaでやることが冗長である理由 - なぜAPIは

EDIT ...シンプルGET呼び出しを行うために3つの事をインポートするために私を必要としない:サーバーがhttps://example.comときにこの問題が発生した 確認済みhttp:http://example.com

答えて

1

stacktraceは、サーバー(example.com)が不正なHTTPヘッダーで応答していることを示しています。 つまり、ヘッダ名としてAgent,を返します。テキストにはカンマがあります。

なぜそれが非常に冗長であるのかという問題については、あなたのコードの問題は、play-frameworkのWebサービスAPIの非同期性を同期のcall関数に合わせようとしていることです。これはScalaのFuture apiで通常どのように動作するかではありません。

関連する問題