Скопировать свойства сообщения JMS - PullRequest
6 голосов
/ 17 сентября 2010

Есть ли простой способ скопировать свойства из одного сообщения JMS в другое?

Я могу представить что-то вроде этого:

private void copyMessageProperties (Message msg1, Message msg2) throws JMSException {
    Enumeration srcProperties = msg1.getPropertyNames();
    while (srcProperties.hasMoreElements()) {
        String propertyName = (String) srcProperties.nextElement ();

        // Now try to read and set
        try {
            Object obj = msg1.getObjectProperty (propertyName);
            msg2.setObjectProperty (propertyName, obj);
            continue;
        } catch (Exception e) {}
        try {
            String str = msg1.getStringProperty (propertyName);
            msg2.setStringProperty (propertyName, str);
            continue;
            ...
        }
    }
}

Но это серьезно безобразно. Должен быть другой путь

1 Ответ

9 голосов
/ 23 сентября 2010

Вот решение, которое я выбрал ...

@SuppressWarnings("unchecked")
private static HashMap<String, Object> getMessageProperties(Message msg) throws JMSException 
{
   HashMap<String, Object> properties = new HashMap<String, Object> ();
   Enumeration srcProperties = msg.getPropertyNames();
   while (srcProperties.hasMoreElements()) {
       String propertyName = (String)srcProperties.nextElement ();
       properties.put(propertyName, msg.getObjectProperty (propertyName));
   }
   return properties;
}

private static void setMessageProperties(Message msg, HashMap<String, Object> properties) throws JMSException {
    if (properties == null) {
        return;
    }
    for (Map.Entry<String, Object> entry : properties.entrySet()) {
        String propertyName = entry.getKey ();
        Object value = entry.getValue ();
        msg.setObjectProperty(propertyName, value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...