A message body writer for Java class ... and MIME media type text/html was not found

32,089

I had the same issue and it was down to not having Jersey's json module included on my classpath. You can simply fix it by adding the following dependency on maven

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.14</version>
</dependency>
Share:
32,089
mejas
Author by

mejas

Updated on June 07, 2020

Comments

  • mejas
    mejas almost 4 years

    I am using the jms/atmosphere framework to make communication between two applications. One of the applications is a message producer for a topic, sending custom objects of the following type:

        @XmlRootElement
        public class A implements Serializable{
        public A(){}
    
        /* some private properties */
    
       }
    

    On the other side more than one consumers are listening on the topic and make different subscriptions depending on the id.

        @GET
        @Produces({MediaType.APPLICATION_JSON})
        public SuspendResponse<A> subscribe() {
        return new SuspendResponse.SuspendResponseBuilder<A>()
                .broadcaster(topic)
                .outputComments(true)
                .addListener(new EventsLogger()).build();
        } 
       @Override
    public void incomingBroadcast() {
        try {
            String id = getID();
            if (id.startsWith("/*")) {
                id = "atmosphere";
            }
    
            logger.info("Looking up Connection Factory {}", FACTORY_NAME);
            Context ctx = new InitialContext();
            ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(FACTORY_NAME);
    
            logger.info("Looking up topic: {}", TOPIC_NAME);
            Topic topic = (Topic) ctx.lookup(TOPIC_NAME);
    
            connection = connectionFactory.createConnection();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    
            logger.info("Create consumer for : {}", id);
            String selector = String.format("BroadcasterId = '%s'", id);
    
            consumer = session.createConsumer(topic, selector);
            consumer.setMessageListener(new MessageListener() {
    
                @Override
                public void onMessage(Message msg) {
                    try {
                        ObjectMessage om = (ObjectMessage) msg;
                        A a = (A) om.getObject();
                        if (a!= null && bc != null) {
                            broadcastReceivedMessage(a);
                        }
                        logger.info("Broadcasted message: {} ", a);
                    } catch (JMSException ex) {
                        logger.warn("Failed to broadcast message", ex);
                    }
                }
            });
            publisher = session.createProducer(topic);
            connection.start();
            logger.info("JMS created for topic {}, with filter {}", TOPIC_NAME, selector);
        } catch (Throwable ex) {
            throw new IllegalStateException("Unable to initialize MyBroadcaster", ex);
        }
    
    }
    

    What I notice is that the messages are arriving correctly on the JMS topic, but I receive the following exception:

       SEVERE: A message body writer for Java class A, and Java type class A, and MIME       
       media type text/html was not found
    
       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.MimeMultipartProvider
       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.json.impl.provider.entity.JSONJAXBElementProvider$General
       com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
       com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
       com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider
       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
       com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
       com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
       com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy
       com.sun.jersey.moxy.MoxyMessageBodyWorker
       com.sun.jersey.moxy.MoxyListMessageBodyWorker
    

    I am using Netbeans 7.0.1, glassfish 3.1.1, atmosphere 0.8.1, jersey 1.11. I searched the web an tried any possible solution but nothing helped.

  • mejas
    mejas over 12 years
    This doesn`t work. I implement the MessageBodyWriter directly before subscribe and I override the methods, but they are never invoked.
  • anilsinaci
    anilsinaci over 12 years
    Have you registered your MessageBodyWriter to Application (javax.ws.rs.core.Application)? While jersey is initiating, Application.getClasses() method returns a set of classes and Providers (such as MessageBodyWriters) should be returned in this set.
  • TOUDIdel
    TOUDIdel about 11 years
    I have added jersey-json dependency but the problem's still the same.
  • rds
    rds about 11 years
    This dependencies is required when you want to produce json, but the OP wants html
  • Mohamed Taher Alrefaie
    Mohamed Taher Alrefaie almost 11 years
    broken link, fix pleasE?