Hi,
Sorry for the so late reply. We've moved the mailing list to user jboss
mailing list: http://resteasy.jboss.org/mailinglists from May 2016.
Did you try with add @Body annotation in TestData class and directly use
the annotated filed in your service ? If @Body is not a required thing
to use , can you simply try with the
latest resteasy and directly send the json request which represents the
TestData object ? I can't see why @Body is required here.
Cheers,
Jim
-------- Messaggio Inoltrato --------
Oggetto: [Resteasy-users] How to use JSON message body in POST
Data: Thu, 21 Apr 2016 11:01:20 -0400
Mittente: John Sipher <jasip...@gmail.com>
A: resteasy-users@lists.sourceforge.net
Hello,
I'm trying to POST JSON data to a JAX-RS servlet running in WildFly
8.2.0 (RESTEasy 3.0.10). I started out coding the method like this,
because this is what I see in every example I've found with Google
(this could mean I just have poor Google skills).
@Path("/test")
@Consumes("application/json;charset=utf-8")
@Produces("application/json;charset=utf-8")
public Response execute(TestData data) {
AppResponse response = new AppResponse();
// do some stuff
return Response.status(200).entity(response).build();
}
That failed because the
factory.getInjectorFactory().createParameterExtractor(parameter,
factory) call in this constructor always returned null, which caused a
NullPointerException when the request was processed.
public MethodInjectorImpl(ResourceLocator resourceMethod,
ResteasyProviderFactory factory)
{
this.factory = factory;
this.method = resourceMethod;
this.interfaceBasedMethod =
findInterfaceBasedMethod(resourceMethod.getResourceClass().getClazz(),
resourceMethod.getMethod());
params = new ValueInjector[resourceMethod.getParams().length];
int i = 0;
for (MethodParameter parameter : resourceMethod.getParams())
{
params[i] =
factory.getInjectorFactory().createParameterExtractor(parameter, factory);
if (params[i] instanceof MessageBodyParameterInjector)
expectsBody = true;
i++;
}
}
That was happening because parameter.paramType is ParamType.UNKNOWN. A
little more debugging led me to the @Body annotation. It looks like
adding @Body to the parameter would fix the problem, but @Body is only
valid for methods and fields, not parameters. So, I changed my code to
this
@Bodyprivate TestData data;
@Path("/test")
@Consumes("application/json;charset=utf-8")
@Produces("application/json;charset=utf-8")
public Response execute() {
AppResponse response = new AppResponse();
// do some stuff
return Response.status(200).entity(response).build();
}
That "works" (my method is able to do its work and generate a
response), but at some point after my method finishes, RESTEasy pukes
and dies with this exception.
10:57:00,769 WARN [org.jboss.resteasy.core.ExceptionHandler] (default
task-10) Failed executing POST /execute-ant:
org.jboss.resteasy.spi.InternalServerErrorException: Subresource for
target class has no jax-rs annotations.:
org.jboss.resteasy.specimpl.BuiltResponse
at
org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:126)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:103)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
[resteasy-jaxrs-3.0.10.Final.jar:]
at
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
[resteasy-jaxrs-3.0.10.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
[jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
at
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[rt.jar:1.8.0_45]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[rt.jar:1.8.0_45]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
Thanks in advance for any help you can offer.
John
------------------------------------------------------------------------------
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users