There is no callback.
Perhaps you can supply a patch that add this behaviour?
You can set your own message property (e.g. "INTERNAL_EXPIRY_TIME") and in your queue receiver do your own expiration checking.
Adding the code to JBoss wouldn't be too hard, just a little messy. There are mainly two places which check for and handle expiration. One in BasicQueue.dropMessage, the other routine is in MessageConsumer (which I think we no longer need.)
Call the setting "expiration policy":
I might do this myself. :-)