1

よし、これで取り引きだ。このチュートリアルとActiveMQ Web サイトのドキュメントを読んでいました。

ドキュメントの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コードです(元の例はこちらです):

$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 を取得しています。私は何が欠けていますか?

4

1 に答える 1

1

どうやらそれは私のactiveMQバージョンの問題でした。すべてに切り替えると5.8.0、魅力のように機能しました。

于 2013-06-06T08:56:57.913 に答える