2013-06-13 3 views
1

У меня есть игра с Apache Camel, и у меня есть несколько проблем, переход от стадии «тривиальных примеров» к стадии «но с этими раздражающими деталями». Принципиально важно, как входить и изменять конечные точки явно.Apache camel: установить файлы cookie для клиента http4

В этом случае мне нужно установить файл cookie для http-клиента. У меня есть объект хранилища файлов cookie, но не знаю, как заставить клиента использовать его. Я пробовал использовать HttpClientConfigurer, но HttpClient не раскрывает хранилище файлов cookie, и, похоже, он все равно не называется.

Мой текущий код:

class CookieClientConfigurer(cs: CookieStore) extends HttpClientConfigurer { 
    /** 
    * Not very nice, relying on a runtime type check. But what can you do? 
    */ 
    def configureHttpClient(client: HttpClient) { 
    client match { 
     case client: AbstractHttpClient => client.setCookieStore(cs) 
    } 
    } 
} 

И вызывается:

val username = args(0) 
val password = args(1) 

val context = new DefaultCamelContext 

locally { 
    // First we need to grab some authentication cookie stuff! 
    val httpClient = new DefaultHttpClient 
    val post = new HttpPost("https://rt") 
    val nvps = List(new BasicNameValuePair("username", username), new BasicNameValuePair("password", password)) 
    post.setEntity(new UrlEncodedFormEntity(asJavaList(nvps))) 
    httpClient.execute(post) 
    val ccc = new CookieClientConfigurer(httpClient.getCookieStore()) 
    val httpComp = context.getComponent("https4", classOf[HttpComponent]) 
    httpComp.setHttpClientConfigurer(ccc) 
} 

val routes = new RouteBuilder { 
    def configure() = { 
    from("timer://foo?fixedRate=true&delay=0&period=10000") 
    .to("https4://rt/REST/1.0/ticket/335729/show") 
    .to("file://test") 

    } 
} 
context.addRoutes(routes) 
context.start() 
System.in.read() 
context.stop() 

Любая идея, как я установил в магазине печенья для "https4://rt/REST/1.0/ticket/335729/show" конечной точки?

ответ

0

Таким образом, при дальнейших исследованиях вышеупомянутый подход работает (он терпел неудачу в другом месте), хотя я все еще недовольны использованием проверки типа времени выполнения, чтобы выявить реализацию HttpClient, поэтому ответы о том, как сделать это лучше, добро пожаловать!

+0

Имея аналогичную проблему здесь, пока нет решения, но документы для http4 утверждают, что вы должны просто добавить app cookieStore = customInstance в URI – kaqqao

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