2017-05-21 1 views
3

Lorsque vous essayez d'envoyer une requête POST-je utiliser le code suivant:gluons Connect retourne NPE Lorsque vous rédigez en utilisant les dépendances de charme> 4.3.3

RestClient post = RestClient.create() 
     .method("POST") 
     .host(host) 
     .path(path) 
     .contentType("application/json"); 
Chicken chicken = new Chicken(name, age); 
GluonObservableObject<Chicken> o = DataProvider.storeObject(chicken, 
     post.createObjectDataWriter(Chicken.class)); 
o.exceptionProperty().addListener((obs, ol, nw) -> System.err.println("post: " + nw)); 
o.initializedProperty().addListener((obs, ol, nw) -> { 
    if (nw) 
     retrieveList.add(o.get()); 
}); 

Chicken est un POJO:

public class Chicken { 

    private String name; 
    private int age; 
    private int id = 12; 

    public Chicken() {} 

    public Chicken(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    // getters and setter for all fields, equals and hashcode and toString 
} 

Le point final de serveur avec JAX-RS est

@POST 
@Consumes(MediaType.APPLICATION_JSON + "; " + CHARSET) 
@Produces(MediaType.APPLICATION_JSON + "; " + CHARSET) 
public Response save(JsonObject chicken) { 
    // do stuff 
    return Response.ok(response).build(); 
} 

Dans le fichier gradle

dependencies { 
    compile 'com.gluonhq:glisten-afterburner:1.2.0' 
    compile 'com.gluonhq:charm:4.3.3' 
} 

Si je spécifie les versions 4.3.2 ou 4.3.3 (comme ci-dessus) cela fonctionne correctement. Mais si je spécifie 4.3.4 ou 4.3.5 est arrête de fonctionner. Sur le client les impressions de flux d'erreur

post: java.lang.NullPointerException 

et sur le serveur (wildfly 10.1)

11:17:20,839 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-35) RESTEASY002010: Failed to execute: javax.ws.rs.NotSupportedException: RESTEASY003065: Cannot consume content type 
    at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:387) 
    at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:121) 
    at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43) 
    at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:445) 
    at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:264) 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:201) 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) 
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) 
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) 
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) 
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) 
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) 
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) 
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) 
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) 
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) 
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) 
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44) 
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) 
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) 
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) 
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202) 
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Je ne sais pas pourquoi est « ne peut pas consommer le type de contenu » pour 4.3.4 mais peut 4,3 .3. Impossible de trouver des différences dans les javadocs.

Je peux mettre à jour les projets sur github pour un type de MCVE serveur-client complet.

+1

Vous avez trouvé un bug dans Connect 1.4.3. Je viens de déposer un problème pour le résoudre. En attendant, vous devez utiliser les dépendances 'com.gluonhq: glisten-afterburner: 1.2.0' et' com.gluonhq: connect: 1.4.2'. –

+0

@ JoséPereda Merci. Pouvons-nous avoir le lien vers la question s'il vous plaît? – Mark

+0

Je l'ai déposé en interne. –

Répondre

1

Ceci est en effet un bug qui a été introduit récemment. Pour contourner ce problème, vous devriez être en mesure de régler manuellement l'en-tête:

RestClient post = RestClient.create() 
    .method("POST") 
    .host(host) 
    .path(path) 
    .header("Content-Type", "application/json"); 
// .contentType("application/json"); 

Le bug lui-même sera corrigé dans la prochaine version.