使用jms-java接收对象

使用jms-java接收对象,java,object,jms,jms-topic,Java,Object,Jms,Jms Topic,谁能帮帮我吗。我的问题是: 我尝试用jms发送一个对象,这部分工作正常,用jms接收它。 我的目标很简单。3个字符串、3个int和一个布尔值 不存在连接或类似问题。我收到了这个东西,但好像我一个接一个地收到了所有的东西 这是我的留言聆听者: MessageListener listner = new MessageListener() { public void onMessage(Message message) { ObectToS

谁能帮帮我吗。我的问题是:

我尝试用jms发送一个对象,这部分工作正常,用jms接收它。 我的目标很简单。3个字符串、3个int和一个布尔值

不存在连接或类似问题。我收到了这个东西,但好像我一个接一个地收到了所有的东西

这是我的留言聆听者:

 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);
最后,这里是我想在receiver.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
如果有人能告诉我是什么问题,那就太好了。我不明白。我的带有topic/queue/sync/async的textmessage工作得非常好。它涉及到对象和。。。。 问题似乎在这里: 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,并将其添加到两个项目中


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

您也可以使用地图消息。实际上,您只有字符串、整数和布尔值。实际上,您不需要对象。MapMessage是为您准备的,它简单得多

以下是一个例子:

// create mapMessage
message = session.createMapMessage();
                // Here insert variables in properties of the message
                // This can be filtred with selector
                message.setStringProperty("entity", entity);
                message.setStringProperty("messageFrom", messageFrom);

                // Here insert variables in body of the message
                //This CAN'T be filtred (what you want I think)
                message.setString("title", title);
                message.setString("description", description);


// Get map message

MapMessage mapMessage = (MapMessage) message;
// Here get variables of your message
                    String title = mapMessage.getString("title");
                    String description = mapMessage.getString("description");

看看它有多简单?

看起来您正在向JMS容器抛出运行时异常。捕获并记录堆栈跟踪.Thx以获取帮助,但我发现了错误。