我已经创建了一个路由来转发REST调用,一切都很顺利,除了我不能修改响应的HTTP头(实际上我甚至不能在响应中原封不动地修改它们)。
// My processor
private void remplacerLiensDansHeader(final Exchange exchange, final String rootUrlPivotJoram, final String rootUrlRemplacement) {
// That is OK, I get the values just fine
ArrayList<String> oldLinks = exchange.getIn().getHeader(HEADER_LINK, ArrayList.class);
// This is also OK
final List<String> newLinks = anciensLiens.stream().map(lien -> lien.replace(rootUrlPivotJoram, rootUrlRemplacement)).collect(toList());
// No error, but apparently doesn't work
exchange.getMessage().setHeader(HEADER_LINK, newLinks);
exchange.getMessage().setHeader("test", "test");
}
// Route configuration
@Override
public void configure() throws Exception {
this.from(RestRouteBuilder.endPoint(createProducerJoramConfiguration))
.setExchangePattern(InOut)
.removeHeader(Exchange.HTTP_URI)
.toD(createProducerJoramConfiguration.getUrlDestination())
.setHeader("test", () -> "test") // that doesn't work either
.process(createProducerJoramConfiguration.getProcessor()); // this is the processor with the code above
}
这是我得到的响应(请注意,响应代码是200
,我认为这很奇怪,因为原始代码是201
)
第一个
我注意到两件事:
- 如果我在处理器中添加了一个主体,那么该主体就会出现在响应中,
- 如果我删除处理器,“原始响应”中的头也不存在。
2条答案
按热度按时间t30tvxxf1#
我不知道你到底失去了什么头文件,但要知道Camel HTTP component有一个默认的头文件过滤器(就像很多Camel组件一样)。
如果不指定自己的HeaderFilterStrategy,则使用默认的HttpHeaderFilterStrategy。
此默认值筛选以下标头:
使用此过滤器,Camel希望避免旧的HTTP标头仍然出现在传出的请求中(可能带有错误的数据)。
对Camel头的过滤只是为了删除与HTTP无关的Camel特定内容。
zpjtge222#
实际上,问题出在cxfrs组件。
我们设法在这里找到一个答案:请参阅:Response to REST client from Camel CXFRS route?
这是最终的解决方案。
感谢每一个寻找答案的人,我希望这能帮助到其他人。