我有一个使用 Camel 并在 ServiceMix 服务器上运行的项目,但我似乎无法让它访问外部 Web 服务,我怀疑这是因为我无法正确设置代理身份验证。
Exchange exchange = producerTemplate.request(url, new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
}
});
response = exchange.getOut().getBody(String.class);
如果我在最后一行设置断点,我会在交换对象中看到 ConnectionTimedOutException 并且响应为空。
我尝试以多种方式设置代理。
1)我尝试在实现CamelContextAware的类中设置代理设置:
camelContext.getProperties().put("http.proxyHost", "...");
camelContext.getProperties().put("http.proxyPort", "8080");
camelContext.getProperties().put("http.proxyUser", "...");
camelContext.getProperties().put("http.proxyPassword", "...");
camelContext.getProperties().put("http.proxySet", "true");
这在独立模式下工作,但是当我在 ServiceMix 中部署代码时,camelContext 对象为空。
2)我尝试在ServiceMix的etc/system.properties文件中设置代理设置。
3)我尝试在camel-context.xml中使用 http-conf:conduit,如下所示:
<http-conf:conduit name="*.http-conduit">
<http-conf:client ProxyServer="..." ProxyServerPort="8080" />
<http-conf:proxyAuthorization>
<conf-sec:UserName>...</conf-sec:UserName>
<conf-sec:Password>...</conf-sec:Password>
</http-conf:proxyAuthorization>
</http-conf:conduit>
但是,我认为这只有在我使用 cxf 客户端时才有效。
没有任何效果,我需要它在部署在 ServiceMix 上时工作。任何帮助将不胜感激。
谢谢。