未找到 Java 类的消息正文编写器 ...和 MIME 媒体类型 text/html [重复]
Posted
技术标签:
【中文标题】未找到 Java 类的消息正文编写器 ...和 MIME 媒体类型 text/html [重复]【英文标题】:A message body writer for Java class ... and MIME media type text/html was not found [duplicate] 【发布时间】:2012-01-28 13:29:05 【问题描述】:我正在使用 jms/atmosphere 框架在两个应用程序之间进行通信。 其中一个应用程序是主题的消息生产者,发送以下类型的自定义对象:
@XmlRootElement
public class A implements Serializable
public A()
/* some private properties */
另一方面,不止一个消费者正在监听该主题,并根据 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);
我注意到消息正确到达 JMS 主题,但我收到以下异常:
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、球衣 1.11。我在网上搜索并尝试了任何可能的解决方案,但没有任何帮助。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,原因是我的类路径中没有包含 Jersey 的 json 模块。您可以通过在 maven 上添加以下依赖项来简单地修复它
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.14</version>
</dependency>
【讨论】:
我添加了 jersey-json 依赖,但问题还是一样。 当你想生成json时需要这个依赖,但是OP想要html 链接断开,请修复?【参考方案2】:看来您需要为通过泽西岛传输的类实现所需的 MessageBodyWriter。
您可以将@Provider附加到类A,并使其实现MessageBodyWriter,例如:
@Provider 公共类A实现MessageBodyWriter
这将迫使您在 jersey 传输方法中的对象时覆盖所需的方法(writeTo、getSize、isWriteable)。
【讨论】:
这不起作用。我在订阅之前直接实现 MessageBodyWriter 并覆盖这些方法,但它们从未被调用。 您是否已将 MessageBodyWriter 注册到 Application (javax.ws.rs.core.Application)?在 jersey 初始化时,Application.getClasses() 方法返回一组类,并且应该在该组中返回 Providers(如 MessageBodyWriters)。以上是关于未找到 Java 类的消息正文编写器 ...和 MIME 媒体类型 text/html [重复]的主要内容,如果未能解决你的问题,请参考以下文章
未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
未找到 Java 类型、net.sf.json.JSONObject 类和 MIME 媒体类型 application/json 的消息正文编写器
找不到 Java 类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
严重:找不到 Java 类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
未找到 Java 类型和 MIME 媒体类型 application/json;charset=utf-8 的消息正文阅读器