使用jms java接收对象



谁能帮帮我?我的问题是:

我尝试用jms发送一个对象(这部分工作)并用jms接收它。我的目标很简单。3字符串、3整型和一个布尔值。

没有连接或类似的问题。我收到了这个物体,但就好像我一件一件地收到了所有东西。

这是我的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);

最后是我想要发送的内容(在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;  
      }
    }

My console:

test
test
test
test
test
test
test
如果有人能告诉我是什么问题,那就太好了。我不明白。我的短信主题/队列/同步/异步工作得很好。它来到了object和....问题似乎在这里:yo = (objecttosend) myMessage.getObject();但是…

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

很难找到任何信息,因为JMS文档中没有解释。

我发现很多人问怎么做,但从来没有任何答案。这是因为它与JMS无关,而与Java有关。

所以它是这样的:

如果您想使用与

相同的类(对象)
ObectToSend yo = (ObectToSend) myMessage.getObject();

我的第一个对象(yo)来自包com.test.jms中的obectsend .java类,我的第二个对象(myMessage.getObject())来自包com.test.jms2。所以我有一个类似于"notfoundclass"的异常。并且不能强制转换对象

类objectsend .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");

最新更新