Ich versuche, ein Play-Framework auf einem Remote-Linux-Server einzurichten.Server Fehler 'Play Framework 2.4.3' bei POST-Anfrage
- Server: Linux Ubuntu 14.04
- Framwork: Wiedergabe 2.4.3
- Datenbank: Postgres 9.3.11
- Anwendung: Android Handy
- 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