Я создал следующий Pointcut для вызовов javax.jms.MessageProducer.send (..):Определение назначения Сообщение JMS с AspectJ
pointcut callJmsSend(Message message):
(call(void javax.jms.MessageProducer.send(javax.jms.Message)))
&& args(message);
, который работает отлично. У меня есть как до, так и после совета для этого pointcut, который (среди прочего) читает свойство 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 для getDestination() reveiled, что свойство устанавливается после отправки() вызывается.
Получает объект Destination для этого сообщения. Поле заголовка JMSDestination содержит пункт назначения, которому отправляется сообщение.
Когда сообщение отправлено, это поле игнорируется. После завершения метода send или publish> поле содержит место назначения, указанное в методе.
Есть ли другой способ доступа к JmsDestination в пределах до консультации?
редактировать: Возможно, полезная информация: Я использую ActiveMQ