2014-02-07 6 views
0

Я использую scala akka-camel с компонентом http4 (версия 2.12.2). Я создаю производитель Camel с конечной точкой:Camel Http4 2.12.2: «httpClientConfigurer» не может быть выведен из endpointUri

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

где configurerHttpClientConfigurer является зарегистрированным в Camel контексте реестре (тот же принцип применит и к manager).

Когда я посылаю CamelMessage к этой конечной точке я могу увидеть в AKKA бревен этого:

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

И наконец, это разрешено. Я не использовал ни одного из clientConnectionManager или httpClientConfigurer. Я использовал SSLContextParams и признак TlsConfigurer, который должен быть смешанным с Продюсером.

Я хочу использовать различные сертификаты 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 не установлен в HttpEndpoint с помощью IntrospectionSupport, поэтому вы не видите журнал отладки. Я думаю, что мы собираемся узнать, как настраивается сценарий, когда вы добавляете некоторый журнал в конфигуратор клиента.

+0

Эта проблема с протоколированием может быть правдой, но дело в том, что я пытался использовать «camel 2.8.4», и он отлично работает, но с последней версией httpClientConfigurer, похоже, не настроен должным образом. Я получил сообщение об ошибке: 'sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели. –

+0

Мы обновляем версию httpclient 4 после верблюда-2.8.4.Можете ли вы проверить, может ли код конфигурации работать с httpclient 4.2.5? –

+0

Я понизил мою версию «httpclient'version, как вы упомянули, от« 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] Ошибка (akka.camel.AkkaCamelException: peer не аутентифицирован) (класса akka.actor.Status $ Failure) ' –

Смежные вопросы