Scala中的SOAP代理 - 我需要什么?

时间:2010-09-06 09:44:47

标签: java xml http scala soap

我正在尝试在Scala中编写一个程序,它将接受SOAP请求,从真实服务器获取响应(或从本地光盘读取)并将数据返回给原始客户端。

我是java / scala生态系统的新手,所以我不知道选择哪些库。 我听说Scala的XML处理非常好,所以我不知道,我是否应该使用一些企业级的肥皂库/框架,如jax-ws,jboss-ws,axis,cxf,xmlbeans等。

基本上,我只需要

  • 一个接受请求的库(目前,我正在查看jetty,但我更喜欢原生支持actor的东西。scala-http似乎涵盖了这一点,但不是生产已经或维持过的事情)
  • 一些库来请求来自其他服务器的数据(类似curl,libwww-perl for java / scala)
  • 构建系统(ant?sbt?)
  • 一个IDE(我习惯了eclipse,但IntelliJ的scala支持应该更好)
  • 一个测试它的工具(目前,我正在使用SoapUI

3 个答案:

答案 0 :(得分:14)

SOAP确实是一个可怕的规范,具有很多不寻常的边缘行为的可能性。虽然Scala中的XML支持可以帮助您从头开始编写这样的库,但它仍然是一项重大工作(取决于您需要多少规范)。

同样,Jetty背后有多年的发展;处理性能需求和您可能未考虑的其他意外行为......即使是Scala最着名的Web框架Lift,由于这些原因在Java Web服务器上运行。它仍然非常适合演员。

所以,在这个时刻,你几乎肯定会更好地使用经过试验和测试的Java Web服务器和现成的Java SOAP库解决方案。为这些东西添加一个瘦Scala包装器的努力远远少于从头开始构建这些东西的努力。

对于构建系统,sbt是目前Scala最强大的工具,但如果需要通过所选的SOAP库生成代码,则可能需要回退到Maven。

最后,选择编辑器。如果您对使用Emacs感到满意,那么Ensime插件只是惊人的。如果您更喜欢传统的Java IDE,那么IntelliJ目前似乎是最稳定的选择,但要注意这可能会很快发生变化。

答案 1 :(得分:2)

只是部分答案。

看看:

  • HttpClient用于发出HTTP请求
  • 构建系统,如果您之前没有ant经验,我会建议sbt
  • 对于IDE,几个月前我在IntelliJ上取得了很大的成功。我相信Eclipse有所改进,但我不知道有多少。
  • SoapUI仍然可以完美运行

答案 2 :(得分:2)

代理服务器是异步/非阻塞IO的经典用例。如果我正在开始这个项目,我首先要仔细看看Netty's HTTP support并在移动之前构建一个简单的反向代理(即将前端请求转发给后端服务器,并将后端响应转发给前端客户端)协议翻译。

当谈到协议转换的时候,你会招致XML解析器的愤怒。不幸的是,据我所知,没有一个好的,高性能,低占用空间的解析器本身处理异步IO;其中相当一部分可能存在,但已嵌入商业产品中。有关详细信息,请参阅this thread

但是,您可以通过使用SAX解析器(通常依赖于阻止IO)来消耗“push-me-pull-you”管道的输出,从而以牺牲额外的线程使用为代价来“欺骗”。由于服务器的HTTP部分是非阻塞的,因此您可能只需要使用几十个线程来铲除字节。

碰巧,我been there, and done that。 :)