2014-02-07 22 views
0

我正在使用带有http4组件(2.12.2版本)的scala akka-camel。 我创建一个骆驼生产商,终点:驼峰Http4 2.12.2:“httpClientConfigurer”不能从端点推断URI3

def endpointUri = "https4://host-path" + 
    "?bridgeEndpoint=true" + 
    "&httpClientConfigurer=#configurer" + 
    "&clientConnectionManager=#manager" 

其中configurer是骆驼背景下的注册表(该原则同样适用于manager)注册的HttpClientConfigurer

当我发送CamelMessage到终点,我可以在阿卡记录此看到:

DEBUG o.a.c.component.http4.HttpComponent - Creating endpoint uri https4://host-path?bridgeEndpoint=true&httpClientConfigurer=#configurer&clientConnectionManager=#manager 
DEBUG o.a.camel.util.IntrospectionSupport - Configured property: clientConnectionManager on bean: Endpoint["https4://host-path?bridgeEndpoint=true&httpClientConfigurer=#configurer&clientConnectionManager=#manager"] with value: [email protected]f 
DEBUG o.a.camel.util.IntrospectionSupport - Configured property: bridgeEndpoint on bean: Endpoint["https4://host-path?bridgeEndpoint=true&httpClientConfigurer=#configurer&clientConnectionManager=#manager"] with value: true 
INFO o.a.c.component.http4.HttpComponent - Registering SSL scheme https on port 443 
INFO o.a.c.component.http4.HttpComponent - Registering SSL scheme https4 on port 443 

所以httpClientConfigurer未配置,我不知道为什么它忽略此参数。我一直在Apache Camel问题追踪器上寻找任何相关的问题,但我没有发现任何相似的问题。

有什么想法? 在此先感谢。

+0

我会在这个类中使用调试器:https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob;f=components/camel-http4/src/ main/java/org/apache/camel/component/http4/HttpEndpoint.java; h = 2ef06b8bc54ba9f88e86ea5e99391621af68f698; hb = HEAD,看看发生了什么。另外,如果你使用SSL,你不应该使用'https4'而不是'http4s'吗? – hveiga

+0

我会尝试调试该类下载源。关于'http4s',这只是一种印刷错误,对不起。 –

回答

1

最后,它解决了。我没有使用过​​或httpClientConfigurer。我使用SSLContextParams和一个名为TlsConfigurer的特性,这个特性与Producer混合使用。

我想用不同的X509证书,因此,骆驼提示:

重要:只有一个org.apache.camel.util.jsse.SSLContextParameters的实例每HttpComponent支持。如果您需要使用2个或更多不同的实例,则需要为每个需要的实例定义一个新的HttpComponent。

因此,TlsConfigurer configure方法必须能够从骆驼背景下得到了http4组件实例,然后应用SSLContextParams和添加修改实例作为一个新的组件,以骆驼背景。

这是它的外观:

import org.apache.camel.component.http4.HttpComponent 
import org.apache.camel.util.jsse._ 

trait TlsConfigurer { 
    self: {val camel: akka.camel.Camel} => 

    def configure(
     componentName: String, 
     keyStorePath:String, 
     trustStorePath:String, 
     password: String) { 

     val ksp = new KeyStoreParameters 
     ksp.setResource(keystorePath) 
     ksp.setPassword(password) 

     val kmp = new KeyManagersParameters 
     kmp.setKeyStore(ksp) 
     kmp.setKeyPassword(password) 

     val scp = new SSLContextParameters 
     scp.setKeyManagers(kmp) 

     val httpComponent = 
      camel.context.getComponent("http4",classOf[HttpComponent]) 
     httpComponent.setSslContextParameters(scp) 

     camel.context.addComponent(componentName, httpComponent) 

    } 

} 

这样我可以创建两个不同的端点:http-client1://...http-client2://...并在单独的方式管理他们的证书。

0

httpClientConfigurer未使用IntrospectionSupport设置为HttpEndpoint,因此您看不到调试日志。 我想我们要找出在客户配置器中添加一些日志时调用配置器。

+0

该日志记录问题可能是真实的,但事实是,我已经尝试使用'驼峰2.8.4'并且它可以很好地工作,但是对于最新版本,httpClientConfigurer似乎没有正确配置。我得到一个错误,说: 'sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书路径到请求的目标' –

+0

我们升级httpclient 4版本后驼-2.8.4。你可以仔细检查configurer代码是否可以与httpclient 4.2.5一起使用? –

+0

我降级了我的'httpclient'版本,从'4.3.2'到'4.2.5',但它仍然不起作用。但是,我没有得到同样的错误。现在我明白了:'[ERROR] [02/11/2014 09:36:59.395] [MyTestAkkaSystem-akka.actor.default-dispatcher-2] [akka:// MyTestAkkaSystem/user/$ a/$ a] Failure (akka.camel.AkkaCamelException:未通过身份验证的对象)(类akka.actor.Status $失败)' –