Search code examples
javajspjerseyjersey-2.0

Not able to show JSP from Jersey : MessageBodyWriter not found for media type=text/html


I am getting following error and my JSP is not being loaded.

[info] JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-06-07 13:04:16 INFO  ReportController:242 - welcome page load called
Jun 07, 2016 1:04:16 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=text/html, 
type=class org.glassfish.jersey.server.mvc.Viewable, 
genericType=class org.glassfish.jersey.server.mvc.Viewable.

But all my JSON url is working fine.

Following are my code blocks.

@Path("/reports")
public class ReportController extends SpringBeanAutowiringSupport {

    @POST
    @Path("/submitReport")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public  ReportDTO submitReportCall (ReportDTO submitReportRequest) {
         //.....
    }

    @GET
    @Path("/test")
    public Viewable index(@Context HttpServletRequest request) {
        request.setAttribute("obj", new String("IT Works"));
        LOGGER.info("welcome page load called");
        return new Viewable("/WEB-INF/jsp/main.jsp", null);
    }
}

web.xml is as follows.

<servlet>
        <servlet-name>jersey-serlvet</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.mytool.rest.service</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
        </init-param>
          <init-param>
              <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
              <param-value>/WEB-INF/jsp</param-value>
          </init-param>
          <init-param>
              <param-name>jersey.config.server.provider.classnames</param-name>
              <param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
          </init-param>
        <load-on-startup>1</load-on-startup>
  </servlet>

====EDIT====

Modified web.xml with filter

<filter>
        <filter-name>jersey-serlvet</filter-name>
        <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.aol.compoundtool.rest.service</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature, org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
        </init-param>
          <init-param>
              <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
              <param-value>/WEB-INF/jsp</param-value>
          </init-param>

    </filter>
    <filter-mapping>
        <filter-name>jersey-serlvet</filter-name>
        <url-pattern>/aol/*</url-pattern>
    </filter-mapping>

Solution

  • i was having this same issue on Jersey 2.22.2. This is using Jetty 9ish

    in my case i was missing

    <dependency org="org.glassfish.jersey.ext" name="jersey-mvc-jsp" rev="2.22.2"/>
    

    for that specific error message. Ivy wasn't getting other required dependencies either.

    check https://eclipse-ee4j.github.io/jersey.github.io/documentation/2.22.2/modules-and-dependencies.html#modules sub your version of jersey in the url for the right version of docs

    my filter def

    <filter>
            <filter-name>jersey-servlet</filter-name>
            <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>
                             com.foo.services.mobile.resource,
                             com.fasterxml.jackson.jaxrs.json
                </param-value>
            </init-param>
            <init-param>
                    <param-name>jersey.config.server.provider.classnames</param-name>
                    <param-value>
                        org.glassfish.jersey.media.multipart.MultiPartFeature,
                        org.glassfish.jersey.server.mvc.jsp.JspMvcFeature
                    </param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    </filter>
    <filter-mapping>
        <filter-name>jersey-servlet</filter-name>
        <url-pattern>/rest/*</url-pattern>
    </filter-mapping>
    

    to support Multipart upload and JSP MVC these are my dependencies. enter image description here but get all of what is listed under compile for what ever features you are using. and test if you want to test.