Discussion:
A message body writer for Java class … and MIME media type text/html was not found
mejay
2011-12-27 15:22:51 UTC
Permalink
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.
Pavel Bucek
2012-01-10 10:47:07 UTC
Permalink
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
Post by mejay
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
@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,
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
*/* ->
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.
Loading...