Hi,

I have following spring configuration :

Code:
<chain input-channel="customer.validate.insert" output-channel="avm.getApplicableAVM">
		<header-enricher>
			<header name="ERROR_CODE" ref="customerEngine" method="checkDuplicateRecord"
				overwrite="true" />
		</header-enricher>
		<filter
			expression="headers['ERROR_CODE'] == T(jatis.avantrade.foundation.model.constant.ReturnCode).DATA_NOT_EXISTS"
			discard-channel="error" />

		<header-enricher>
			<header name="ERROR_CODE" ref="customerEngine" method="checkDuplicatePendingRecord"
				overwrite="true" />
		</header-enricher>
		<filter
			expression="headers['ERROR_CODE'] == T(jatis.avantrade.foundation.model.constant.ReturnCode).CODE_AVAILABLE"
			discard-channel="error" />
			<header-enricher>
			<header name="ERROR_CODE" ref="customerEngine" method="checkAvailableIntegrity"
				overwrite="true" />
		</header-enricher>
		<filter
			expression="headers['ERROR_CODE'] == T(jatis.avantrade.foundation.model.constant.ReturnCode).VALID_REFERENTIAL_INTEGRITY"
			discard-channel="error" />	
	</chain>
AND

Code:
<chain input-channel="fi.transaction.validate.submit.sell"
		output-channel="avm.getApplicableAVM">
		<header-enricher>
			<header name="ERROR_CODE" ref="FITransactionEngine" method="checkRemainingFaceValue"
				overwrite="true" />
		</header-enricher>
		<filter
			expression="headers['ERROR_CODE'] == T(jatis.avantrade.foundation.model.constant.ReturnCode).FI_TRANSACTION_REMAINING_FACE_VALUE_VALID"
			discard-channel="error" />

		<header-enricher>
			<header name="ERROR_CODE" ref="FITransactionEngine" method="checkSellType"
				overwrite="true" />
		</header-enricher>
		<filter
			expression="headers['ERROR_CODE'] == T(jatis.avantrade.foundation.model.constant.ReturnCode).FI_TRANSACTION_SELL_VALUE_VALID"
			discard-channel="error" />
	</chain>
Question : is there is possible for chain processing jump to another chain accidentally?
The reason i ask that is i have a problem with my spring configuration.
For example when my payload going to customer.validate.insert, it will execute checkDuplicateRecord method, then checkDuplicatePendingRecord, and then normally it's must go to checkAvailableIntegrity.
But sometimes it's process like this : checkDuplicateRecord, checkDuplicatePendingRecord, then jump to fi.transaction.validate.submit.sell channel to method checkRemainingFaceValue.
So it's generate exception :

Code:
Caused by: org.springframework.integration.MessagingException: failed to transform message headers
	at org.springframework.integration.transformer.HeaderEnricher.transform(HeaderEnricher.java:107)
	at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:67)
	... 153 more
Caused by: org.springframework.integration.MessageHandlingException: org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8): Method call: Method checkRemainingFaceValue(jatis.avantrade.foundation.model.domain.Customer) cannot be found on jatis.avantrade.fi.model.engine.TransactionEngine$$EnhancerByCGLIB$$b6781c49 type
	at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:76)
	at org.springframework.integration.transformer.HeaderEnricher$MethodInvokingHeaderValueMessageProcessor.processMessage(HeaderEnricher.java:215)
	at org.springframework.integration.transformer.HeaderEnricher.transform(HeaderEnricher.java:99)
	... 154 more
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8): Method call: Method checkRemainingFaceValue(jatis.avantrade.foundation.model.domain.Customer) cannot be found on jatis.avantrade.fi.model.engine.TransactionEngine$$EnhancerByCGLIB$$b6781c49 type
	at org.springframework.expression.spel.ast.MethodReference.findAccessorForMethod(MethodReference.java:185)
	at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:107)
	at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57)
	at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)
	at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:102)
	at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:114)
	at org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:220)
	at org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:120)
	at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:73)
	... 156 more
This strange behavior is not only happen in this chain. Another chain sometime behave like this.
Also, sometime it's process normally.

Why this can happen ? is it's wrong in my configuration ? or it is bug in SI chain?

Thanks!!