我为javax.jms.MessageProducer.send(..)调用创建了以下切入点:
pointcut callJmsSend(Message message):
(call(void javax.jms.MessageProducer.send(javax.jms.Message)))
&& args(message);
工作正常。我有这个切入点的前后建议,其中(除其他外)读取JmsDestination属性。
before(Message message): callJmsSend(message) {
// null pointer exception
String queueName = message.getJMSDestination().toString();
}
after(Message message): callJmsSend(message) {
// works
String queueName = message.getJMSDestination().toString();
}
读取JavaDoc for getDestination(),发现在调用send()之后设置了该属性。
获取此消息的Destination对象。 JMSDestination标头字段包含消息被发送到的目的地。
发送消息时,将忽略此字段。完成发送或发布>方法后,该字段保存方法指定的目标。
还有其他方法可以在之前的建议中访问JmsDestination吗?
编辑: 也许有用的信息:我正在使用ActiveMQ
答案 0 :(得分:0)
我找到了解决问题的方法:
MessageProducer producer = (MessageProducer)thisJoinPoint.getTarget();
String queueName = producer.getDestination().toString();