【问题标题】:Apache CXF + Mule ESB, SOAP + RESTful web service. How to go about it?Apache CXF + Mule ESB、SOAP + RESTful Web 服务。怎么办?
【发布时间】:2012-04-02 22:33:39
【问题描述】:

我是 Java Web 服务的新手,目前正在使用 Apache CXF 开发一个。它将同时支持 JAX-WS(SOAP) 和 JAX-RS(REST)。它将被桌面和移动应用程序使用。在学习 Apache CXF 时,我遇到了一些阻碍。任何人都可以帮助我处理层级流程吗?

仅供参考:我之前使用过 Google Maps API。我在 .NET 中开发了一个消费应用程序,并且对 Web 服务(SOAP 和 REST)有一个很好的了解。我在 Java 中遇到了这些实现细节的问题。


关于服务

这是我的理解。 Mule 将在单独的服务器上运行,由于 Mule 已经支持 Apache CXF,它将能够运行 RESTful 和 SOAP 服务。

快速问题 1:Apache CXF 在 Mule 中的用途是什么?

快速问题 2:我见过一些没有 Mule 的 Apache CXF RESTful Web 服务。在这种情况下它是否在 servlet 容器中运行?如果是,它与在 Mule 中部署 Web 服务有何不同?

关于集成

消费应用程序将在另一台服务器上运行。它将对上述 Web 服务进行 SOAP 或 rest URL 调用。根据应用程序类型,将向消费应用程序发送响应。

快速问题 1:我的服务端点对于 REST 和 SOAP 调用是否通用?

快速问题 2:是否可以将 RESTful 和 SOAP Web 服务放在一个公共端点上?如果不是(我猜最有可能是这种情况),消费应用程序如何知道它得到了什么?


tl;博士?在 Mule ESB 中部署时,具有 REST 和 SOAP 定义的 Apache CXF Web 服务如何工作?每层的端到端流程是什么?

【问题讨论】:

    标签: jakarta-ee rest soap cxf mule


    【解决方案1】:

    快速问题 1:Apache CXF 在 Mule 中的用途是什么?

    Mule 使用 CXF 来实现 WebServices 的消费和提供。它没有什么特别之处。它只是 mule 使用的一个库。

    快速问题 2:我见过一些没有 Mule 的 Apache CXF RESTful Web 服务。在这种情况下它是否在 servlet 容器中运行?如果是,它与在 Mule 中部署 Web 服务有何不同?

    您也可以在自己的应用程序中使用 CXF,例如将其部署到 tomcat 中。是的,它会在容器中运行。嗯,其实差别不大。 Mule 也在容器本身中运行。 :) Mule 当然也包含许多其他功能,因为它是 ESB。您应该考虑是否需要 ESB 的所有功能。如果您只需要部署几个 Web 服务,那么我认为 ESB 对您的需求来说太过分了。

    快速问题 1:我的服务端点对于 REST 和 SOAP 调用是否通用?

    不,不会的。您需要为这两个服务创建单独的端点。

    快速问题 2:是否可以将 RESTful 和 SOAP Web 服务放在一个公共端点上?如果不是(我猜最有可能是这种情况),消费应用程序如何知道它得到了什么?

    好吧,您可以使用相同的入站端点,但我认为您这样做会让自己陷入困境。您可以通过 HTTP 请求类型进行分离。 SOAP 请求是 POST 请求,而简单的 REST 调用(假设您正在获取数据,而不是发布)将是 GET 请求。

    【讨论】:

      【解决方案2】:

      我的第一个建议是(以前做过)不要使用 Mule 进行 Web 服务部署。当然可以,因为 CXF 为 Mule 提供了使用和部署 Web 服务的能力。但是,如果您不使用 Mule 的 ESB 功能,则最好将服务部署到 Tomcat 之类的应用程序服务器上。即使您将 ESB 用于服务中介、消息路由、数据转换等,您最好还是将服务部署到单独的服务器上。甚至 MuleSoft 也为此提供了一个 Tomcat (Tcat) 版本。

      在 Mule 中,您为 Web 服务创建一个端点配置(是的,我相信您必须有多个端点)。使用 Tomcat(和其他应用程序服务器),您通常可以创建 Web 应用程序的 war 文件并将其部署到服务器上。我在代码中使用 JAX-WS (SOAP) 和 JAX-RS (REST) 注释以及 JAXB 进行数据绑定。我 Spring 在 Web 服务配置中配置 SOAP 和 REST 端点。我还使用 Maven 来构建、测试、打包、运行和部署 Web 服务。

      客户端需要提前知道它正在使用哪个 Web 服务才能正常工作。 SOAP 和 REST 请求/响应看起来不同。通常,要使用 SOAP 服务,您将使用 wsdl2java 生成客户端代码。您还可以通过将 SOAP 信封的 xml 字符串发布到 SOAP 端点来使用 SOAP 服务。您可以以大致相同的方式调用 RESTful 服务(没有 SOAP 信封),但它也可以是 GET 或 PUT(不是 POST)。可以使用 CXF 生成 WADL,它以类似的方式描述 RESTful 服务。这可用于使用 wadl2java 生成客户端代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        • 2014-09-24
        • 1970-01-01
        相关资源
        最近更新 更多