Ibm mq 无法解析Spring JMS标头布尔值

Ibm mq 无法解析Spring JMS标头布尔值,ibm-mq,spring-jms,Ibm Mq,Spring Jms,我在SpringJMS侦听器版本5中有一个错误 我已将标题设置为布尔值。 我在IBM mq浏览器上检查了消息头,并且正确设置了值; 但是,当侦听器使用消息时,无法解析消息头。 这就是错误: MessageHandlingException:方法参数类型[class java.lang.Boolean]缺少标题“VERSION_MESSAGE” 这是听众 @JmsListener(destination = QUEUE_INTERNE, containerFactory = "Liste

我在SpringJMS侦听器版本5中有一个错误

我已将标题设置为布尔值。 我在IBM mq浏览器上检查了消息头,并且正确设置了值; 但是,当侦听器使用消息时,无法解析消息头。 这就是错误:

MessageHandlingException:方法参数类型[class java.lang.Boolean]缺少标题“VERSION_MESSAGE”

这是听众

@JmsListener(destination = QUEUE_INTERNE, containerFactory = "ListenerContainerFactory")
    public void onMessageReceived(String message,                
                                  @Header (value = JmsHeaders.VERSION_MESSAGE) Boolean version)
下面是JmsHeaders的值。VERSION_消息是JmsHeaders

公共静态最终字符串VERSION\u MESSAGE=“VERSION\u MESSAGE”

我尝试了另一种方法,从侦听器中删除标题,如下所示:

@JmsListener(destination = QUEUE_INTERNE, containerFactory = "ListenerContainerFactory")
    public void onMessageReceived(javax.jms.Message message)

boolean version=message.getBooleanProperty(JmsHeaders.VERSION_MESSAGE);
我没有错误,但是布尔值总是为false

额外信息, 侦听器容器被覆盖如下:

@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
    BatchMessage batch = new BatchMessage(batchSize);       
    while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
    return batch.getMessages().isEmpty() ? null : batch;
}
并且重写的方法始终返回false:

  @Override
        public boolean getBooleanProperty(String s) throws JMSException {
            return false;
        }
现在我明白了为什么我总是得到false,但是我怎样才能使它返回正确的值呢


谢谢

我终于找到了问题的答案, 假设我的defaultListenerContainerFactory已被重写,并且当我们收到消息时,将执行此方法

@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
    BatchMessage batch = new BatchMessage(batchSize);       
    while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
    return batch.getMessages().isEmpty() ? null : batch;
}
因此,我们无法从侦听器访问标题,因为我们将消息包装在batchMessage中:

公共类BatchMessage实现消息{

private List<Message> messages = new ArrayList<>();

private int batchSize;
所有jmsheader和Jms数据都在消息内部意味着什么

因此,我必须仔细查看BatchMessage中的列表,以获取所有JMSAT属性和标题

下面是听众:

@JmsListener(destination = TARGETQUEUE, containerFactory = "BatchMessageListenerContainerFactory")
    public void onMessageReception(Message message) throws StockageQueueListenerException {

        try{

                    insererBatch((BatchMessage) message);
}

我终于找到了解决问题的办法, 假设我的defaultListenerContainerFactory已被重写,并且当我们收到消息时,将执行此方法

@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
    BatchMessage batch = new BatchMessage(batchSize);       
    while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
    return batch.getMessages().isEmpty() ? null : batch;
}
因此,我们无法从侦听器访问标题,因为我们将消息包装在batchMessage中:

公共类BatchMessage实现消息{

private List<Message> messages = new ArrayList<>();

private int batchSize;
所有jmsheader和Jms数据都在消息内部意味着什么

因此,我必须仔细查看BatchMessage中的列表,以获取所有JMSAT属性和标题

下面是听众:

@JmsListener(destination = TARGETQUEUE, containerFactory = "BatchMessageListenerContainerFactory")
    public void onMessageReception(Message message) throws StockageQueueListenerException {

        try{

                    insererBatch((BatchMessage) message);
}