java - 在调用外部 API 之前过滤 Camel 标头
问题描述
我已经像这样定义了 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}");
但是当我打印交换对象时,它仍然包含所有标题而没有任何过滤。我检查了所有骆驼资源,但找不到如何在 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")
推荐阅读
- c# - 为什么我的项目使用 dotnet 编译器构建,而不是 docker-compose?
- python - 用pyinstaller制作的exe不起作用
- java - 通过单击 JButton 创建 JButton
- vim - 对于某些文件,vim 一直以 vimdiff 模式启动
- google-cloud-platform - 如何通过适用于 Google Ads 的 BigQuery 数据传输服务解决从 Google Ads 到 Google Bigquery 的转换中的数据差异
- javascript - 如何在chrome自定义选项卡中使用js桥
- google-apps-script - 每日 URLFetch 配额和“一天内调用的服务次数过多:urlfetch”错误
- powershell - 如何将批处理文件变量传递给 PowerShell 脚本?
- authentication - 如何在自定义 `AuthenticationHandler` 中的 `HandleAuthenticateAsync` 和 `HandleChallengeAsync` 之间传递对象?
- android - 如何修复appcompat gradle错误?安卓 3.4