我正在尝试在Scala中编写一个程序,它将接受SOAP请求,从真实服务器获取响应(或从本地光盘读取)并将数据返回给原始客户端。
我是java / scala生态系统的新手,所以我不知道选择哪些库。 我听说Scala的XML处理非常好,所以我不知道,我是否应该使用一些企业级的肥皂库/框架,如jax-ws,jboss-ws,axis,cxf,xmlbeans等。
基本上,我只需要
答案 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)
只是部分答案。
看看:
ant
经验,我会建议sbt
答案 2 :(得分:2)
代理服务器是异步/非阻塞IO的经典用例。如果我正在开始这个项目,我首先要仔细看看Netty's HTTP support并在移动之前构建一个简单的反向代理(即将前端请求转发给后端服务器,并将后端响应转发给前端客户端)协议翻译。
当谈到协议转换的时候,你会招致XML解析器的愤怒。不幸的是,据我所知,没有一个好的,高性能,低占用空间的解析器本身处理异步IO;其中相当一部分可能存在,但已嵌入商业产品中。有关详细信息,请参阅this thread。
但是,您可以通过使用SAX解析器(通常依赖于阻止IO)来消耗“push-me-pull-you”管道的输出,从而以牺牲额外的线程使用为代价来“欺骗”。由于服务器的HTTP部分是非阻塞的,因此您可能只需要使用几十个线程来铲除字节。
碰巧,我been there, and done that。 :)