在调用外部api之前过滤 Camel 头

bnlyeluc  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(216)

我已经被headerfilterstrategy定义为

@Configuration
public class HeaderFilterConfiguration extends DefaultHeaderFilterStrategy {
    @Bean("exchangeObjectFilter")
    public void removeExchangeObject() {
        setFilterOnMatch(false);
        Set<String> filters = getOutFilter();
        filters.add("orchestrationExchange");
        setOutFilter(filters);
    }

}

我使用这个过滤策略使用这个代码

from("direct:mock")
                .streamCaching()
                .routeId("orchestration-token")
                .routeDescription("Invokes GET token details to call external endpoints")
                .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST))
                .setHeader(Exchange.CONTENT_TYPE, constant(ContentType.APPLICATION_FORM_URLENCODED.getMimeType()))
                .setBody(header(REQUEST_BODY))
                .toD("http://my-okta-route.com?headerFilterStrategy=#exchangeObjectFilter")
                .unmarshal().json(JsonLibrary.Jackson, TokenResponse.class)
                .log(LoggingLevel.DEBUG, "Successfully processed token. Token response::${body}");

但是当我打印exchange对象时,它仍然包含没有任何过滤的所有头。我已经检查了所有的camel资源,但是找不到如何在dsl中应用defaultheaderfilters策略。

z2acfund

z2acfund1#

headerfilterstrategy“从通信中删除头,而不从交换中删除它们”。请查看此常见问题作为参考。
当我需要从exchange中删除标头时,我使用remove header或remove headers eip。
示例1:使用通配符删除所有jms头

from("direct:update-document")
  .removeHeaders("JMS*")
  .to("direct:store-test-result")

示例2:使用通配符删除所有jms头

from("direct:update-document")
  .removeHeaders("*")
  .to("direct:store-test-result")

相关问题