2016-03-29 4 views
0

Ich versuche, ein Play-Framework auf einem Remote-Linux-Server einzurichten.Server Fehler 'Play Framework 2.4.3' bei POST-Anfrage

  1. Server: Linux Ubuntu 14.04
  2. Framwork: Wiedergabe 2.4.3
  3. Datenbank: Postgres 9.3.11
  4. Anwendung: Android Handy
  5. Local PC: Windows 8.1

Ich habe das Backend lokal auf meinem PC entwickelt und alles funktioniert wie ein Zauber, und wenn ich den Port 9000 in meinem Router öffne, kann ich über meine mobile Anwendung auf das Backend zugreifen.

"Diese Nähte groß, was dieses Problem dann Dudes?`"

Nun, ich möchte nicht wirklich meine lokalen PC verwenden, um dieses Backend-Host, so mietete ich einen Server mit Linux.

Ich fuhr dann fort das Backend auf den Server zu laden, erstellt als lokal die gleichen Anmeldeinformationen Datenbank heruntergeladen Java 1.8 und Postgres 9.3

ich das Backend auf dem Server angefeuert, und alles scheint in Ordnung zu sein. Ich könnte http://serverip:9000 eingeben und ich könnte die gleiche Hauptseite wie ich lokal sehen. So weit, so gut.

Dann habe ich versucht, eine Person in die Datenbank durch ein POST-Anfrageformular hinzufügen, die auch auf dem PC lokal funktioniert.

Wenn ich die gleiche Form auf dem Server übermittelt, habe ich auf die Hauptseite umgeleitet, ebenso wie lokal, aber wenn ich an der serverlog aussehen, sie sagt, es eine „null“ zur Datenbank hinzugefügt.

Ok, seltsam dachte ich, und ich fuhr fort, manuell einige Personen in der Datenbank hinzuzufügen. Ich verwende ein Kaffeescript, um alle Personen in der Datenbank als Liste auf der Hauptseite (Index) anzuzeigen.

Nachdem einige manuelle Daten hinzugefügt und das Nullobjekt aus der Datenbank gelöscht wurde, listet das Skript die Personen in der Datenbank auf der Hauptseite korrekt auf.

Das führt mich zu der Annahme, dass das Programm in der Tat eine Verbindung mit der Datenbank herstellt und kann Zeug von ihm abrufen, also warum kann es nicht einfügen? Ich habe auch bemerkt, dass GET-Anfragen funktionieren, aber die POST-Anfragen nicht.

Ich untersuche etwas mehr, und ich mache eine getPerson() -Funktion, die eine Post-Anfrage ist, ja - eine Person aus der Datenbank zu bekommen. Ich mache ein Formular und versuche zu sehen, ob der Server eine Person aus der Datenbank bekommen kann. Im Browserfenster erhalte ich nun eine Fehlermeldung.

Ok wtf ?? Ich fahre dann fort, um das Serverlog zu betrachten, und nicht zu meiner Überraschung, gibt es eine massive Fehlermeldung bezüglich HttpErrorHandlerExceptions?

Es scheint, als ob alle GET-Anfragen auf dem Server funktionieren, aber nicht alle POST-Anfragen.

Hat jemand eine Idee, was zu tun ist? Ich bin hier ratlos und ich kann keine ähnlichen Probleme finden.

Denken Sie daran, das funktioniert perfekt lokal auf meinem PC und wenn ich meinen eigenen Windows-PC sende. Es scheint, dass es auch hier ein Linux-Problem gibt.

Browser Fehlermeldung

Execution exception 
[NullPointerException: null] 
In /home/kristian/Backend/target/scala-2.10/routes/main/router/Routes.scala:347 
344 // @LINE:9 
345 case controllers_Application_getPerson3_route(params) => 
346  call { 
347 controllers_Application_getPerson3_invoker.call(Application_1.getPerson()) 
348  } 
349 
350 // @LINE:10 
351 case controllers_Application_getPersons4_route(params) => 
352  call { 

Server Backend einloggen

[error] - play.core.server.netty.PlayDefaultUpstreamHandler - Cannot invoke the action 
java.lang.NullPointerException: null 
    at controllers.Application.getPerson(Application.java:52) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:347) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:347) ~[classes/:na] 
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:127) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:70) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.http.DefaultHttpRequestHandler$1.call(DefaultHttpRequestHandler.java:20) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.TransactionalAction.lambda$call$5(TransactionalAction.java:19) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:136) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.JPA.withTransaction(JPA.java:159) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.TransactionalAction.call(TransactionalAction.java:16) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.10.5.jar:na] 
    at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$.apply(Future.scala:31) ~[scala-library-2.10.5.jar:na] 
    at scala.concurrent.Future$.apply(Future.scala:485) ~[scala-library-2.10.5.jar:na] 
    at play.core.j.JavaAction.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.Option.map(Option.scala:145) ~[scala-library-2.10.5.jar:na] 
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.10.5.jar:na] 
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) [akka-actor_2.10-2.3.13.jar:na] 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.10-2.3.13.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] 
[error] - application - 

! @6phn3n8in - Internal server error, for (POST) [/foundperson] -> 

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[NullPointerException: null]] 
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:265) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:191) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:179) [play_2.10-2.4.3.jar:2.4.3] 
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:212) [play_2.10-2.4.3.jar:2.4.3] 
    at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:94) [play_2.10-2.4.3.jar:2.4.3] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:273) [play-netty-server_2.10-2.4.3.jar:2.4.3] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:269) [play-netty-server_2.10-2.4.3.jar:2.4.3] 
    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$.executeScheduled(Execution.scala:109) [play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:71) [play-iteratees_2.10-2.4.3.jar:2.4.3] 
    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.complete(Promise.scala:55) [scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) [scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23) [scala-library-2.10.5.jar:na] 
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) [akka-actor_2.10-2.3.13.jar:na] 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.10-2.3.13.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.NullPointerException: null 
    at controllers.Application.getPerson(Application.java:52) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:347) ~[classes/:na] 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(Routes.scala:347) ~[classes/:na] 
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:127) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:70) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.http.DefaultHttpRequestHandler$1.call(DefaultHttpRequestHandler.java:20) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.TransactionalAction.lambda$call$5(TransactionalAction.java:19) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:136) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.JPA.withTransaction(JPA.java:159) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.db.jpa.TransactionalAction.call(TransactionalAction.java:16) ~[play-java-jpa_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) [scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) [scala-library-2.10.5.jar:na] 
    at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) [play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$.apply(Future.scala:31) ~[scala-library-2.10.5.jar:na] 
    at scala.concurrent.Future$.apply(Future.scala:485) ~[scala-library-2.10.5.jar:na] 
    at play.core.j.JavaAction.apply(JavaAction.scala:94) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103) ~[play_2.10-2.4.3.jar:2.4.3] 
    at scala.Option.map(Option.scala:145) ~[scala-library-2.10.5.jar:na] 
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96) ~[play_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.10-2.4.3.jar:2.4.3] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) [scala-library-2.10.5.jar:na] 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) [scala-library-2.10.5.jar:na] 
    ... 6 common frames omitted 

Index Datei

<article>Insert to database/register:</article> 
<form method="POST" action="@routes.Application.addPerson()"> 
    <table> 
     <tr> 
      <td> 
       <article>Firstname</article> 
      </td> 
      <td> 
       <button>Add Person</button> 
      </td> 
     </tr> 
    </table> 
</form> 
<form method="POST" action="@routes.Application.getPerson()"> 

<article>Get person:</article> 
<table> 
    <tr> 
     <td> 
      <article>Firstname</article> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input type="text" name="firstname"/> 
     </td> 
     <td> 
      <button>Get person</button> 
     </td> 
    </tr> 
</table> 

Die Routen Datei

# Routes 
# This file defines all application routes (Higher priority routes first) 
# ~~~~ 

# Home page 
GET /       controllers.Application.index() 
POST /person      controllers.Application.addPerson() 
GET  /persons     controllers.Application.getPersons 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

Die addPerson() bei Anwendung Datei

@Transactional 
public Result addPerson() { 
    Person person = Form.form(Person.class).bindFromRequest().get(); 
    JPA.em().persist(person); 
    return redirect(routes.Application.index()); 
} 

@Transactional(readOnly = true) 
public Result getPersons() { 
    List<Person> persons = (List<Person>) JPA.em().createQuery("select p from Person p").getResultList(); 
    for(Person p : persons){ 
     System.out.println("Success: " + p.firstname); 
    } 
    return ok(toJson(persons)); 
} 

@Transactional(readOnly = true) 
public Result getPerson() { 
    Person findPerson = Form.form(Person.class).bindFromRequest().get(); 
    List<Person> persons = (List<Person>) JPA.em().createQuery("select p from Person p").getResultList(); 

    for(Person p : persons){ 
     if(p.firstname.equals(findPerson.firstname)) { 
      System.out.println("Success: " + p.firstname); 
     } 
    } 
    return ok(toJson(findPerson)); 
} 

Die Coffee

$ -> 
$.get "/persons", (persons) -> 
    $.each persons, (index, person) -> 
    $("#persons").append $("<li>").text person.firstname 

Antwort