再论“我应该采用哪一种 WSDL 样式?”

IBM的developerworks社区上有一篇质量很高的文章:我应该采用哪一种 WSDL 样式(http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/)。文中列举了四种style/use模型:

  1. rpc/encoded
  2. rpc/literal
  3. document/encoded
  4. document/literal

不少人将这篇文章盲目转载,却忘了看看这篇文章的发表日期“2003 年 11 月 01 日”。在互联网行业,2003-2011长达的八年意味着什么,想必大家都能理解。

我曾经找到一篇2004年的文章说:“Document/literal and RPC/literal will be the only allowed style/use combinations in the future.”,而现在正是这样一个情况。即使某个wsdl中是用的rpc/encoded,在我的myeclipse 8.5想通过这个wsdl生成service端代码的话,也是直接报错说literal是必须的。需要强行ignore那条错误才能继续执行。你如果看看ignore之后跑出来的那个webservice的wsdl,会发现soap:body use已经被强行改为了literal.

developerworks社区上另一篇文章(2007年的,虽然也是比较老的文章了,但还是很有必要去看看):Web服务提示与技巧:JAX-RPC与JAX-WS 的比较(http://www.ibm.com/developerworks/cn/webservices/ws-tip-jaxwsrpc.html)对于使用JAX-RPC1.1还是JAX-WS 2.0 作了更为详尽的解释。

希望继续使用 JAX-RPC 1.1 的原因:

  • 如果您希望继续使用现有的东西,JAX-RPC 将在今后一段时间内继续得到支持。
  • 如果您不希望升级到 Java 5。
  • 如果您希望发送采用 SOAP 编码的消息或创建 RPC/encoded 样式的 WSDL。

升级到 JAX-WS 2.0 的原因:

  • 如果您希望使用新的面向消息的 API。
  • 如果您希望使用 MTOM 发送附件数据。
  • 如果您希望通过 JAXB 更好地支持 XML 模式。
  • 如果您希望在 Web 服务客户机中采用异步编程模型。
  • 如果您需要使用能够处理 SOAP 1.2 消息的客户机或服务。
  • 如果您希望在 Web 服务中消除对 SOAP 的需求,而直接使用 XML/HTTP 绑定。
  • 如果您喜欢使用领先的尖端技术。

所以,简单来说我的建议是,如果你不想让你的webservice给别人造成太多困扰,不要多想,直接上document/literal吧。(除非原有系统用的是rpc/encoded)

发表评论

电子邮件地址不会被公开。 必填项已用*标注