よし、これで取り引きだ。このチュートリアルと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 を取得しています。私は何が欠けていますか?