2013-02-18 118 views
1

好吧,这就是交易。 我正在阅读ActiveMQ网站上的this tutorialdocumentationJSON,Stomp和ActiveMQ

在我们的文档,下消息转换,这样的句子:

上发送变换邮件头和SUBSCRIBE消息可以 用于指示ActiveMQ的从文本转换消息到 格式你的愿望。目前,ActiveMQ的配备了一个变压器 可转换XML/JSON文本到Java对象

的ActiveMQ使用的XStream其转型的需求。由于它是 可选依赖项,所以您必须将其添加到代理的类路径中,方法是将相应的JAR放入lib /文件夹中。此外,如果您计划使用JSON转换,您必须将Jettison JSON解析器 添加到类路径中。

所以我这样做,我已经注释我POJO与XStreamAlias

@XStreamAlias("ProvaPojo") 
public class ProvaPojo implements Serializable { 

    private static final long serialVersionUID = 1687248536279612587L; 

    @XStreamAlias("fieldOne") 
    private int fieldOne; 

    @XStreamAlias("fieldTwo") 
    private String fieldTwo; 

    public int getFieldOne() { 
    return fieldOne; 
    } 

    public void setFieldOne(int fieldOne) { 
    this.fieldOne = fieldOne; 
    } 

    public String getFieldTwo() { 
    return fieldTwo; 
    } 

    public void setFieldTwo(String fieldTwo) { 
    this.fieldTwo = fieldTwo; 
    } 

} 

,这是我的PHP代码(原来的例子是here):

$body = array(
     'ProvaPojo' => array(
      array('fieldOne' => 14), 
      array('fieldTwo' => 'Stringa') 
     ) 
); 

$header = array(); 
$header['transformation'] = 'jms-map-json'; 
$mapMessage = new StompMessageMap($body, $header); 
$con->send($queue, $mapMessage); 

而且这是我的听众

@Override 
protected void _onMessage(Message message) { 
if (!(message instanceof ObjectMessage)) 
    throw new IllegalStateException(); 
ObjectMessage objectMessage = (ObjectMessage) message; 
try { 
    if (!(objectMessage.getObject() instanceof BlacklisterRecipientBean)) 
    throw new IllegalArgumentException(
      "The message content is not an instance of " 
        + BlacklisterRecipientBean.class.getSimpleName()); 
    BlacklisterRecipientBean recipient = (BlacklisterRecipientBean) objectMessage 
     .getObject(); 
    log.info("_onMessage(Message)"); 
    IncomingBlacklistAddJMSTrigger trigger = new IncomingBlacklistAddJMSTrigger(); 
    trigger.setArgs(recipient); 
    notifyObservers(trigger); 
} catch (JMSException e) { 
    log.error("_onMessage(Message) - exception ignored", e); 
} 

} 

但我总是得到一个ActiveMQTextMessage。我错过了什么?

回答

0

所以很明显,这是我的activeMQ版本的问题。一旦切换到5.8.0一切都像一个魅力。