没有找到Java类的消息正文编写器…和MIME媒体类型text / html

我正在使用jms / atmosphere框架在两个应用程序之间进行通信。 其中一个应用程序是主题的消息生成器,发送以下类型的自定义对象:

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

另一方面,不止一个消费者正在监听该主题并根据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); } } 

我注意到消息正确地到达JMS主题,但是我收到以下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 

我使用的是Netbeans 7.0.1,glassfish 3.1.1,大气0.8.1,jersey1.11。 我在网上搜索了一个尝试过任何可能的解决方案,但没有任

我遇到了同样的问题,并且没有将Jersey的json模块包含在我的类路径中。 您可以通过在maven上添加以下依赖项来简单地修复它

  com.sun.jersey jersey-json 1.14  

您似乎需要为通过Jersey传输的类实现所需的MessageBodyWriter。

您可以将@Provider附加到A类,并使其实现MessageBodyWriter,例如:

@Provider公共类A实现了MessageBodyWriter

这将强制您覆盖所需的方法(writeTo,getSize,isWriteable),而jersey正在传输方法中的对象。