【问题标题】:What approach for java web service to use?java web服务使用什么方法?
【发布时间】:2011-08-02 09:07:10
【问题描述】:

我正在开发一个具有多个框架(spring、hibernate、spring-security、ZK for GUI)的 Web 应用程序,并使用 Tomcat 作为应用服务器。我必须说我完全没有使用 Java Web 服务技术的经验。问题是,在不久的将来,我几乎肯定要为一些外部应用程序公开一些服务,我想知道该怎么做(考虑到我正在使用的框架)......

我看到并阅读了关于 Axis、Axis2、JAX-WS 的各种教程和一些问题 (link)...让我有点困惑的是我不知道 什么是常见的做法(如果有的话)将服务集成到现有的 Web 应用程序中(主要是在项目组织方面)。正如我现在所看到的,我需要实现的这些服务将部分依赖于现有的源代码,所以我不知道我是否应该使用完全独立的项目,或者我可以将它放在我现有的 web 应用程序文件夹中(我尝试使用 Axis2,但不知道这是否是一个好习惯)。

谢谢。

【问题讨论】:

    标签: java web-services spring tomcat


    【解决方案1】:

    如何组织项目?

    总的来说,我同意@ericacm 的观点,但您应该记住一件事...您说过您将在不久的将来开发许多服务。您可能会想在单独的服务器上托管服务,例如出于性能、可用​​性或可维护性的原因。这可能会影响您分离项目的决定。此外,分离“强制”松散耦合,但因此引入了其他挑战,例如跨多个 WAR 的会话共享。这是一个个案决定。

    如果我遇到你的情况,我首先会问自己服务在逻辑上是否属于 Web 应用程序。

    实施

    当涉及到 WS-* 实现时,您必须做出两个决定:

    1. 决定使用 API;今天,我看不出有任何理由不将 JAX-WS 与 JAXB 作为 API 一起使用,它们运行良好且已标准化。
    2. 决定一个框架;我曾使用过 Axis2 和 METRO(请记住 JSE 1.6+ 提供了基本的 JAX-WS 支持)。两者都运作良好。如果您使用 JAX-WS API,那么更改框架相当容易。

    【讨论】:

    • 感谢您的详细建议。我喜欢使用基于 JAX-WS API 的框架的想法,但我主要关心的是(除了将 Web 服务项目与现有的 Web 应用程序分开之外)如何最终将其与 Spring 集成。这就是我目前比其他框架更倾向于 Spring-WS(基于自上而下)的主要原因。我真的无法争论自上而下或自下而上的方法是否更好,因为我在这方面没有经验......这可能是一个愚蠢的问题,但是 Axis2 是否基于 JAX-WS API?
    • 1) Axis2 支持 JAX-WS。 2) 您也可以使用 JAX-WS 实现自上而下。在jdk/bin 中,您可以找到一个名为xjc 的可执行文件,它可以根据给定的WSDL 创建Java 绑定。抱歉,我没有使用 Spring-WS 的经验,所以我不知道它是否集成(我很确定它以某种方式集成)...
    【解决方案2】:

    我对 Spring-WS 2+ 和手动 Castor 映射有很好的经验。是简单但强大的组合。

    Spring-ws 2:

    • 提供合同优先开发(特别适用于具有大量服务的 Web 应用程序)。
    • 提供WS注解
    • 支持 XML 映射(Castor、JaxB 等)

    脚轮:

    • 基于xml配置的映射
    • 允许将多条消息(请求/响应)映射到一个 java 对象(基于 xml 配置)

    如果您使用一些 Java EE 6 服务器,还可以考虑使用 JAXB 进行手动映射:

    • 基于注解的映射
    • 应该比 Castor 快
    • 允许将多条消息(请求/响应)映射到一个 java 对象(当您使用 java 继承时)

    【讨论】:

    • 是的,我听说 Spring WS 是众多可能性之一,考虑到我正在使用 Spring 框架,我肯定会仔细研究它。感谢您的建议。
    【解决方案3】:

    您可以继续将它们放入同一个项目中。每个 Web 服务都将是一个附加的接口和实现类以及一些配置。

    由于您使用的是 Spring,CXF 是 JAX-WS 的一个不错的选择,因为它与 Spring 很好地集成。请参阅this page 作为入门。

    【讨论】:

      【解决方案4】:

      Spring-WS 是用于简单 Web 服务的复杂框架。如果您想完全了解 Web 服务并了解 Web 服务的具体细节,请学习 Spring-WS。它非常灵活,提供了很多选择。

      否则,如果您想要更简单的替代方案,请使用 JAX-WS。 Spring 支持 JAX-WS 注释。请参阅第 17.5.7 节。使用 JAX-WS RI 的 Spring 支持导出 Web 服务。

      http://static.springsource.org/spring/docs/2.5.x/reference/remoting.html

      【讨论】:

        【解决方案5】:

        是否可以通过 JAX-WS 手动(不使用生成器)创建 WS 服务器和 WS 客户端?特别是,如果您正在开发一个想要重用对象的大型应用程序,但生成器正在生成许多类,这些类可能 99% 相同(例如,如果您的应用程序是 WS 客户端,并且您必须连接到设计不佳的外部 WS服务器)。是否有一些教程如何手动创建 ws?

        我不喜欢生成器的原因有很多,完全同意http://ogrigas.eu/spring/2010/04/spring-ws-and-jaxb-without-a-code-generator

        【讨论】:

          猜你喜欢
          • 2010-11-17
          • 2010-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-18
          • 2012-03-11
          相关资源
          最近更新 更多