1

私はApache Camelをいじっており、「些細な例」の段階から「しかし、これらの苛立たしい詳細」の段階に移行する際にいくつかの問題があります。重要なのは、エンドポイントにアクセスして明示的に変更する方法です。

この場合、http クライアントの認証 Cookie を設定する必要があります。Cookie ストア オブジェクトがありますが、クライアントに強制的に使用させる方法がわかりません。を使用してみましたHttpClientConfigurerHttpClient、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"エンドポイントの Cookie ストアを設定する方法を教えてください。

4

1 に答える 1

0

したがって、さらに調査すると、上記のアプローチは機能します (他の場所では失敗していました) が、実行時の型チェックを使用して の実装を公開することにまだ不満があるHttpClientため、これをより適切に行う方法についての回答は大歓迎です!

于 2013-06-13T14:09:34.213 に答える