0

HTTP サービスから WSResponse (フォーム Play フレームワーク) 応答を取得します。

{"authToken":"d4b4bf6d5ff3f35366a75b498c8dbb58"}

JSONとして読み取り、コンソールに出力しようとしています

 System.out.println(response.asJson());

コンソールに応答が正しく出力されますが、関数 asJson() でコードが壊れ、次のトレースが表示されます。

play.api.http.HttpErrorHandlerExceptions$$anon$1: 実行例外[[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.jboss.netty.buffer] .ChannelBufferInputStream@23408f7c; 行: 1、列: 1]]] at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:265) ~[play_2.10-2.4.2.jar:2.4.2] at play.api.http. .DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:191) ~[play_2.10-2.4.2.jar:2.4.2] play.api.GlobalSettings$class.onError(GlobalSettings.scala:179) で [play_2.10-2.4 .2.jar:2.4.2] at play.api.DefaultGlobal$.onError(GlobalSettings.scala:212) [play_2.10-2.4.2.jar:2.4.2] at play.api.http.GlobalSettingsHttpErrorHandler.onServerError (HttpErrorHandler.scala:94) [play_2.10-2.4.2.jar:2.4. ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.10-2.3.11.jar:na] scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.10] .5.jar:na] at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.10.5.jar:na] at scala.concurrent.forkjoin.ForkJoinPool.runWorker( ForkJoinPool.java:1979) [scala-library-2.10.5.jar:na] scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.5.jar:na] で発生by: java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; 行: 1、列: 1] play.libs.Json.parse(Json.java: 235) ~[scala-library-2.10.5.jar:na] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.10.5.jar:na] at play.core .j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) ~[play_2.10-2.4.2.jar:2.4.2] ... 共通フレーム6個省略 原因: com.fasterxml.jackson.databind .JsonMappingException: [ソース: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; での入力の終わりのため、マップするコンテンツがありません。行: 1、列: 1] com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) で ~[jackson-databind-2.5.4.jar:2.5.4] com.fasterxml.jackson で。 databind.ObjectMapper._initForReading(ObjectMapper.java:3609) ~[jackson-databind-2.5.4.jar:2.5.4] com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:

エラーの原因はjsonの不適切な入力の終わりのように見えますが、それ以外の場合は正常に機能し、コンソールステートメントも正しく出力されている場合はJSON応答を確認しましたが、出力した直後に壊れました。応答を印刷せずに JSON として処理しようとすると、同じ例外で中断します。

以下のようにメソッドコードを追加します。

public static Promise<Result> getAuthToken(String serviceProfileId, String username, String password, WSClient ws){
                return ws.url("http://SERVER_URL/auth")
                .setContentType("application/x-www-form-urlencoded")
                .post("serviceID="+serviceProfileId+"&username="+username+"&password="+password)
        .map( response -> {
            if(response == null)
                return play.mvc.Results.noContent();
            System.out.println(response.asJson());
            JsonNode json = response.asJson();
            if(json == null) {
                return play.mvc.Results.ok("Expecting Json data");
            } else {
                String token = json.findPath("authToken").textValue();
                if(token == null) {
                  return play.mvc.Results.ok("Missing parameter [auth Token]");
                } else {
                  return play.mvc.Results.ok("Hello " + token);
                }
            }

        });     }

これを解決する方法についての情報は大歓迎です。ありがとう。

4

0 に答える 0