Could not find MessageBodyWriter for response object type: java.util.ArrayList media type: text / html - in Resteasy

I am developing RESTEasy . In this example, I use all the latest dependencies and deploy om tomcat 8.x. I can successfully deploy the application, but when I run the URL: http: // localhost: 8080 / RESTfulExample / rest / restwebservice / list , I see the following errors. Please tell us what is wrong here.

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:466) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:415) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:202) 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:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 

The code I have developed so far for reference: pom.xml

 <repositories> <repository> <id>JBoss repository</id> <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> </repository> </repositories> <properties> <java.version>1.8</java.version> <resteasy-jaxrs-version>3.0.16.Final</resteasy-jaxrs-version> <junit.version>4.12</junit.version> </properties> <dependencies> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>${resteasy-jaxrs-version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-servlet-initializer</artifactId> <version>${resteasy-jaxrs-version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <!-- Project Build --> <build> <finalName>RESTfulExample</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> 

Student.java

 @XmlRootElement public class Student { private int student_id; private String student_name; private String student_rollnumber; // setters and getters } 

RESTEasyService.java

 @ApplicationPath("/rest") public class RESTEasyService extends Application{ } 

RESTWebServiceJavaExample.java

 @Path("/restwebservice") public class RESTWebServiceJavaExample { private TreeMap<Integer, Student> webserviceMap= new TreeMap<>(); public RESTWebServiceJavaExample(){ Student student = new Student(); student.setStudent_name("Ricky"); student.setStudent_rollnumber("AOHP451"); addStudent(student); student = new Student(); student.setStudent_name("Mayer"); student.setStudent_rollnumber("DKLP987"); addStudent(student); } @GET @Path("list") public List<Student> getStudents() { List<Student> students = new ArrayList<Student>(); students.addAll(webserviceMap.values()); return students; } @POST @Path("add") @Produces("text/plain") @Consumes("application/xml") public void addStudent(Student student_param) { int id = webserviceMap.size(); student_param.setStudent_id(id); webserviceMap.put(id, student_param); } } 

web.xml:

 <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Restful Web Application</display-name> </web-app> 
+13
java jaxb resteasy
source share
6 answers

Now I can solve this problem. I need to add the following dependency in pom.xml :

 <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>3.0.16.Final</version> </dependency> 

And 1) I have to use @Produces(MediaType.APPLICATION_XML) to @Produces(MediaType.APPLICATION_XML) method to get the next answer.

 This XML file does not appear to have any style information associated with it. The document tree is shown below. <collection> <student> <student_id>0</student_id> <student_name>Ricky</student_name> <student_rollnumber>AOHP451</student_rollnumber> </student> <student> <student_id>1</student_id> <student_name>Mayer</student_name> <student_rollnumber>DKLP987</student_rollnumber> </student> </collection> 

2) If you want to use @Produces(MediaType.TEXT_PLAIN) , then the code will give you the following result, which does not look useful.

 [com.mkyong.rest.Student@4d5fd75e, com.mkyong.rest.Student@7715574d] 

So use 1) solution.

+11
source share

Try adding a specific version of the serializer

  <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson-provider</artifactId> <version>${resteasy.version}</version> </dependency> 
+3
source share
 @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) 

adding these annotations solved my problem.

+1
source share

To be more clear, for beginners. add

@XmlRootElement(name = "yourClassLowerCased") at the beginning of your class, for example

 package org.dlss.entities; import javax.persistence.*; import javax.xml.bind.annotation.XmlRootElement; @Entity //The class will be a javax.persistence Entity (could be stored in a DB) @Table(name = "person", schema = "public", catalog = "<databaseName>") //Table name @XmlRootElement(name = "person") public class PersonEntity { @Id //Following field will be the id of the table @GeneratedValue(strategy = GenerationType.IDENTITY) //Will be autoincremented when generated for type SERIAL into postgresql private Integer id; 
0
source share

For me, it was an attempt to serialize an array into XML. If you need it, for movies you need a wrapper class like this:

 @XmlRootElement(name = "movies") @XmlAccessorType(XmlAccessType.FIELD) public class Movies { @XmlElement(name = "movie") private List<Movie> movies; public List<Movie> getMovies() { return movies; } public void setMovies(List<Movie> movies) { this.movies = movies; } } 

Thus, it can be serialized under the root object.

0
source share

(For those who find the question, works with quarkus)

Using this setup procedure:

 mvn io.quarkus:quarkus-maven-plugin:0.16.1:create -DprojectGroupId=com.sample -DprojectArtifactId=hello-quarkus -DclassName="com.sample.DemoEndpoint" -Dpath="/persons" 

To fix the problem described here, I had to add this dependency.

 <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jsonb</artifactId> </dependency> 

here is my full pom.xml after i added the above dependency. Again, 99% if came from the mvn command above.

 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.sample</groupId> <artifactId>hello-quarkus</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <surefire-plugin.version>2.22.0</surefire-plugin.version> <quarkus.version>0.16.1</quarkus.version> <maven.compiler.source>1.8</maven.compiler.source> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-bom</artifactId> <version>${quarkus.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jsonb</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire-plugin.version}</version> <configuration> <systemProperties> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> </systemProperties> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>native</id> <activation> <property> <name>native</name> </property> </activation> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals> <goal>native-image</goal> </goals> <configuration> <enableHttpUrlHandler>true</enableHttpUrlHandler> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemProperties> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> </systemProperties> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project> 
0
source share

All Articles