2017-03-01 1 views
1

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] 

Antwort

0

Ich hatte ein ähnliches Problem mit MailGun. Ich nehme an, ihre Dokumentation für Java ist etwas veraltet. Der Fehler tritt auf, wenn Jersey versucht, die Antwort zu analysieren. Das Weglassen der reponse für mich gearbeitet:

return mgRoot 
      .path("/{domain}/messages") 
      .resolveTemplate("domain", "mydomain") 
      .request() 
      .post(Entity.entity(reqData, MediaType.APPLICATION_FORM_URLENCODED)); 

ich die folgende Wrapperbibliothek hilfreich in ihrem Ansatz zu suchen: https://github.com/sargue/mailgun

Leider bekomme ich keine Antwort entweder die synchrone oder den asynchronen Ansatz.