Ich versuche, MailGun API in meine Play2Java-Anwendung zu integrieren. Die E-Mail wird erfolgreich gesendet, aber die Ausnahme wird ausgelöst.Mailgun + Java kann Deserializer nicht finden
Das ist mein build.sbt
// https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client
libraryDependencies += "org.glassfish.jersey.core" % "jersey-client" % "2.25.1"
// https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart
libraryDependencies += "org.glassfish.jersey.media" % "jersey-media-multipart" % "2.25.1"
// https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson
libraryDependencies += "org.glassfish.jersey.media" % "jersey-media-json-jackson" % "2.25.1"
Das ist meine einfache Methode ist, E-Mail senden:
public static ClientResponse SendSimple() {
Client client = ClientBuilder.newClient();
client.register(HttpAuthenticationFeature.basic(
"api",
"mykey"
));
WebTarget mgRoot = client.target("https://api.mailgun.net/v3");
Form reqData = new Form();
reqData.param("from", "Excited User <[email protected]>");
reqData.param("to", "[email protected]");
reqData.param("subject", "Hello");
reqData.param("text", "Testing out some Mailgun awesomeness!");
return mgRoot
.path("/{domain}/messages")
.resolveTemplate("domain", "mydomain")
.request(MediaType.APPLICATION_FORM_URLENCODED)
.buildPost(Entity.entity(reqData, MediaType.APPLICATION_FORM_URLENCODED))
.invoke(ClientResponse.class);
}
Und ich erhalten diesen Fehler. BTW, E-Mail wurde erfolgreich gesendet ...
22:19:18 worker.1 | javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class j
pe, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]
22:19:18 worker.1 | at [Source: org.glassfish.jersey.me[email protected]291c3876; line: 1, column: 1]
22:19:18 worker.1 | at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:809) ~[jersey-client-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92) ~[jersey-client-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701) ~[jersey-client-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.internal.Errors.process(Errors.java:228) ~[jersey-common-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) ~[jersey-common-2.25.1.jar:na]
22:19:18 worker.1 | at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:697) ~[jersey-client-2.25.1.jar:na]
22:19:18 worker.1 | at utils.EmailUtilsMailGun.SendSimple(EmailUtilsMailGun.java:37) ~[classes/:na]
22:19:18 worker.1 | at controllers.PaymentsController.addMassRecords(PaymentsController.java:64) ~[classes/:2.4.6]
22:19:18 worker.1 | at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$59$$anonfun$apply$59.apply(Routes.scala:2204) ~[classes/:na]
22:19:18 worker.1 | at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$59$$anonfun$apply$59.apply(Routes.scala:2204) ~[classes/:na]
22:19:18 worker.1 | at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:127) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:70) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.http.DefaultHttpRequestHandler$1.call(DefaultHttpRequestHandler.java:20) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.mvc.Security$AuthenticatedAction.call(Security.java:56) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.db.jpa.TransactionalAction.lambda$call$5(TransactionalAction.java:19) ~[play-java-jpa_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.db.jpa.TransactionalAction$$Lambda$39/274518141.apply(Unknown Source) ~[na:na]
22:19:18 worker.1 | at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:136) ~[play-java-jpa_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.db.jpa.JPA.withTransaction(JPA.java:159) ~[play-java-jpa_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.db.jpa.TransactionalAction.call(TransactionalAction.java:16) ~[play-java-jpa_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at scala.concurrent.impl.Future$.apply(Future.scala:31) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.Future$.apply(Future.scala:492) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at play.core.j.JavaAction.apply(JavaAction.scala:94) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.utils.Threads$.withContextClassLoader(Threads.scala:21) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at scala.Option.map(Option.scala:146) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96) ~[play_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.11-2.4.6.jar:2.4.6]
22:19:18 worker.1 | at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) [akka-actor_2.11-2.3.13.jar:na]
22:19:18 worker.1 | at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.11-2.3.13.jar:na]
22:19:18 worker.1 | at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.6.jar:na]
22:19:18 worker.1 | at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.6.jar:na]
22:19:18 worker.1 | Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap, [simp
ction type; class java.util.List, contains [simple type, class java.lang.Object]]]
22:19:18 worker.1 | at [Source: org.glassfish.jersey.me[email protected]291c3876; line: 1, column: 1]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:305) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:268) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:443) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:965) ~[jackson-databind-2.8.4.jar:2.8.4]
22:19:18 worker.1 | at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:501) ~[jackson-databind-2.8.4.jar:2.8.4]