【问题标题】:Advice on implementing JAX-WS web services to be consumed by non-Java (PHP) endpoint关于实现由非 Java (PHP) 端点使用的 JAX-WS Web 服务的建议
【发布时间】:2014-03-02 11:41:45
【问题描述】:

我是一名 Java SE 程序员,正在探索实现 JAX-WS Web 服务以与我们的 Web 服务器集成。到目前为止,我还没有使用网络服务的经验,因此希望得到大家的专家意见。

背景是我的公司有一个使用 Java SE 在内部开发和托管的 POS 系统。我们正在规划电子商务功能,这些功能将通过外部 Web 开发公司以 HTML/PHP 实现并在外部托管。

因此,我们正在探索在我们的端点上实现 JAX-WS Web 服务,以便与运行 PHP 端点的电子商务服务器集成。

我做了一些研究,我的理解是:

我现在想知道在与构建我们电子商务平台的外部网络开发公司讨论实施时,什么是正确的方法。大多数网站和论坛的示例都假设两个端点都使用 Java,并且两个端点都由同一个开发人员/团队实现。

根据我有限的研究,我认为过程是:

  1. 创建 Web 服务的我/我的公司(用 Java 编写 Web 服务方法)
  2. 我/我的公司正在创建服务器程序
  3. 然后将我的服务器程序的 URI (http://:/md5WebService?wsdl) 生成的 wsdl 用作我们内部 POS 系统和外部电子商务平台之间的接口契约

实施电子商务平台的 Web 开发公司随后使用 wsdl 来实施 PHP SoapClient 端点。

如果我们的内部 POS 系统需要使用由外部 Web 开发公司创建的 Web 服务,他们会将 wsdl 传递给我,我使用它来调用他们。

这是继续进行的正确方法吗?

非常感谢。

干杯, 亚瑟

【问题讨论】:

    标签: java php web-services jax-ws soap-client


    【解决方案1】:

    在 Java 中,您实际上有两种方式来开始您的 Web 服务设计。您可以先创建 WSDL(Web 服务描述语言)契约(契约优先方法),然后让 Java 或一些框架工具为您创建 Java 框架类,您可以使用它们来实现每个操作的逻辑,或者您可以从代码开始首先接近并实现每个 Web 方法及其逻辑,然后让 Java 或一些外部框架工具为您生成 WSDL contract

    无论您以何种方式开始,结果都应该非常相似且与平台无关。用于基于 WSDL 的 Web 服务的标准消息格式是 SOAP (Simple Object Access Protocol),它基于 XML (eXtensible Markup Language),根据定义,它是平台和编程语言中立的。

    因此,在实现您的服务并为 WS 端点启动服务器后,将 ?wsdl 添加到端点 URL 的末尾应该将 WSDL 合同返回给调用者,该合同可用于为所需的编程创建客户端存根进一步简化了从 Web 服务发送和接收消息的语言。但是请注意,可能不需要创建存根文件,因为所有信息都可以直接从 WSDL 合同中解析出来。由于缺乏有关 PHP 的知识,我无法详细说明如何直接从 PHP 调用 WS,或者是否需要/推荐创建存根文件。

    为了从您的服务调用另一个 WS,您需要在您的一个 Web 方法中创建一个 WS 客户端,并调用远程 WS 提供的一个或多个操作,并在您的 Web 方法中处理响应。

    因为我不确定您是否使用任何 (Java) 框架,例如 f.e. Apache CXF 我这里没有给出任何代码示例。要在您的服务中集成外部 Web 服务,您还可以查看 Apache Camel,它为包括 CXF 在内的众多基于 Java 的框架提供集成支持。在这里,您的 Web 服务被视为 Consumer,而您需要调用的其他外部服务被视为 Producers。您的内部和外部服务之间的交互在这里建模,您可以在其中应用各种Enterprise Integration Patterns (EIP),例如将响应中包含的多个元素拆分为不同的对象,您还可以并行处理这些对象。

    一般来说,如果您遵循代码优先方法,您所涉及的步骤枚举看起来确实正确,但如前所述,您也可以首先定义您的合同。根据您对 WSDL/XSD 语法的了解(您对确切语法的了解越少,您应该使用代码优先方法越多),首先创建合同可能会在您仍然开发实现的内部逻辑的同时更快地启用 PHP 端集成。

    【讨论】:

    • 非常感谢 Roman 的详细说明和资源链接供我参考。干杯。
    【解决方案2】:
    it is possible to mix end-point technologies, and specifically in my case JAX-WS as our endpoint and PHP SoapClient on our e-commerece end-point PHP SOAP Client to consume JAX-WS with Basic Http Authentication Using PHP SoapClient with Java JAX-WS RI (Webservice)
    

    这正是引入webservice概念的目的。您不必担心您的客户端和服务器是在哪个平台或语言上实现的。客户端和服务器将按照 wsdl 中的约定简单地交换 xml 消息(独立于平台)。

    继续你的理解。

    【讨论】:

    • 感谢 kingAm 确认我的理解。干杯。
    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多