Uso de proveedores / MessageBodyWriters predeterminados en Jersey 2

Recién comenzando con Jersey, he estado tratando de reproducir el ejemplo simple en la última documentación de Jersey 'construyendo respuestas'. Esta parte, por lo que yo entiendo, debería mostrar cómoResponse yResponseBuilder se puede usar para devolver fácilmente una respuesta en combinación conEntity<T> para contenido de respuesta.

Ahora, la documentación indica que varios tipos de datos son compatibles por defecto (aquí: 'Representaciones y tipos de Java').String primer entre ellos, que coincida con cualquier tipo de medio.

De todas las variaciones que he probado, la siguiente es la más simple:

@POST
public Response post() {
    URI createdUri;
    try {
        createdUri = new URI("http://test.lan");
    } catch (final URISyntaxException e) {
        throw new WebApplicationException(e);
    }

    return Response.created(createdUri).entity(Entity.text("someContent")).build();
}

Siempre recibí el mismo error (seguimiento completo de la pila a continuación) al llamar a la solicitud:org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/plain, type=class javax.ws.rs.client.Entity, genericType=class javax.ws.rs.client.Entity.

Creo que está diciendo que no se encontró un proveedor adecuado para este tipo genérico de entidad. Sin embargo, la cadena debe ser compatible OOTB?

encontre esoStringMessageProvider es probablemente la implementación de Jersey 1 de este proveedor, y las clases relacionadas más cercanas que encontré en mis bibliotecas de Jersey 2 son las clases enorg.glassfish.jersey.message.internal en jersey-common. Entre los muchos proveedores hayStringMessageProvider, que me parece un proveedor potencial para esto.

He buscado el problema, y si bien hay muchas personas que lo entienden cuando intentan usar un proveedor personalizado de forma incorrecta, no encontré nada sobre los proveedores OOTB predeterminados que no funcionan ...

He revisado mis bibliotecas, y ahora tengo las siguientes dependencias en mi pom (entre otras):

jersey-contenedor-servlet-corejersey-clientjersey-comúnservidor de jersey

He buscado en línea, pero esto parece ser todo lo que necesito, aunque no he encontrado con certeza las clases de proveedor adecuadas para String y JAXB / JSON en los frascos.

ContextoProyecto Mavencon tomcat servlet-api 6.0.29Versión 2.6 de todas las bibliotecas de jersey mencionadasEclipse keplerUso del complemento tomcat6 maven para ejecutar tomcat incrustado (funciona bien hasta ahora)Solicitud de Fiddler utilizada para probar
POST HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Content-Length: 0

Y nuevamente probé varias variaciones.

Traza completa
06-Jan-2015 21:13:54 org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=text/plain, type=class javax.ws.rs.client.Entity, genericType=class javax.ws.rs.client.Entity.
06-Jan-2015 21:13:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet TestService threw exception
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/plain, type=class javax.ws.rs.client.Entity, genericType=class javax.ws.rs.client.Entity.
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:571)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:378)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:368)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:319)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:219)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
EDITAR

El mismo error (para la aplicación / json) ocurre ahora que he anotado una clase con@XmlRootElement e intente devolverlo en un método según los documentos de Jersey:

@GET
@Produces(MediaType.APPLICATION_JSON) 
public Foo sampleFoo() {
    Foo foo = new Foo();

    return foo;
}

DóndeFoo está anotado con@XmlRootElement.

También agregué jersey-media-json-jackson como dependencia, que puedo ver que contiene un proveedor JSONJaxb explícito. Sin embargo, no parece ser recogido de alguna manera.

Respuestas a la pregunta(3)

Su respuesta a la pregunta