【问题标题】:Java Web Services - Is Axis Necessary?Java Web 服务 - 是否需要 Axis?
【发布时间】:2009-10-01 17:41:07
【问题描述】:

Java Web 服务需要AXISCXF 吗?可以全部通过JDK(1.6)完成吗?

【问题讨论】:

  • 你说的是调用还是提供网络服务?

标签: java web-services axis2 axis cxf


【解决方案1】:

Java Web 服务是否需要 AXIS 或 CXF?

没有。尽管Axis2 是最流行的使用Web 服务的框架,但这并不是唯一的方法。

这一切都可以通过 JDK (1.6) 来完成吗?

是的,但要困难得多。您将从使用其他应用程序使用的框架以及开发团队提供的错误修复中受益匪浅。全部手工完成就像重新发明轮子。

如果您想完全控制下面发生的事情,您可以选择:JAX-WS

或者如果应用很简单,直接用socket。

但同样,Axis2 是执行 WS 的规范方式(但不是唯一的方式)

【讨论】:

  • 只是猜测,但他可能想要更多细节。
  • @William:编辑添加更多细节。我认为无论最后添加什么,答案都是一样的。轴是必要的吗?不,可以用JDK吗?是的,但要困难得多。 :)
【解决方案2】:

以下内容基于真实的个人故事:

因此,您想在 Java Web 应用程序中使用 Web 服务,并且不想将 10MiB 的 JAR 添加到精简的 1.3 MiB .war 文件中,此外您还擅长解析 XML(您可以手动编写代码) XPath 查询和 XSLT 文件),您完全了解 HTTP,并且您与之交互的客户端有很好的文档。您下载 WSDL 查看您的端点和方法,然后开始创建一个映射到您将需要的特性的 Java 类。你已经感觉很好了。

您开始阅读有关如何发送 SOAP 请求的内容,您认为这看起来有点冗长,但他们只是一个字符串,因此您开始构建一个实用程序,该实用程序获取您的 Java 请求对象并将其转换为一个 SOAP 请求。您将明确的 SOAP 请求发送到服务器,但被拒绝 (missing a signature)。

现在您开始将加密 JAR 添加到您的项目中,并开始研究如何计算部分 XML 文档的签名并将其和文档都包含在请求中。这需要你一段时间,但通过足够的黑客攻击,你会收到一条可以发送到你的肥皂服务的消息,你现在正在处理SOAP response。现在你感觉很好......

直到您客户端的管理员更改其安全要求、发布新的公钥并使用一些自定义类型更新 soap 接口,并且您的下一个运行类似服务(但在 Windows Server 上)的客户端希望您实现和他们一起。

此时我放弃了尝试以纯 Java 方式实现这一点,并开始使用标准库。它们处理诸如加密、编组、标准偏差之类的东西,它们让你专注于更接近你的问题领域的东西。我希望你能拯救自己失去的一个月,我花了一个月的时间来学习这一课。

【讨论】:

    【解决方案3】:

    2013 年 Web 服务前景更新。

    Web 服务曾经是基于 SOAP 和 XML 的。 Web 服务被标准化为 JAX-WS。一些比较流行的框架是(曾经):

    • 轴 1.x
    • 轴 2
    • Apache CXF - CXF 还包括其他协议。这是一个更广泛的框架
    • Metro Web 服务,包括 JAX-WS 参考实现。
    • Java 6 和 Java 7 默认包含 JAX-WS RI。这意味着除了生成客户端和服务存根/骨架之外,不再需要框架

    此处未列出其他特定于供应商的实现,例如IBM Websphere 的 WS 实现和 Weblogic 的 WS 实现。

    不过,一般来说,要创建 Web 服务,我会推荐 Metro 和 JAX-WS RI。

    请注意,有许多 WS-* 标准,例如WS-Security,它可能不是所有 WS 实现的一部分。

    自从 Web 服务出现一段时间以来,在架构风格、协议和编码方面都出现了其他替代方案。

    例如,XML 曾经是事实上的编码。 JSON 现在更加流行。值得研究 Jackson、JSON 解析器或 Google GSON。支持 JSON 的主要论据是它易于使用、轻量级且对开发人员友好。

    与 JSON 一起出现的是 REST。 REST 是一种架构风格。使用 REST,您仍然可以在可以通过网络轻松使用的远程服务的意义上实现“Web 服务”。 REST 在 Java 系列标准中也被标准化为 JAX-RS。一些流行的 JAX-RS 实现包括 CXF、Jersey 和 RESTLet。

    最后,有一些新的孩子使用二进制编码。这些是 Google Protocol Buffers 和 Apache Thrift。他们的主要目标是提高性能以及更广泛地支持其他语言(Java、C#、Erland、Perl...)。

    今天在开发 Web 服务时,问题应该是: - 我关心性能吗? - 我想使用多种不同的语言访问服务吗? - 我想要适合移动设备吗?

    这些应该可以帮助您指导您的选择。此外,我更喜欢将我的依赖关系保持在最低限度。这意味着我宁愿采用 JRE 或 JDK 原生的东西,例如JAX-WS 或 JAX-RS 参考实现。

    【讨论】:

    • 您能否更新 2016 年的答案?发生了什么变化以及新的标准是什么?您是否有任何博客文章对此进行了详细介绍?
    • 我会说 JSON、REST 和 Jersey 是要走的路:它更轻量级且更易于使用。
    【解决方案4】:

    作为 Axis 的替代方案,您可以使用 Spring WebServices 框架在 J2EE 容器(如 Tomcat 或任何类似容器)中运行您的 Web 服务应用程序。我发现它非常易于使用和设置,如果您以后想将您的 Web 服务集成到另一个 Web 应用程序中,这很容易做到(我自己曾在两个不同的场合这样做过)。

    【讨论】:

    • Axis1?坏的。轴2?更糟糕。为 Spring Web 服务 +1。
    【解决方案5】:

    您可以随意使用网络服务器提供的 http 流,但从长远来看,使用框架和一些 jars(已被证明有效)将为您省去很多麻烦和大量时间。

    【讨论】:

      【解决方案6】:

      通常您会希望使用 Web 服务的编程框架。

      像 AXIS、CXF 或从 Sun 下载的 Java EE (GlassFish) 之类的东西。

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多