【问题标题】:Is it possible to develop a web service application without a web service framework like Axis/CXF?是否可以在没有 Axis/CXF 之类的 Web 服务框架的情况下开发 Web 服务应用程序?
【发布时间】:2016-05-08 11:08:39
【问题描述】:

我觉得这个问题有点天真,但我正在努力更好地了解 Web 服务框架。

您是否绝对需要 Jax-WS/RS 参考实现(如 Axis/CXF)才能在 Tomcat 等服务器上运行 Web 服务应用程序?如果您不需要诸如 wsdl2java 自动生成之类的东西,是否可以使用您自己的导入集合(Spring 框架库、Java EE 库、JAXB 等)?

Axis/Axis2/CXF 是任何 Web 服务项目的重要组成部分,还是只是一个不错的选择?

我过去曾使用过 CXF 和 Axis,但两者都深埋在 Spring 和我的 IDE 之下,以至于我无法清楚地了解 Web 服务框架的结束位置和 Spring 框架/依赖项的开始位置。

关于 Web 服务框架的文档也没有告诉我太多信息,因为它侧重于框架可以做什么,以及没有它们你可能如何度过难关。

谢谢

【问题讨论】:

  • 当然,任何事情都是可能的。如果您解释一下“Web 服务”的确切含义,将会很有帮助,因为自“WS”时代以来,典型的用例已经发生了显着变化。
  • 类似的问题在这里,大部分仍然适用:stackoverflow.com/questions/1505393/…

标签: java web-services cxf axis


【解决方案1】:

如果您想在 Tomcat 上部署 Web 应用程序,那么您需要做的最起码就是实现 javax.servlet.Servlet 接口。

如果您所说的 Web 服务是指 SOAP 服务,那么您还需要做更多事情(嗯,具体来说,您需要实现一个以某种方式运行的 Servlet)。 CXF/Axis 等框架提供了两个主要功能(以及无数较小的功能):

  1. 序列化/反序列化

裸 HTTP 请求以字节流 (InputStream/OutputStream) 的形式提供。在许多应用程序中,您会希望将这些字节流转换为 Java 对象。对于 JAX-WS,这是通过要求输入/输出是 XML 并使用 JAX-B 来完成的。其他框架(例如 JAX-RS)可以使用其他输入/输出格式(例如 JSON)。

  1. 路由

HTTP 请求由 URL(可能带有查询参数)、标头、实体主体和围绕调用本身的各种元数据(例如 IP 地址、会话对象等)组成。不知何故,这个请求必须通过参数映射到服务中的方法调用中。在 JAX-WS 中,这是通过将 SOAP 信封的一部分与从反射中收集到的有关服务端点的信息进行映射来完成的。

那么...

如果您想跳过使用 Axis/Axis2/CXF,您需要找到一些方法来自己实现这两个功能。您几乎肯定也会对解决这些问题所涉及的微小细节感到惊讶(例如 SOAP RPC/编码消息格式与文档/文字格式等)

CXF 还将实现许多 SOAP 扩展,其中最突出的是 ws-security(尽管许多人最终使用 Spring 安全性并绕过正式的 SOAP 安全性)。

替代品

您的问题有点含糊,所以我不确定您在追求什么,但有一些替代方案。仅使用 Axis/CXF...

  1. 不同的 JAX-WS 库

还有其他的 JAX-WS 提供程序。例如,您可以使用the JAX-WS RI,尽管您的体验可能与 CXF/Axis 没有太大不同。

  1. 不同的网络服务技术

您可以使用像 JAX-RS 这样的 RESTful 框架,而不是使用 SOAP。如果您想更多地了解 HTTP 和您的调用之间的连接,这将特别有用。有无数文章讨论了 SOAP 与 REST 的优缺点,所以我不会在这里讨论。一般来说,JAX-RS 更加清晰和可定制,但需要更多的工作来配置。

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多