簡體   English   中英

在調用外部 API 之前過濾 Camel Headers

[英]Filter Camel Headers before calling external API

我已經像這樣定義了 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}");

但是當我打印交換 object 時,它仍然包含所有標題,沒有任何過濾。 我檢查了所有駱駝資源,但找不到如何在 dsl 中應用 defaultheaderfilterstrategy。

HeaderFilterStrategy “從通信中刪除標頭,而不是從 Exchange 中刪除它們”。 檢查此常見問題解答作為參考。

當我需要從交換中刪除標頭時,我使用Remove HeaderRemove 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") 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM