有人可以帮助我。这是我的问题:

我尝试使用jms发送一个对象(这部分有效)并使用jms接收它。
我的对象很简单。 3个字符串,3个int和一个布尔值。

没有连接问题或类似问题。我收到了对象,但是好像我一一收到了所有东西。

这是我的MessageListener:

 MessageListener listner = new MessageListener() {
            public void onMessage(Message message) {

                ObectToSend yo=null;

                try {
                    if (message instanceof ObjectMessage) {
                        ObjectMessage myMessage = (ObjectMessage) message;
                        System.err.println("test");
                        yo = (ObectToSend) myMessage.getObject();
                        System.err.println("test2");
                        System.err.println(yo.entite + "  " + yo.error  + "  " + yo.idGloreg  + "  " + yo.indPerso  + "  " + yo.nom  + "  " + yo.prenom  + "  " + yo.nom);
                    }
                } catch (JMSException e) {
                    System.out.println("Caught:" + e);
                    e.printStackTrace();
                }
            }
        };


而我的发送部分:

 Serializable ObectTest = new ObectToSend("pro", "enc", 134, 10, true, "yayaya", 0);

        MessageProducer producer = session.createProducer(topic);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);

        ObjectMessage message = session.createObjectMessage();

        message.setObject(ObectTest);
        connection.start();
        producer.send(message);


最后,这是我要发送的内容(在receive.java和sender.java中):

 public static class ObectToSend implements Serializable{

    private static final long serialVersionUID = 1L;
    String prenom;
      String nom;
      int idGloreg;
      int indPerso;
      boolean ok;
      String entite;
      int error;

      ObectToSend(String prenomP, String nomP, int idGloregP, int indPersoP, boolean okP, String entiteP, int errorP){
           prenom = prenomP ;
           nom= nomP;
          idGloreg = idGloregP;
           indPerso = indPersoP;
           ok = okP;
           entite= entiteP;
           error = errorP;
      }
    }


我的控制台:

test
test
test
test
test
test
test


如果有人能告诉我这是什么大问题。我不明白我的主题/队列/同步/异步的短信运行得很好。涉及对象和...
看来问题出在这里:
    yo =(ObectToSend)myMessage.getObject();
但.....

最佳答案

对于JMS的未来用户,我将回答我自己的问题。

很难找到任何信息,因为JMS文档中没有对此进行说明。

我发现很多人都在问该怎么做,但是却没有任何答案。那是因为它不依赖于JMS,而是依赖Java。

所以就这样:

如果您想使用相同的类(对象),例如

ObectToSend yo = (ObectToSend) myMessage.getObject();


我的第一个对象(yo)来自com.test.jms包中的ObectToSend.java类,而我的第二个对象(myMessage.getObject())来自com.test.jms2包。因此,我有一个类似“ notfoundclass”的异常。并且不能投射物体。

两个项目中都应该包含ObectToSend.java类。但是您不能只复制具有相同名称的粘贴(我愚蠢地这样做)。
您需要创建在两个项目/程序包中使用的类的jar并将其添加到两个项目中。

这样,您就可以使用完全相同的类,而不是它的副本。和您的2个对象完全相同。

10-04 11:11
查看更多