【问题标题】:How to use Scalaxb Async Client如何使用 Scalaxb 异步客户端
【发布时间】:2019-07-04 07:27:47
【问题描述】:

在我当前的项目中,我必须实现一个客户端来调用 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)
    }
  }
}

【问题讨论】:

    标签: xml scala soap scalaxb sbt-scalaxb


    【解决方案1】:

    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/soapenvelope12.scala
    • soapenvelope12/soapenvelope12_xmlprotocol.scala
    • stockquote/stockquote.scala
    • stockquote/stockquote_type1.scala
    • stockquote/xmlprotocol.scala

    查看 stockquote/ 文件夹,您的 SOAP 服务应该有一个特征和方法。在示例中,您应该扩展 trait StockQuoteSoap12Binding - 有一个所需方法的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 2017-12-15
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多