Hi all,
in my scenario the header could contain a 'customer attribute' MessageId:
That 'customer attribute' is not mandatory so in some cases is not present.Code:[Headers={timestamp=1339161965407, id=..., JMSXDeliveryCount=1, jms_type=bp_list, jms_timestamp=1339161963190, jms_redelivered=false, MessageId=..., jms_messageId=...}]
I would like to use it around my spring context file when I want to trace the incoming request:
When MessageId is not present I would like to use instead headers.jms_messageId.Code:... <!-- Dispatch message --> <file:outbound-gateway directory="file:${unmatchedMessageType.directory}" request-channel="unmatchedMessageTypeChannel" reply-channel="generatedFileChannel" filename-generator-expression="'${queue.jndi.name}' + '_' + headers.MessageId + '.xml'"/> ...
So the logic should be: if headers contains MessageId use it else use jms_messageId.
I was not able to code that logic directly into a SpEL expression so I wrote a simple bean that exposes a method for doing that (public String retrieveId(MessageHeaders headers)).
Then I tried to use the bean in my spring context file
But I got below error:Code:<!-- Helper beans --> <beans:bean id="messageIdentifier" class="ch.integration.jms.listener.model.MessageIdentifier"/> ... <!-- Dispatch message --> <file:outbound-gateway directory="file:${unmatchedMessageType.directory}" request-channel="unmatchedMessageTypeChannel" reply-channel="generatedFileChannel" filename-generator-expression="'${queue.jndi.name}' + '_' + @messageIdentifier.retrieveId(headers) + '.xml'"/> ...
Any help is greatly appreciated.Code:Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E:(pos 49): No bean resolver registered in the context to resolve access to bean 'messageIdentifier' at org.springframework.expression.spel.ast.BeanReference.getValueInternal(BeanReference.java:45) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:52) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:63) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:62) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:62) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:62) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:62) at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:62) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:93) at org.springframework.integration.handler.LoggingHandler.handleMessageInternal(LoggingHandler.java:105) at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73) ... 41 more
Geetings
nuvola


Reply With Quote
arameter name="I_MSG_ID" expression="...":