Невозможно удалить seseairize WSresponse asJson() с HTTP-сервера в Play с WSClient

Я получаю ответ WSResponse(форма Play Framework) от службы HTTP как

{"AuthToken":"d4b4bf6d5ff3f35366a75b498c8dbb58"}

который я пытаюсь прочитать как JSON и распечатать на консоли, используя

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

Я правильно получаю ответ, напечатанный на консоли, однако код разбивает функцию asJson() со следующей трассировкой:

play.api.http.HttpErrorHandlerExceptions $$ anon $ 1: исключение выполнения [[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: нет содержимого для сопоставления из-за конца ввода в [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; строка: 1, столбец: 1]]] в play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:265) ~[play_2.10-2.4.2.jar:2.4.2] в 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] в play.api.DefaultGlobal$.onError(GlobalSettings.scala:212) [play_2.10-2.4.2.jar:2.4.2] в play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:94) [play_2.10-2.4.2.jar:2.4.2] в play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:151) [filters-helpers_2.10-2.4.2.jar:2.4.2] на play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:150) [filters-helpers_2.10-2.4.2.jar:2.4.2] на scala.concurrent.Future$$anonfun$recoveryWith$1.apply(Future.scala:344) [scala-library-2.10.5.jar:na] в scala.concurrent.Future$$anonfun$recoveryWith$1.apply(Future.scala:343) [scala-library-2.10.5.jar:na] на scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.10.5.jar:na] на play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) [play-iteratees_2.10-2.4.2.jar:2.4.2] в scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) [scala-library-2.10.5.jar:na] на scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) [scala-library-2.10.5.jar:na] на scala.concurrent.Promise$class.tryFailure(Promise.scala:112) [scala-library-2.10.5.jar:na] на scala.concurrent.impl.Promise$DefaultPromise.tryFailure(Promise.scala:153) [scala-library-2.10.5.jar:na] at play.api.mvc.Filter$$anon$1$$anonfun$apply$4$$anonfun$apply$1.applyOrElse(Filters.scala:67) [play_2.10-2.4.2.jar:2.4.2] at play.api.mvc.Filter$$anon$1$$anonfun$apply$4$$anonfun$apply$1.applyOrElse(Filters.scala:61) [play_2.10-2.4.2.jar:2.4.2] at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) [scala-library-2.10.5.jar:na] at play.api.libs.iteratee.Iteratee$$anonfun$recoverM$1.applyOrElse(Iteratee.scala:629) [play-iteratees_2.10-2.4.2.jar:2.4.2] в play.api.libs.iteratee.Iteratee $$ anonfun $ recoverM $ 1.applyOrElse (Iteratee.scala: 629) [play-iteratees_2.10-2.4.2.jar: 2.4.2] в scala.runtime.AbstractPartialFunction.apply (AbstractPartialFunction.scala: 33) [scala-library-2.10.5.jar: na] в scala.util.Failure$$anonfun$recovery $1.apply(Try.scala:185) [scala-library-2.10.5.jar:na] в scala.util.Try$.apply(Try.scala:161) [scala-library-2.10.5.jar:na] в scala.util.Failure.recover(Try.scala:185) [scala-library-2.10.5.jar:na] в scala.concurrent.Future$$anonfun$recovery $1.apply(Future.scala:324) [scala-library-2.10.5.jar:na] в scala. concurrent.Future $$ anonfun $ recovery $1.apply(Future.scala:324) [scala-library-2.10.5.jar:na] в scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.10.5.jar:na] at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) [akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) [akka-actor_2.10-2.3.11.jar:na] в akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.10-2.3.11.jar:na] в akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.10-2.3.11.jar:na] в scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) [scala-library-2.10.5.jar:na] в akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) [akka-actor_2.10-2.3.11.jar:na] в akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) [akka-actor_2.10-2.3.11.jar:na] в akka.dispatch.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] в scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.10.5.jar:na] в scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java: -19.10-sc.10 2-библиотеку [sc..jar:na] at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.5.jar:na] Вызвано: java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: нет содержимого для сопоставления из-за конца ввода в [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; строка: 1, столбец: 1] в play.libs.Json.parse(Json.java:149) ~[play-json_2.10-2.4.2.jar:2.4.2] в play.libs.ws.ning.NingWSResponse.asJson(NingWSResponse.java:149) ~[play-java-ws_2.10-2.4.2.jar:2.4.2] at service.GlaasService.lambda$getAuthToken$0(GlaasService.java:28) ~[классы /:na] at service.GlaasService$$Lambda$74/930311498.apply(неизвестный источник) ~[na:na] at play.core.j.FPromiseHelper$$anonfun$map$1.apply(FPromiseHelper.scala:103) ~[play_2.10-2.4.2.jar:2.4.2] at scala.util.Success$$anonfun$map$1.apply(Try.scala:206) ~[scala-library-2.10.5.jar:na] at scala.util.Try$.apply(Try.scala:161) [scala-library-2.10.5.jar:na] в scala.util.Success.map(Try.scala:206) ~[scala-library-2.10.5.jar:na] в scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) ~[scala-library-2.10.5.jar:na] в scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) ~[scala-library-2.10.5.jar:na] в 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: Нет содержимого для отображения из-за конца ввода в [Source: 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:3549) ~[джексон -databind-2.5.4.jar: 2.5.4] в com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2078) ~[jackson-databind-2.5.4.jar:2.5.4] при воспроизведении.libs.Json.parse(Json.java:147) ~[play-json_2.10-2.4.2.jar:2.4.2] ... 17 общих кадров опущено

Причина ошибки выглядит как неподходящий конец ввода для json, однако я проверил ответ JSON, если работает нормально, и оператор console также печатает его правильно, однако его разрыв происходит сразу после печати. Если я попытаюсь обработать ответ как 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);
                }
            }

        });     }

Любые предложения о том, как решить эту проблему, приветствуются. Благодарю.

0 ответов

Другие вопросы по тегам