0

I get a WSResponse(form Play framework) response from an HTTP service as

{"authToken":"d4b4bf6d5ff3f35366a75b498c8dbb58"}

which I am trying to read as JSON and print on console using

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

I get the response printed on console correctly, however, the code breaks in the function asJson() with the following trace:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; line: 1, column: 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] at 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.2] at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:151) [filters-helpers_2.10-2.4.2.jar:2.4.2] at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:150) [filters-helpers_2.10-2.4.2.jar:2.4.2] at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) [scala-library-2.10.5.jar:na] at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) [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.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) [play-iteratees_2.10-2.4.2.jar:2.4.2] at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) [scala-library-2.10.5.jar:na] at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) [scala-library-2.10.5.jar:na] at scala.concurrent.Promise$class.tryFailure(Promise.scala:112) [scala-library-2.10.5.jar:na] at 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] at play.api.libs.iteratee.Iteratee$$anonfun$recoverM$1.applyOrElse(Iteratee.scala:629) [play-iteratees_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 scala.util.Failure$$anonfun$recover$1.apply(Try.scala:185) [scala-library-2.10.5.jar:na] at scala.util.Try$.apply(Try.scala:161) [scala-library-2.10.5.jar:na] at scala.util.Failure.recover(Try.scala:185) [scala-library-2.10.5.jar:na] at scala.concurrent.Future$$anonfun$recover$1.apply(Future.scala:324) [scala-library-2.10.5.jar:na] at scala.concurrent.Future$$anonfun$recover$1.apply(Future.scala:324) [scala-library-2.10.5.jar:na] at 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] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.10-2.3.11.jar:na] at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) [scala-library-2.10.5.jar:na] at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) [akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) [akka-actor_2.10-2.3.11.jar:na] at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.10-2.3.11.jar:na] at 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] at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.5.jar:na] Caused 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; line: 1, column: 1] at play.libs.Json.parse(Json.java:149) ~[play-json_2.10-2.4.2.jar:2.4.2] at 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) ~[classes/:na] at service.GlaasService$$Lambda$74/930311498.apply(Unknown Source) ~[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] at scala.util.Success.map(Try.scala:206) ~[scala-library-2.10.5.jar:na] at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) ~[scala-library-2.10.5.jar:na] at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala: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 common frames omitted Caused by: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) ~[jackson-databind-2.5.4.jar:2.5.4] at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3609) ~[jackson-databind-2.5.4.jar:2.5.4] at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3549) ~[jackson-databind-2.5.4.jar:2.5.4] at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2078) ~[jackson-databind-2.5.4.jar:2.5.4] at play.libs.Json.parse(Json.java:147) ~[play-json_2.10-2.4.2.jar:2.4.2] ... 17 common frames omitted

The cause of error looks like inappropriate end of input for json, however I verified the JSON response if working fine otherwise and the console statement is also printing it correctly, however its breaking just after printing it. If I try to process the response as JSON without printing, it still breaks with the same exception.

Adding the method code as below:

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);
                }
            }

        });     }

Any inputs on how to resolve this are welcome. Thanks.

user1242321
  • 1,578
  • 2
  • 18
  • 30
  • Weird. Could you please share the whole method? – marcospereira May 19 '16 at 06:12
  • @marcospereira Updated. Please see if this helps clarify some issue. – user1242321 May 19 '16 at 06:18
  • Can you be sure your JSON string is valid? Have you tried printing with `System.out.println` it before using `response.asJson()`? – Kris May 19 '16 at 11:24
  • Yes @Kris I validated the printed json string and it's valid as mentioned in the question. The asJson() method is able to print the string on console but still breaks before exiting the asJson() method call. – user1242321 May 19 '16 at 19:28

0 Answers0