Uploaded image for project: 'RESTEasy'
  1. RESTEasy
  2. RESTEASY-640

javax.ws.rs.core.Response with String return value will cause org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.lang.String of media type: application/json

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Obsolete
    • Major
    • None
    • 2.2.3.GA, 2.3.0.GA
    • jaxrs
    • None
    • Low

    Description

      I think the following describes a bug as I expect a Resteasy service to handle a java.lang.String return type successfully.

      I am using Resteasy in a ServiceMix 4.4.0 deployment. The Rest service is exposed via OSGi and consumed by another OSGi bundle. I have attached the sample project source code.

      ********************
      The following two method signatures when called via a Resteasy client will through an exception. See helloworld-integration-test/src/test/java/test/api/svc/HelloSvcTest.java
      ********************

      • The method signatures that throw an exception:
          @POST
          @Path( "/StandardGreeting" )
          @Consumes( { "application/json", "text/json" } )
          @Produces( { "application/json", "text/json" } )
          @GZIP
          @Override
          public Response getStandardGreeting( GreetingRequest request )
          {
              String value = "Hi " + request.getRecipientName()
                      + "..."
                      + " " + "How is it going?";
      
              return Response.ok().entity( new String( value ) ).build();
          }
      
      
          @POST
          @Path( "/SimpleHelloGreeting" )
          @Consumes( { "application/json", "text/json" } )
          @Produces( { "application/json", "text/json" } )
          @GZIP
          @Override
          public String getSimpleHelloGreeting( GreetingRequest request )
          {
              String value = "Hello " + request.getRecipientName() + "!!!";
      
              return new String( value );
          }
      
      
      • Will throw the following exception:
      17:51:20,783 | ERROR | qtp628451228-74  | SynchronousDispatcher            | 651 - helloworld-org-jboss-resteasy - 2.2.3.GA | Failed executing POST /service/StandardGreeting
      org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.lang.String of media type: application/json
              at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:216)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:579)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:500)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)[651:helloworld-org-jboss-resteasy:2.2.3.GA]
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)[111:org.apache.geronimo.specs.geronimo-servlet_2.5_spec:1.1.2]
              at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538)[99:org.eclipse.jetty.servlet:7.4.5.v20110725]
              at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)[99:org.eclipse.jetty.servlet:7.4.5.v20110725]
              at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70)[113:org.ops4j.pax.web.pax-web-jetty:1.0.7]
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480)[101:org.eclipse.jetty.security:7.4.5.v20110725]
              at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:116)[113:org.ops4j.pax.web.pax-web-jetty:1.0.7]
              at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)[99:org.eclipse.jetty.servlet:7.4.5.v20110725]
              at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:72)[113:org.ops4j.pax.web.pax-web-jetty:1.0.7]
              at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.Server.handle(Server.java:346)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1065)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:823)[102:org.eclipse.jetty.http:7.4.5.v20110725]
              at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220)[102:org.eclipse.jetty.http:7.4.5.v20110725]
              at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)[98:org.eclipse.jetty.server:7.4.5.v20110725]
              at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535)[100:org.eclipse.jetty.io:7.4.5.v20110725]
              at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)[100:org.eclipse.jetty.io:7.4.5.v20110725]
              at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)[110:org.eclipse.jetty.util:7.4.5.v20110725]
              at java.lang.Thread.run(Thread.java:662)[:1.6.0_27]
      
      • The JUnit tests that fail (helloworld-integration-test\src\test\java\test\api\svc\HelloSvcTest.java):
          @SuppressWarnings( "static-method" )
          @Test
          public void testGetStandardGreeting()
          {
      
              ClientRequest request = null;
              ClientResponse<String> response = null;
      
              try
              {
      
                  GreetingRequest greetingRequest = new GreetingRequest();
                  greetingRequest.setRecipientName( "World" );
      
                  //
                  // Make the Service Call
                  //
                  request = new ClientRequest( "http://localhost:8181/service/StandardGreeting" );
                  request.accept( MediaType.APPLICATION_JSON );
                  request.body( MediaType.APPLICATION_JSON, greetingRequest );
                  response = request.post( String.class );
      
                  //
                  // Handle the Service Response
                  //
                  Assert.assertEquals( Response.Status.OK.getStatusCode(), response.getStatus() );
                  Assert.assertEquals( "Hi World... How is it going?", response.getEntity() );
      
      
              }
              catch ( Exception  e )
              {
                  throw new RuntimeException( e );
              }
              finally
              {
                  if ( null != response )
                  {
                      response.releaseConnection();
                  }
              }
      
          }
      
      
          @SuppressWarnings( "static-method" )
          @Test
          public void testGetSimpleHelloGreeting()
          {
      
              ClientRequest request = null;
              ClientResponse<String> response = null;
      
              try
              {
      
                  GreetingRequest greetingRequest = new GreetingRequest();
                  greetingRequest.setRecipientName( "World" );
      
                  //
                  // Make the Service Call
                  //
                  request = new ClientRequest( "http://localhost:8181/service/SimpleHelloGreeting" );
                  request.accept( MediaType.APPLICATION_JSON );
                  request.body( MediaType.APPLICATION_JSON, greetingRequest );
                  response = request.post( String.class );
      
                  //
                  // Handle the Service Response
                  //
                  Assert.assertEquals( Response.Status.OK.getStatusCode(), response.getStatus() );
                  Assert.assertEquals( "Hello World!!!", response.getEntity() );
      
      
              }
              catch ( Exception  e )
              {
                  throw new RuntimeException( e );
              }
              finally
              {
                  if ( null != response )
                  {
                      response.releaseConnection();
                  }
              }
      
          }
      
      
      

      Attachments

        Activity

          People

            patriot1burke@gmail.com Bill Burke (Inactive)
            marks1900 Mark N/A (Inactive)
            Votes:
            2 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: