2010-09-06 20 views
8

我想在Scala中编写一个程序,它将接受SOAP请求,从真实服务器获取响应(或从本地光盘读取响应)并将数据返回到原始客户端。Scala中的SOAP代理 - 我需要什么?

我是新来的java/scala生态系统,所以我不知道要选什么库。 我听说Scala的XML处理是相当不错的,所以我不知道我是否应该使用一些像jax-ws,jboss-ws,axis,cxf,xmlbeans等的soap-library/framework。

基本上,我只需要

  • 图书馆,接受请求(目前,我正在看jetty,但我更喜欢的东西,本身支持的演员。scala-http似乎覆盖,而不是生产 - 已经或维持,就此而言)
  • 某些库向其他服务器请求数据(类似curl,libwww-perl for java/scala)
  • 构建系统(ant? SBT?)
  • 的IDE(我习惯偏食,但的IntelliJ的斯卡拉支持应该是更好)
  • )来测试它(目前,我使用SoapUI

回答

14

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

同样,Jetty也有多年的发展;处理性能需求以及您可能尚未考虑过的其他意想不到的行为......即使是Scala最知名的Web框架Lift,也是出于这些原因运行在Java Web服务器之上。它仍然非常高兴地与演员合作。

所以,在这个时候,你几乎肯定会用一个久经考验的解决方案,使用Java web服务器和现成的Java SOAP库。在这些环境中添加一个瘦Scala包装的努力将远远低于从头开始构建这些东西的努力。

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

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

2

只是一个工具部分答案。

看:

  • HttpClient用于HTTP请求
  • 编译系统,如果你有ant没有现成的经验,我会建议sbt
  • 对于IDE,我有很好的成功与的IntelliJ一个几个月前。我相信Eclipse有所改进,但我不知道有多少。
  • 了SoapUI仍然会很好地工作
2

代理服务器是异步/非阻塞IO的典型用例。如果我正在着手这个项目,那么我首先看一下Netty's HTTP support,然后在开始协议转换之前首先构建一个简单的反向代理(即向前端服务器转发前端请求,向前端客户端转发后端响应) 。

当谈到协议翻译的时候,你会招致XML解析器的愤怒。不幸的是,据我所知,没有一个好的,高性能的,占用空间小的解析器,它本地处理异步IO;其中不少可能存在但嵌入在商业产品中。有关更多信息,请参见this thread

但是,通过使用通常依赖于阻止IO的SAX解析器来消耗“推我拉你”管道的输出,您可以以附加线程使用为代价“作弊”。由于服务器的HTTP部分是非阻塞的,因此您可能只能使用几十个线程来铲取字节。我们有been there, and done that。 :)

相关问题