2014-10-10 2 views
0

Я получаю сообщение MessageBodyWriter не обнаружено, когда я вызываю вызов веб-службы.Ошибка Джерси REST, MessageBodyWriter не найден для типа носителя = application/json

Я включил genson-1.1.jar в свой класс, который, я считаю, должен содержать реализацию MessageBodyWriter. Но я получаю эту ошибку.

Я использую Jersey 2.13.

Я также пробовал его без регистрации «GensonJsonConverter.class» и по-прежнему дает ту же ошибку.

protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

    ClientConfig config = new ClientConfig(); 
    WebTarget target = client.target("http://localhost:8080/WebServices/rest/hello"); 
    target.path("Lion King"); 
    target.register(GensonJsonConverter.class); 
    String response = target.request().accept(MediaType.APPLICATION_JSON).get(String.class); 
    resp.getWriter().print(response); 
} 

@Path("hello") 
public class Hello {   
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Book getThisBook(@PathParam("bookName") String bookName){ 
     return new Book(bookName, "Msn", new Date()); 
    } 
} 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>WebServices</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Jersey Rest Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.webservices</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet> 
     <servlet-name>myServlet</servlet-name> 
     <servlet-class>com.webservices.servlet.MyServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey Rest Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>myServlet</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 

</web-app> 

Часть трассировки стека:

SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.webservices.entity.Book, genericType=class com.webservices.entity.Book. 
Oct 10, 2014 3:19:49 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [myServlet] in context with path [/WebServices] threw exception 
javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error 

My lib folder

+0

Опубликуйте свой файл web.xml – brso05

+0

@ brso05 web.xml опубликовано – Susie

+0

Я использую майку 1.18, я думаю, что у меня были проблемы с более новой версией Джерси. Вы можете посмотреть в 1.18 – brso05

ответ

3

Yep с последними Джерси освобождает путь он обнаруживает "расширения" имеет изменилось. В ближайшее время Genson будет обновлен, чтобы работать из коробки с этими изменениями. В то же время, чтобы исправить это:

1) Добавить зависимость от metainf-услуг

ИЛИ

2) зарегистрировать его программно.

Обратите внимание: the documentation here есть более подробное объяснение с советами по выбору решения.

EDIT Поскольку вы не строите все контейнерные программы, вам было бы проще использовать решение metainf-services.

+1

Спасибо! Я бы хотел, чтобы я смог ответить +100. Каждый раз, когда я использую Джерси, я трачу час, пытаясь заставить его поддержать JSON, и это всегда другая проблема. Я должен учить свой урок. – Brandon