【问题标题】:JSON, Stomp and ActiveMQJSON、Stomp 和 ActiveMQ
【发布时间】:2013-02-02 21:09:55
【问题描述】:

好的,这就是交易。 我正在阅读 ActiveMQ 网站上的 this tutorialdocumentation

在我们拥有的文档中,在 Message Transformations 下,这句话:

SEND 和 SUBSCRIBE 消息上的转换消息头可以 用于指示 ActiveMQ 将消息从文本转换为 你想要的格式。目前,ActiveMQ 自带了一个转换器 可以将 XML/JSON 文本转换为 Java 对象

ActiveMQ 使用 XStream 来满足其转换需求。既然是 可选依赖项,您必须将其添加到代理的类路径中 将适当的 JAR 放入 lib/ 文件夹。此外,如果您 计划使用 JSON 转换,您必须添加 Jettison JSON 解析器 到类路径。

所以我这样做了,我用 XStreamAlias 注释了我的 pojo:

@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。我错过了什么?

【问题讨论】:

    标签: java php jms activemq stomp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2012-11-03
      • 2015-07-02
      • 2017-03-06
      • 2014-04-19
      • 2019-10-28
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多