【发布时间】:2009-10-01 17:41:07
【问题描述】:
Java Web 服务需要AXIS 或CXF 吗?可以全部通过JDK(1.6)完成吗?
【问题讨论】:
-
你说的是调用还是提供网络服务?
标签: java web-services axis2 axis cxf
Java Web 服务需要AXIS 或CXF 吗?可以全部通过JDK(1.6)完成吗?
【问题讨论】:
标签: java web-services axis2 axis cxf
【讨论】:
以下内容基于真实的个人故事:
因此,您想在 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 方式实现这一点,并开始使用标准库。它们处理诸如加密、编组、标准偏差之类的东西,它们让你专注于更接近你的问题领域的东西。我希望你能拯救自己失去的一个月,我花了一个月的时间来学习这一课。
【讨论】:
2013 年 Web 服务前景更新。
Web 服务曾经是基于 SOAP 和 XML 的。 Web 服务被标准化为 JAX-WS。一些比较流行的框架是(曾经):
此处未列出其他特定于供应商的实现,例如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 参考实现。
【讨论】:
作为 Axis 的替代方案,您可以使用 Spring WebServices 框架在 J2EE 容器(如 Tomcat 或任何类似容器)中运行您的 Web 服务应用程序。我发现它非常易于使用和设置,如果您以后想将您的 Web 服务集成到另一个 Web 应用程序中,这很容易做到(我自己曾在两个不同的场合这样做过)。
【讨论】:
您可以随意使用网络服务器提供的 http 流,但从长远来看,使用框架和一些 jars(已被证明有效)将为您省去很多麻烦和大量时间。
【讨论】:
通常您会希望使用 Web 服务的编程框架。
像 AXIS、CXF 或从 Sun 下载的 Java EE (GlassFish) 之类的东西。
【讨论】: