title: GET request fails with JAX-RS: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: text/html
body: <p>I'm building a sample client-server with JAX-RS using JEE7. I'm using Wildfly 10.1</p>
  
  <p>I followed the guy in <a href="https://www.youtube.com/watch?v=JWcoiXNoKxk" rel="nofollow noreferrer">this</a> video. Here is the code of the war that runs on the application server:</p>
  
  <p><code>boundary</code> package contains the service</p>
  
  <pre><code>package pl.devcrowd.virtual.business.chickens.boundary;
  
  import java.util.List;
  
  import javax.ejb.Stateless;
  import javax.inject.Inject;
  
  import pl.devcrowd.virtual.business.chickens.controls.ChickenStore;
  import pl.devcrowd.virtual.business.chickens.entity.Chicken;
  
  @Stateless
  public class ChickenService {
  
      @Inject
      ChickenStore cs;
  
      public List&lt;Chicken&gt; getAllChickens() {
          return this.cs.all();
      }
  
      public void save(Chicken chicken) {
          this.cs.save(chicken);
      }
  }
  </code></pre>
  
  <p>and the resource</p>
  
  <pre><code>package pl.devcrowd.virtual.business.chickens.boundary;
  
  import java.util.List;
  
  import javax.inject.Inject;
  import javax.json.JsonObject;
  import javax.ws.rs.GET;
  import javax.ws.rs.POST;
  import javax.ws.rs.Path;
  
  import pl.devcrowd.virtual.business.chickens.entity.Chicken;
  
  @Path("chickens")
  public class ChickensResource {
  
      @Inject
      ChickenService cs;
  
      @GET
      public List&lt;Chicken&gt; chickens() {
          return cs.getAllChickens();
      }
  
      @POST
      public void save(JsonObject chicken) {
          String name = chicken.getString("name");
          int age = chicken.getInt("age");
          cs.save(new Chicken(name, age));
      }
  }
  </code></pre>
  
  <p><code>control</code> package contains the store which is mostly useless in this example</p>
  
  <pre><code>package pl.devcrowd.virtual.business.chickens.controls;
  
  import java.util.List;
  
  import javax.persistence.EntityManager;
  import javax.persistence.PersistenceContext;
  
  import pl.devcrowd.virtual.business.chickens.entity.Chicken;
  
  public class ChickenStore {
  
      @PersistenceContext
      EntityManager em;
  
      public void save(Chicken chicken) {
          em.merge(chicken);
      }
  
      public List&lt;Chicken&gt; all() {
          return this.em
                  .createNamedQuery("all", Chicken.class)
                  .getResultList();
      }
  }
  </code></pre>
  
  <p><code>entity</code> package contains the entity:</p>
  
  <pre><code>package pl.devcrowd.virtual.business.chickens.entity;
  
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.Id;
  import javax.persistence.NamedQuery;
  import javax.xml.bind.annotation.XmlAccessType;
  import javax.xml.bind.annotation.XmlAccessorType;
  import javax.xml.bind.annotation.XmlRootElement;
  
  @XmlAccessorType(XmlAccessType.FIELD)
  @XmlRootElement
  @Entity
  @NamedQuery(name="all", query = "SELECT c FROM Chicken C")
  public class Chicken {
  
      @Id
      @GeneratedValue
      private long id;
      private String name;
      private int age;
  
      public Chicken() {}
  
      public Chicken(String name, int age) {
          this.name = name;
          this.age = age;
      }
  }
  </code></pre>
  
  <p>The parent package contains the Jax-RS application class which I implemented, I hope correctly:</p>
  
  <pre><code>package pl.devcrowd.virtual.business;
  
  import java.util.Arrays;
  import java.util.HashSet;
  import java.util.Set;
  
  import javax.ws.rs.ApplicationPath;
  import javax.ws.rs.core.Application;
  
  import pl.devcrowd.virtual.business.chickens.boundary.ChickensResource;
  
  /**
   * Configures a JAX-RS endpoint. Delete this class, if you are not exposing
   * JAX-RS resources in your application.
   *
   * @author airhacks.com
   */
  @ApplicationPath("resources")
  public class JAXRSConfiguration extends Application {
      public Set&lt;Class&lt;?&gt;&gt; getClasses() {
          return new HashSet&lt;Class&lt;?&gt;&gt;(Arrays.asList(ChickensResource.class));
      }
  }
  </code></pre>
  
  <p>Now i'm trying to do a GET request like this</p>
  
  <pre><code>RestClient get = RestClient.create().method("GET")
          .host("http://localhost:8080/DevCrowd")
          .path("resources/chickens");
  GluonObservableList&lt;Chicken&gt; sample = DataProvider.retrieveList(
          get.createListDataReader(Chicken.class));
  System.out.println(sample);
  </code></pre>
  
  <p>where Chicken is</p>
  
  <pre><code>public class Chicken {
  
      private String name;
      private int age;
  
      public Chicken(String name, int age) {
          this.name = name;
          this.age = age;
      }
  
      public int getAge() {
          return age;
      }
  
      public void setAge(int age) {
          this.age = age;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public String getName() {
          return name;
      }
  }
  </code></pre>
  
  <p>and I get the error:</p>
  
  <pre><code>05:59:17,019 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-3) RESTEASY002005: Failed executing GET /chickens: org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: text/html
      at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:66)
      at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:473)
      at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:422)
      at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)
      at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
      at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
      at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
      at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
      at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
      at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
      at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
      at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
      at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
      at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
      at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
      at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
      at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
      at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
      at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
      at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
      at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
      at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
      at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
      at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
      at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p>What am I doing wrong?</p>