users@jersey.java.net

[Jersey] Re: A message body writer for Java class … and MIME media type text/html was not found

From: Pavel Bucek <pavel.bucek_at_oracle.com>
Date: Tue, 10 Jan 2012 11:47:07 +0100

Hello,

I'm not atmosphere expert, but I think important here are following lines:

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

class A is @XmlRootElement annotated and Jersey provides marshalling (serializing) for it BUT only for certain media types, like application/xml text/xml and */*+xml. Try to use anything from that list and it should disappear.

Regards,
Pavel



On 12/27/11 4:22 PM, mejay wrote:
> 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 subscribe() {
> return new SuspendResponse.SuspendResponseBuilder ()
> .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.
>
>
> --
> View this message in context: http://jersey.576304.n2.nabble.com/A-message-body-writer-for-Java-class-and-MIME-media-type-text-html-was-not-found-tp7130368p7130368.html
> Sent from the Jersey mailing list archive at Nabble.com.
>