Web服务客户端/消费者 - 浏览器或Webstart / JNLP或Swing

时间:2012-04-19 14:57:31

标签: java web-services spring security soap

我有一个网络服务,可以做很多事情。它可以做的一个简单例子(注意例子):

  • 退货产品清单
  • 更新产品价格
  • 添加新产品
  • 更新现有产品
  • 退货价格
  • 退回产品手册+图片
  • 添加产品手册+图片

前5个服务非常简单,因为请求被发送到SOAP Web服务,它将返回一个列表,或者它将更新数据库中的现有行或创建一个新行。

最后两个有点棘手,因为它们涉及将二进制文件发送到服务并从服务中接收二进制文件。

在服务器端实现SOAP服务没有问题。我已经有了一个框架,我现在只需要实现这些服务。我遇到的问题是如何实现将使用这些服务的客户端。

我一直在阅读有关SOAP客户端的信息,并知道我可以将文件作为SOAP附件发送,但我不太明白如何将其转换为HTTP请求。

问题:

  • 我希望客户端成为一个门户网站,但我不确定如何从Web浏览器调用Web服务。这可能吗?
  • 如何通过浏览器调用Web服务?这是普通的HTTP呼叫吗?
  • 最重要的是,如何上传/下载二进制文件?
  • 在保护请求方面,哪个更安全?基于Web门户的客户端还是基于胖客户端的客户端?
  • 使用Java Web Start / JNLP代替Web门户或胖客户端是否有任何优势?
  • 是否可以在Web门户和Web start之间进行混合和匹配以进行二进制数据传输?
  • 通常的做法是从门户网站(即从网络浏览器)调用Web服务吗?

我认为另一种选择是将客户端实现为胖客户端(桌面应用程序)。这个问题是我在基于GUI Swing的应用程序方面有0经验。

该解决方案的一个重要方面是它必须是安全的,因此无论使用哪种方法都需要使用证书进行保护。大多数服务将使用Spring技术实现。我使用Spring-WS作为Web服务,如果它可以作为Web门户使用,可能会使用Spring-MVC。

Web服务和Web应用程序都将在同一个应用程序服务器中运行。

1 个答案:

答案 0 :(得分:2)

  

“我希望客户端成为一个门户网站,但我不太确定如何通过网络浏览器调用Web服务。这可能吗?”

好吧,如果您的ws支持HTTP(见下文),理论上您可以从浏览器向服务发送请求,但是它如何处理服务方法返回的非原始类型?也许你应该看一下RESTfull服务。

  

“如何通过浏览器调用Web服务?这是正常的HTTP调用吗?”

这取决于您使用的Web服务实现。几个网络服务,即Hessian&粗麻布或Spring HttpInvoker,支持http传输有些可能不会。一个调用将是一个普通的http url,有额外的参数和附件(我猜http的post方法是访问http web服务的常用方法)。

  

“最重要的是,如何上传/下载二进制文件?”

这也取决于。我最近尝试使用Hessian上传文件,但是当文件大小达到一定限度(约30MB左右)时失败了。论坛条目告诉我这是由Hessians序列化策略引起的,但我没有找到解决方案。检查您的ws是否支持MTOM,就像CXF一样,这使我的上传工作正常。还有一个在cxf主页上传图像的例子。

  

“在保护请求方面,哪个更安全?基于Web门户的客户端还是基于胖客户端的客户端?”

两种客户端类型都是从服务器发送/接收数据,因此必须保护连接。使用胖客户端(在安全令牌和信任策略旁边),您可能还需要自定义登录功能来验证您的客户。所以最终它正确使用了重要的技术,因为你知道一个标准的http登录,如果它实现得很糟糕也可能非常不安全。

  

“使用Java Web Start / JNLP代替Web门户或胖客户端有什么优势吗?”

使用WebStart,您无论如何都需要构建自定义客户端和至少一个页面或servlet。这是一种自动下载/安装/升级自定义客户端的技术。

  

“是否可以在Web门户和Web启动之间进行混合和匹配以进行二进制数据传输?”

当然可以。如果您使用的是Spring,那么很容易让您的客户访问相同的功能。只需将您的普通逻辑添加到服务外观(@Service)即可。然后使用MVC控制器(@Controller)添加浏览器支持,并使用ServiceExporter支持ws。

  

“从门户网站(即从网络浏览器)调用网络服务是否常见?”

不要猜,请参阅REST服务及以上。

  

“......问题在于我在基于GUI Swing的应用程序方面有0经验。”

这可能是个问题,但可以使用NetBeans的图形编辑器轻松构建Swing应用程序。

  

“......无论使用哪种方法都需要使用证书进行保护。大部分服务都将使用Spring技术实现。”

为此,请查看Spring Security。这很好地满足了您的许多需求。

希望我能提供帮助。