代码之家  ›  专栏  ›  技术社区  ›  dierre

JSON、Stomp和ActiveMQ

  •  1
  • dierre  · 技术社区  · 13 年前

    好吧,交易到此为止。 我在读书 this tutorial 以及 documentation 来自ActiveMQ网站。

    在我们的文件中 消息转换 ,这句话:

    SEND和SUBSCRIBE消息上的转换消息标头可以 用于指示ActiveMQ将消息从文本转换为 你渴望的形式。目前,ActiveMQ附带了一个转换器 可以将XML/JONS文本转换为Java对象

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

    所以我做了这个,我用注释了我的pojo XStream别名 :

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

    1 回复  |  直到 13 年前
        1
  •  1
  •   dierre    13 年前

    很明显,这是我的activeMQ版本的一个问题。一旦切换到 5.8.0 一切都像施了魔法一样。