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