Использование провайдеров по умолчанию / MessageBodyWriters в Джерси 2

Начав с Джерси, я пытался воспроизвести простой пример из последней документации Джерси.построение ответов». Эта часть, насколько я понимаю, должна показать, какResponse а такжеResponseBuilder может быть использован для простого возврата ответа в сочетании сEntity<T> для содержания ответа.

Теперь в документации говорится, что по умолчанию поддерживается несколько типов данных (здесь: 'Представления и типы Java«).String премьер среди них, соответствующий любому типу СМИ.

Из всех вариантов, которые я пробовал, следующее является самым простым:

@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();
}

Я всегда получал одну и ту же ошибку (полная трассировка стека ниже) при вызове запроса: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.

Я полагаю, это говорит о том, что подходящего поставщика не найдено для этого универсального типа сущности. Тем не менее, строка должна поддерживаться OOTB?

я нашел этоStringMessageProvider это, вероятно, реализация этого провайдера на Джерси 1, и наиболее близкие родственные классы, которые я нашел в моих библиотеках на Джерси 2, являются классами вorg.glassfish.jersey.message.internal в майке Среди многих провайдеров естьStringMessageProvider, который представляется мне как потенциальный предполагаемый поставщик для этого.

Я посмотрел на проблему, и хотя есть много людей, которые получают это при неправильной попытке использовать пользовательский провайдер, я ничего не нашел о неработающих OOTB-провайдерах по умолчанию.

Я проверил свои библиотеки и сейчас у меня есть следующие зависимости в моем pom (среди прочих):

Джерси-контейнер-сервлет-жильныйДжерси-клиентДжерси-общийДжерси-сервер

Я посмотрел в Интернете, но, похоже, это все, что мне нужно, хотя я не могу с уверенностью найти подходящие классы провайдеров для String и JAXB / JSON в банках.

контекстMaven проектс сервлетом api tomcat 6.0.29Версия 2.6 всех упомянутых библиотек ДжерсиЗатмение КеплерИспользование плагина tomcat6 maven для запуска встроенного tomcat (пока работает нормально)Запрос Fiddler, используемый для тестирования
POST HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Content-Length: 0

И снова попробовал несколько вариантов.

Полная трассировка стека
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)
РЕДАКТИРОВАТЬ

Та же самая ошибка (для application / json) происходит теперь, когда я аннотировал класс@XmlRootElement и попробуйте вернуть его в соответствии с документами Джерси:

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

    return foo;
}

кудаFoo помечен с@XmlRootElement.

Я также добавил в качестве зависимости jersey-media-json-jackson, который, как я вижу, содержит явного поставщика JSONJaxb. Тем не менее, похоже, что это не так.

Ответы на вопрос(3)

Ваш ответ на вопрос