【问题标题】:Implement a SOAP webservice in scala在 Scala 中实现一个 SOAP 网络服务
【发布时间】:2013-01-11 13:43:40
【问题描述】:

在 Scala 中实现 SOAP Web 服务的最佳库/框架是什么?

使用 scalaxb 实现 SOAP 网络服务的示例?

请不要使用诸如 Lift 之类的重型框架。

【问题讨论】:

  • 为什么不使用 JAX-WS?唯一真正的缺点是您的服务必须处理 Java 类型,例如Scala 集合处理得不好。不成熟的重新实现没有很多 SOAP 不常用的功能,用处不大。
  • 因为 JAXB 很烂,而且 Scala 有一个更好的数据绑定解决方案 scalaxb。也许可以将 JAX-WS 与 scalaxb 绑定一起使用,但我不知道该怎么做。

标签: scala scalaxb


【解决方案1】:

我想目前没有这样的图书馆,也许永远不会,无论如何,情况并没有看起来那么糟糕。您可以在现有 Java SOAP 库之上创建一个 Scala 包装器。 在这里查看更多信息SOAP-proxy in Scala - what do I need?,对于初学者来说:http://java.dzone.com/articles/basic-ws-scala-sbt-and-jee-6

【讨论】:

    【解决方案2】:

    我遇到了这个非常老的问题,我不确定发布时情况是否有所不同,但这里有一个使用 jax-ws 的示例,来自 https://redsigil.weebly.com/home/a-scala-soap-web-service

    @WebService(
      targetNamespace = "http://com.redsigil/soapserver",
      name = "com.redsigil.soapserver",
      portName = "soap",
      serviceName = "SoapServerSample")
    @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
    @Addressing(enabled = true, required = false)
    class SoapServerImpl() {
      @WebMethod(action = "hashing")
      def test(@WebParam(name = "mystr", mode = WebParam.Mode.IN) value: String): String = sha256Hash(value)
    
      def sha256Hash(text: String): String =
        String.format("%064x",
          new java.math.BigInteger(1, java.security.MessageDigest.getInstance("SHA-256").digest(text.getBytes("UTF-8"))))
    }
    

    如您所见,它相当简单,尽管注释使它有点难看。该服务定义了一个 SOAP 方法(“test”),它接受一个字符串并返回其哈希值。主函数如下所示:

    val myservice: SoapServerImpl = new SoapServerImpl()
    val ep:Endpoint = Endpoint.publish("http://localhost:8080/test", myservice)
    

    是的,我知道 OP 表示他不喜欢使用 jax-ws——在评论中有点咆哮,但考虑到这不是通过适当的设计和抽象无法解决的问题。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多