Поскольку DSL является частью Framework и он компилируется до того, как вы начнете его использовать, мы не можем вывести какие-либо пользовательские методы POJO, поэтому нет такого чистого способа подсчета с любыми пользовательскими заголовками, как в вашем примере..
Закрытый способ повторного использования вашего transform()
с этими аннотациями к параметрам заключается в следующем .transform()
контракте:
/**
* Populate the {@code MessageTransformingHandler} for the {@link MethodInvokingTransformer}
* to invoke the service method at runtime.
* @param service the service to use.
* @param methodName the method to invoke.
* @return the current {@link IntegrationFlowDefinition}.
* @see MethodInvokingTransformer
*/
public B transform(Object service, String methodName)
Итак, вам нужно объявить компонент сэтот метод и используйте его в аргументе service
. В то же время упомяните метод в аргументе methodName
.
Другой способ получить доступ к заголовкам - запросить полный тип Message
для лямбды:
/**
* Populate the {@link MessageTransformingHandler} instance for the provided
* {@link GenericTransformer} for the specific {@code payloadType} to convert at
* runtime.
* Use {@link #transform(Class, GenericTransformer)} if you need access to the
* entire message.
* @param payloadType the {@link Class} for expected payload type. It can also be
* {@code Message.class} if you wish to access the entire message in the transformer.
* Conversion to this type will be attempted, if necessary.
* @param genericTransformer the {@link GenericTransformer} to populate.
* @param <P> the payload type - 'transform from' or {@code Message.class}.
* @param <T> the target type - 'transform to'.
* @return the current {@link IntegrationFlowDefinition}.
* @see MethodInvokingTransformer
* @see LambdaMessageProcessor
*/
public <P, T> B transform(Class<P> payloadType, GenericTransformer<P, T> genericTransformer) {
В этом случае код может быть таким:
.transform(Message.class, m -> m.getHeaders())