Incapable de Produire JSON - javax.ws.rs.WebApplicationException: com.soleil.jersey.l'api.MessageException

Suis en utilisant Maillot de 1,15, JDK 1.6, Tomcat 7, Maven 2.2.1 créer un simple Service Web Restful qui doit renvoyer une Chaîne JSON à partir d'un POJO que j'ai mappé.

Voici mon pojo:

package com.myservice.domain;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {
   private String firstName;
   private String lastName;

  //Getters & Setters
}

mon webservice:

package com.myservice.resource;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.myservice.domain.Person;

@Path("/service")
public class MyService {

    @GET
    @Path("showPerson")
    @Produces(MediaType.APPLICATION_JSON)
    public Person getPerson() {
       Person person = new Person();
       person.setFirstName("John");
       person.setLastName("Doe");
       return person;
    }
}

Voici mon pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    
         http://maven.apache.org/xsd/maven-4.0.0.xsd">

         <modelVersion>4.0.0</modelVersion>
         <groupId>com.myservice</groupId>
         <artifactId>myservice</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <packaging>war</packaging>
         <name>My Web Service</name>

         <dependencies>
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <version>4.8.2</version>
                 <scope>test</scope>
             </dependency>

             <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-servlet</artifactId>
                <version>1.15</version>
                <scope>runtime</scope>
             </dependency>

            <dependency>
               <groupId>com.sun.jersey</groupId>
               <artifactId>jersey-server</artifactId>
               <version>1.15</version>
            </dependency>

            <dependency>
                  <groupId>com.sun.jersey</groupId>
                  <artifactId>jersey-core</artifactId>
                  <version>1.15</version>
            </dependency>

            <dependency>
                 <groupId>com.sun.jersey</groupId>
                 <artifactId>jersey-json</artifactId>
                 <version>1.14</version>
            </dependency>

           <dependency>
                <groupId>com.sun.jersey.contribs</groupId>
                <artifactId>jersey-multipart</artifactId>
                <version>1.14</version>
           </dependency>

           <dependency>
               <groupId>org.codehaus.jackson</groupId>
               <artifactId>jackson-jaxrs</artifactId>
               <version>1.9.9</version>
           </dependency>
    </dependencies>

     <build>
          <finalName>myservice</finalName>
          <plugins>
                <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                  <configuration>
                       <source>1.6</source>
                       <target>1.6</target>
                  </configuration>
                </plugin>
          </plugins>
     </build>
</project>

Mon web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0"
         metadata-complete="true">
     <display-name>My Web Service</display-name>
     <servlet>
       <servlet-name>Jersey REST Service</servlet-name>
       <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.myservice.resource</param-value>
         </init-param>
         <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
          <servlet-name>Jersey REST Service</servlet-name>
          <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
</web-app>

Après le déploiement sur tomcat, lorsque j'essaie d'appeler le service web comme ceci:

curl -X GET http://localhost:8080/myservice/rest/service/showPerson

J'obtiens l'erreur suivante:

Nov 20, 2012 10:40:06 AM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class com.myservice.domain.Person, 
and Java type class com.myservice.domain.Person, 
and MIME media type application/json was not found

Nov 20, 2012 10:40:06 AM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class com.myservice.domain.Person,
and Java type class com.myservice.domain.Person, and MIME media type 
application/json was not found

Nov 20, 2012 10:40:06 AM com.sun.jersey.spi.container.ContainerResponse write 
SEVERE: The registered message body writers compatible with the 
MIME media type are: */* ->

     com.sun.jersey.core.impl.provider.entity.FormProvider
     com.sun.jersey.core.impl.provider.entity.StringProvider
     com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
     com.sun.jersey.core.impl.provider.entity.FileProvider
     com.sun.jersey.core.impl.provider.entity.InputStreamProvider
     com.sun.jersey.core.impl.provider.entity.DataSourceProvider
     com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
     com.sun.jersey.core.impl.provider.entity.ReaderProvider
     com.sun.jersey.core.impl.provider.entity.DocumentProvider
     com.sun.jersey.core.impl.provider.entity.StreamingOutputProviderfg
     com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
     com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
     com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
     com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General

    Nov 20, 2012 10:40:06 AM com.sun.jersey.spi.container.ContainerResponse 
    write

      SEVERE: The registered message body writers compatible with the 
      MIME media type are:
      */* ->

     com.sun.jersey.core.impl.provider.entity.FormProvider
     com.sun.jersey.core.impl.provider.entity.StringProvider
     com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
     com.sun.jersey.core.impl.provider.entity.FileProvider
     com.sun.jersey.core.impl.provider.entity.InputStreamProvider
     com.sun.jersey.core.impl.provider.entity.DataSourceProvider
     com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
     com.sun.jersey.core.impl.provider.entity.ReaderProvider
     com.sun.jersey.core.impl.provider.entity.DocumentProvider
     com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
     com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
     com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
     com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
     com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General

    SEVERE: Mapped exception to response: 500 (Internal Server Error)

    javax.ws.rs.WebApplicationException: 
    com.sun.jersey.api.MessageException:

    A message body writer for Java class
    com.myservice.domain.Person, 
    and Java type class com.myservice.domain.Person, 
    and MIME media type application/json was not found

    com.sun.jersey.api.MessageException: 

    A message body writer for Java class com.myservice.domain.Person, 
    and Java type class com.myservice.domain.Person, and MIME media type  
    application/json was not found

    HTTP Status 500 - Internal Server Error 
    The server encountered an internal error that prevented it from 
    fulfilling this request.

Après récurer l'Internet, j'ai essayé d'insérer le projet de la solution que tout le monde a suggéré dans web.xml:

<init-param>
   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
   <param-value>true</param-value>
</init-param>

Mais il me donne toujours le même problème! Il n'retourner le bon de données rassemblées pour XML si j'utilise APPLICATION_XML, cependant.

Serait vraiment reconnaissant si quelqu'un pouvait me diriger dans la bonne direction.

Je vous remercie beaucoup d'avoir pris le temps de lire ceci.

OriginalL'auteur PacificNW_Lover | 2012-11-20