当前位置: 首页 > 知识库问答 >
问题:

使用JMS ObjectMessage时发生ClassNotFound异常

夔光霁
2023-03-14

我通过Spring Boot中编写的侦听器使用JMS对象消息。我正在通过我的Camel应用程序将ObjectMessage发送到ActiveMQ队列,我正在Spring Boot应用程序中的侦听器类中侦听队列。

代码:

final BindyCsvDataFormat bindy = new BindyCsvDataFormat(EquityFeeds.class);
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
CamelContext _ctx = new DefaultCamelContext(); 
_ctx.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
_ctx.addRoutes(new RouteBuilder() {

    public void configure() throws Exception {
        from("file:src/main/resources?fileName=data.csv")               
            .unmarshal(bindy)
            .split(body())
            .streaming().to("jms:queue:javaobjects.upstream.queue");
    }
});

这是我的POJO类EquityFeeds

@CsvRecord(separator = ",",skipFirstLine = true)
public class EquityFeeds implements Serializable {

    private static final long serialVersionUID = 1L;

    @DataField(pos = 1) 
    private String externalTransactionId;

    @DataField(pos = 2)
    private String clientId;

    // other fields and getters setters
    ...

在ActiveMQ队列中,我收到的消息为:

camelproject.EquityFeeds@1665425

我在Spring Boot中的JMS侦听器:

@JmsListener(destination = "javaobjects.upstream.queue")
public void capitalIQProcessor(final Message objectMessage) throws JMSException {
    Object messageData = null;

    if(objectMessage instanceof ObjectMessage) {
        ObjectMessage objMessage = (ObjectMessage) objectMessage;
        System.out.println("Starting Object Message.");

        Object object = objMessage.getObject();

        EquityFeeds equityFeeds = (EquityFeeds) object;

        System.out.println("Object: "+equityFeeds.toString());
    }    
}

我得到一个Exception@line对象对象=Object Message.getObject();

capitalIQProcessor(javax.jms.Message) throws javax.jms.JMSException' threw exception; nested exception is javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: camelproject.EquityFeeds. Caused by: javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: camelproject.EquityFeeds. Caused by: java.lang.ClassNotFoundException: camelproject.EquityFeeds

通过堆栈溢出和网络上的其他帖子,我做了以下更改:

>

  1. 然后添加条目:wrapper.java.classpath.3=C:\Users\sidbharg\eclipse workspace\Sid\target\camelproject-0.0.1-SNAPSHOT。jar这是.jar文件的位置,我的POJO(EquityFeeds)在这里

在我的消费者代码中,我还添加了activeMQConnectionFactory.setTrustAllPackages(true)

public ActiveMQConnectionFactory activeMQConnectionFactory() {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
        activeMQConnectionFactory.setBrokerURL(brokerURL);
        activeMQConnectionFactory.setTrustAllPackages(true);
        return activeMQConnectionFactory;
}

现在问题是什么?为什么给我例外。我哪里出错了?有什么我忘记了需要补充的吗?

共有1个答案

竺辉
2023-03-14

你需要一个项目。EquityFeeds在使用JMS的应用程序的类路径上。显然JVM找不到它,因此抛出了一个java.lang.ClassNotFoundException。

此外,您不需要对代理的wrapper.conf进行这些更改。侦听器正在尝试反序列化消息,而不是代理。

 类似资料:
  • 问题内容: 我试图在我创建的特定Java类对象上列出方法列表,并尝试对其进行单元测试。 它无法说无法找到带有“ java.lang.ClassNotFoundException:类com.jr.freedom.user.User”的类。 这是测试代码: 我的项目包如下所示: 在项目文件夹中:src test User类位于src> com> jr?freedom> user(代表com.jr.fr

  • 问题内容: 我正在学习Java并正在阅读这本书:https : //www.fca.pt/cgi- bin/fca_main.cgi/?op=2&isbn=978-972-722-791-4 。 在这本书中,我有一个Javaapplet练习。我可以在appletviewer中的Eclipse中运行它,并且运行良好。但是我无法将小程序集成到HTML中。 这是我的Java代码: 现在这是我的html代

  • 我决定写RMI(从书中)也从书中获取代码。我用rmic创建了存根,并启动了rmiregistry,但当我决定编写java启动服务器时,我遇到了一个问题,实际上我面临的问题是:java-classpath D:\RMI AddServer Exception:java。马绍尔群岛共和国。ServerException:服务器线程中发生RemoteException;唯一的例外是:java。马绍尔群岛

  • 我在使用以下简单示例时遇到了“ClassNotFound”异常的问题: 在本地模式下,按照文档提交会在第31行生成一个“ClassNotFound”异常,其中ClassToRoundTrip对象被反序列化。奇怪的是,前面28行的使用还可以: 但是,提交给本地开发人员主机仍然会产生相同的问题: 我可以从输出中看到JAR文件正在被执行器提取。 下面是其中一个执行程序的日志:

  • 当我使用poi JAR在excel工作簿中写入一些数据时,代码中出现了以下异常: 我添加了以下罐子: > xmlbeans-2.4.0 poi-ooxml-schemas-3.11 poi-3.11 commons-logging-1.1 dom4j-1.6.1 log4j-1.2.17

  • 我试图在Python3.4中创建一个ping服务器的函数。目前它只需要在Windows(可能是XP及以上)上工作。 我发现可以使用WMI Win32_PingStatus(Reference)类ping服务器,并编写了以下函数: 当您可以ping IP时,它返回True,当您不能ping IP时,它返回false。然而,每次运行它时,我都会在末尾出现一系列错误: 每次运行脚本时都会发生这种情况,尽