Как использовать Scalaxb Async Client - PullRequest
0 голосов
/ 04 июля 2019

В моем текущем проекте мне нужно реализовать клиент для вызова службы SOAP.Я решил использовать ScalaXB для генерации клиента и его модели из файлов WSDL.Мне удалось скомпилировать проект и сгенерировать модель, но я застрял в выполнении HTTP-вызовов.

Это моя черта DispatchHttpClientsAsync, и вопрос в том, как я могу сделать вызов Http?

trait DispatchHttpClientsAsync extends HttpClientsAsync {
  lazy val httpClient = new DispatchHttpClient {}
  // https://github.com/AsyncHttpClient/async-http-client/blob/1.9.x/src/main/java/com/ning/http/client/AsyncHttpClientConfigDefaults.java
  def requestTimeout: Duration = 60.seconds
  def connectionTimeout: Duration = 5.seconds

  trait DispatchHttpClient extends HttpClient {
    import dispatch._

    // Keep it lazy. See https://github.com/eed3si9n/scalaxb/pull/279
    lazy val http = Http.configure(_.
      setRequestTimeout(requestTimeout.toMillis.toInt).
      setConnectTimeout(connectionTimeout.toMillis.toInt))

    def request(in: String, address: java.net.URI, headers: Map[String, String])(implicit ec: ExecutionContext): Future[String] = {
      val req = url(address.toString).setBodyEncoding("UTF-8") <:< headers << in
      http(req > as.String)
    }
  }
}

1 Ответ

0 голосов
/ 04 июля 2019

DispatchHttpClientsAsync это просто черта под капотом.Реальная реализация клиента, которую вы можете вызвать, генерируется в другом месте.Я не знаю названия вашей службы SOAP и ее операций, но посмотрите на пример WSDL http://scalaxb.org/wsdl-support:

. Это должно сгенерировать следующие 9 файлов:

  • scalaxb / httpclients_async.scala
  • scalaxb / httpclients_dispatch_async.scala
  • scalaxb / scalaxb.scala
  • scalaxb / soap12_async.scala
  • soapenvelope12 / soapenvelope.1017 *
  • soapenvelope12 / soapenvelope12_xmlprotocol.scala
  • stockquote / stockquote.scala
  • stockquote / stockquote_type1.scala
  • stockquote / xmlprotocol.scala

Посмотрите на stockquote / folder, там должна быть характеристика и метод для вашей службы SOAP.В примере вы должны расширить черту StockQuoteSoap12Binding - есть реализация требуемого метода.

...