`

mule in action翻译15 : 3.3 使用HTTP传输

    博客分类:
  • ESB
阅读更多

mule in action翻译15 : 3.3  使用HTTP传输

 

3.3  使用HTTP传输

    本节讲mule对HTTP和web service的支持。对HTTP的支持,使从web站点或应用接受或发送数据变的更简单。mule支持 JAX-RS和JAX-WS,提供了对REST和SOAP的API支持。

 

 

3.3.1 使用HTTP发送和接受数据

 

    HTTP传输允许你使用HTTP协议进行发送和接受数据。你可以通过outbound endpoint使用HTTP的POST方法发送数据,或在请求-响应式的inbound endpoint 以GET返回返回数据。表2.3列举了 HTTP 连接器和 endpoint的的一些常用的配置元素。



 

 

     来看如何使用 HTTP outbound endpoint向一个URL发送POST数据。Arnor Accounting公司开发人员同意

了Prancing Donkey公司以 XLS文件方式上传支出报表。如果他们还没使用mule,这将是一个大问题。

他们的开发人员将会删掉一片代码--拷贝文件到会计人员目录的代码,而替换为以POST 方式把文件内容

发送到远程的URL.

使用mule 他们只需要简单的改变outbound endpoint,像如下列表以及图3.6所示。

Listing 3.2 Posting data with the HTTP transport

 

<flow name="postExpenseReports">
    <file:inbound-endpoint path="./data/expenses/2/in"
               pollingFrequency="60000">
    <file:filename-regex-filter pattern=".*xls$"
                          caseSensitive="false"/>
    </file:inbound-endpoint>
    <--!使用HTTP endpoint把支出报表POST出去-->
    <http:outbound-endpoint host="${http.host}"
                            port="${http.port}"
                            path="expenseReports"
                          method="POST"/>
</flow>

 

 

 

 

    把file:outbound-endpoint 替换为  http:outbound-endpoint就够了。数据不再需要写向文件,而是需要发送到远程web应用。

 

   使用一个HTTP作为一个消息是相当容易的。既然处理支出文件会花费一些时间,那么 SaaS应用可以异步的处理文件。Arnor Accounting的开发人员已经添加了一个功能:当报表被处理完成后会向一个特定的URL发送一个通知。现在  Prancing Donkey公司想接收这个通知并写入到文件系统,之后监控系统可以解析其中的错误。(你将这在3.4节是如何改进的)。

 

 

下面列表说明了如何配置,图3.7是图形化表示

Listing 3.3 Using an HTTP inbound endpoint to POST data to a file 

 

<flow name="expenseReportCallback">
<!--注释1  在 http://${http.host}/expenses/status   接收HTTP请求-->
<http:inbound-endpoint host="${http.host}"
                      port="${http.port}"
                      path="expenseReportCallback"
                    method="POST"
          exchange-pattern="one-way"/>

<!--注释2   把支出报表处理状态写到 ./data/expenses/status 目录-->
<file:outbound-endpoint path="./data/expenses/status"
               outputPattern="#[java.util.UUID.randomUUID().toString()]
                               -#[org.mule.util.DateUtils.getTimeStamp
                               ('dd-MM-yy_HH-mm-ss.SSS')]
                         .xml"/>

</flow>

 

 


    注释1处  配置的HTTP inbound endpoint 接收HTTP POST请求,将包含状态通知。

这些传送的payload 将被写到配置的目录中。注意之前的流和当前的流,都使用的是 单向交换方式。

这允许你使用HTTP模拟异步请求,但HTTP是一个同步协议。本案例中,mule将返回 200 OK的响应给

客户端,除非流跑出了异常。第9章你会看到异常处理。

 

  HTTPS   你将看到的所有的HTTP例子都是默认的未加密的。第10章讨论HTTPS 和 SSL .

  

  异步处理HTTP请求是一个有用的技术。它允许你通过HTTP实现消息的API.

  你处理最多的HTTP请求还是请求-响应式的。

  

  

  

  

  3.3.2 mule使用 web services 

 

      Prancing Donkey公司有一个叫做BrewService的服务类,开发人员想他它暴露给外部客户端使用。

  这个服务当前一个方法 getBrews(),它会返回前的啤酒列表。这个方法返回一个List, list的每个元素是一  个Brew的实例--这是他们域模型的一部分。列表 3.4 、3.5 、3.6详细  列出了BrewService接口和实现以及域  模型类Brew.

  

  JAX-RS AND JAX-WS   本节的例子中将使用JAX-RS 和 JAX-WS标准,对这两个标准的讨论

      超出了本书的范畴。要了解其详细信息,包括怎样在模型类使用注解控制序列化,

 请参考 http://jersey.java.net  和 http://cxf.apache.org/ 。

 

  Listing 3.4 The BrewService interface

 

package com.prancingdonkey.service;
public interface BrewService {
    List<Brew> getBrews();
}  

 

 

Listing 3.5 The BrewService implementation

 

package com.prancingdonkey.service;
public class BrewServiceImpl implements BrewService {
    List<Brew> getBrews() {
       return Brew.findAll();
    }
}

 

 

Listing 3.6 The Brew domain model

 

package com.prancingdonkey.model;
public class Brew implements Serializable {
    String name;
    String description;
    public Brew(String name, String description) {
        this.name = name;
        this.description = description;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }

    static public List<Brew> findAll()
    {
       // Returns a List of Brews
        return ...
     }
}

 

 

 

  我们现在看如何使用REST和SOAP暴露getBrews() 方法给外部用户。

 

REST 和  JAX-RS

    JAX-RS是 RESTful风格的web service 的java API。mule支持Jersey,它是JAX-RS的一个实现,允许你在mule流中使用JAX-RS注解开发RESTfull风格的web service。来注解BrewServiceImpl以JSON 方式返回啤酒目录。

 

Listing 3.7 The JAX-RS annotated BrewService

 

package com.prancingdonkey.service;
@Path("/brews")  //注释1 URI路径的root
public class BrewServiceImpl implements BrewService {

    @GET  //注释2  接受的 HTTP 方法
    @Produces("application/json")  //注释3  方法的返回值类型
    List<Brew> getBrews() {

      return Brew.findAll();
    }
}

 

 

  注释1 处  @Path注解指定了本类中你暴露的方法的根URI(你也可以在方法上指定@Path来

                  进一步限定路径)

  注释2处  @GET注解指明这个方法只对HTTP GET请求进行响应。

  注释3处  @Produces注解表明将返回JSON格式的响应。

 

  现在BrewServiceImpl已别注解好,来把它放到流中。下面的列表说明了如何在流中配置。

Mule studio中图见 图3.8

Listing 3.8 Expose the brew listing over REST using JAX-RS 

<flow name="brewRestService">
<!--注释1  HTTP inbound endpoint接受REST请求-->
<http:inbound-endpoint address="http://localhost:8091/rest"
exchange-pattern="request-response"/>
<jersey:resources>
<!--注释2  要暴露为Jersey资源的类-->
<component class="com.prancingdonkey.service.BrewServiceImpl"/>
</jersey:resources>
</flow>

 

 

注释1处  设置拦截RESTfull请求。

注释2处  暴露注释的JAX-RS类

 

现在你可以启动mule,执行你的请求了。

来使用curl调用下这个服务看看会发生什么。

 

Listing 3.9 Using curl to invoke the web service

% curl

http://api.prancingdonkey.com/rest/brews/list

[ {"name":"Frodo's IPA", "description":"Indian Pale Ale" }, {

"name":"Bilbo's Lager", "description":"Indian Pale Ale" }, {

"name":"Gandalf's Barley Wine", "description":"Indian Pale Ale" } ]

 

 

curl对 rest/brews/list URI的请求返回 方法的响应,元素时Brew的list,序列化为JSON.

你可以通过JAXB定制如何生存JSON.

现在来看 如何根据mule对JAX-WS的支持把同样的服务暴露为SOAP方式访问的服务。

 

调用 REST 服务的工具   Curl是一个可以用来与REST 服务进行交互的命令行工具。

可以在 http://curl.haxx.se/ 进行下载。另外一个强大的工具是 google chrome浏览器

的 REST  Console。可用chrome连接http://restconsole.com. 安装。

 

 

SOAP 和 JAX-WS 以及 APACHE CXF 

    JAX-WS是java 对 xml web service 的API 。JAX-WS提供了一系列的注解来简化 SOAP驱动的

 web service的开发。 Mule通过apache的CXF支持JAX-WS. 要BrewService为可用通 SOAP方式

 访问,你需要注解实现类 BrewServiceImpl ,就像你使用JAX-RS时一样。你也需要抽出并注解

 一个接口--BrewService。

 

  APACHE CXF  APACHE CXF是一个构建web service的开源框架。mule多数对SOAP的支持通过使用

          APACHE CXF实现。 CXF是一个非常强大 ,而且比较复杂,对它的讨论超出的本书的范围。

         读者去http://cxf.apache.org/docs/index.html 查看用户手册。

 

 CXF使用接口生成 web service 的 WSDL。这是客户端连接的契约。

列表 3.10 和 3.11 展示了如何注解 BrewService和 BrewServiceImpl以生成WSDL以及

如何注解实现类。

Listing 3.10 The JAX-WS annotated BrewService interface 

package com.prancingdonkey.service;
@WebService
public interface BrewService {
   List<Brew> getBrews();
}  

 

Listing 3.11 The JAX-WS annotated BrewService implementation 

package com.prancingdonkey.service;
@WebService(endpointInterface ="com.prancingdonkey.service.BrewService",
                  serviceName = "BrewService")
public class BrewServiceImpl implements BrewService {
    List<Brew> getBrews() {
        return Brew.findAll();
    }
}

 

现在把 SOAP串联在mule中 。和Jersey类似 见下列表以及 图 3.9

Listing 3.12 Expose the brew listing over SOAP using CXF 

<flow name="brewSoapService">
<!--注释1   HTTP endpoint接受SOAP请求-->
<http:inbound-endpoint address="http://localhost:8090/soap"
exchange-pattern="request-response"/>

<cxf:simple-service
<!-- 要暴露的服务接口-->
serviceClass="com.prancingdonkey.service.BrewService"/>
<!--实现类-->
<component class="com.prancingdonkey.service.BrewServiceImpl"/>
</flow>

 

 

web service的地址是http://api.prancingdonkey.com/soap?wsdl

来使用 SOAPUI客户端,指向这个WSDL并生成请求,看到返回才响应如图 3.10 。

3.10 图左边部分显示了 WSDL的操作,本例中只有一个 getBrews。

点击左边的 getBrews 将生成一个简单的请求如图中间部分。

点击绿色的运行按钮,将发送请求到mule,并会在图右侧部分显示响应。



 

Figure 3.10   Using SOAP UI to invoke the SOAP service

JAXB  你可以使用 JAXB控制CXF和 Jersey的序列化。更多细节参看 http://jaxb.java.net/tutorial/

 

CXF也可以用来调用web service 。假设Arnor Accounting提供了一个WSDL 描述他们的 SAOP API .

你可以把列表3.1 的流修改为通过这种机制提交支持报表,如下所示:

Listing 3.13 Submit expense reports using SOAP

<flow name="brewListingOverSOAP">
<file:inbound-endpoint path="/data/expenses/in"
pollingFrequency="60000"/>
<cxf:jaxws-client
<!--注释1  CXF生成的客户端类-->
clientClass="com.arnor.api.AccountingService"
<!--注释2  WSDL端口-->
wsdlPort="SoapPort"
<!--注释3  WSDL位置-->
wsdlLocation="classpath:/wsdl/services.wsdl"
<!--注释4  要调用的操作-->
operation="submitExpenses"/>
</flow>

 

 

 采用CXF的wsdl2java生成客户端类后 ,就可以使用mule调用web service了。

 生成的类配置在注释1处。WSDL的端口和位置配置定义在注释2和注释3处。

 调用的操作在注释4处。

 

 在本节机学习了如何使用HTTP 调换数据。你看mule的HTTP如何传输可以发送和接受消息,

 以及如何进行异步HTTP请求的处理。你看到了依据mule对JAX-RS 和JAX-WS的支持来暴露使用

 REST和SOAP方式访问的服务。

 

 

 简单服务模式   你将在第6章看到简单服务方式可以用来把POJO暴露为REST和SOAP访问的服务,

               这仅仅只需要一行配置。如果你的服务很简单 ,或者你没必要使用JAX-RS 及 JAX-WS标准的话这

              种方式可能更合理。

 

  • 大小: 70.1 KB
  • 大小: 50.5 KB
  • 大小: 50.7 KB
  • 大小: 72.2 KB
  • 大小: 60.9 KB
  • 大小: 161.4 KB
分享到:
评论

相关推荐

    Mule in Action, 2nd Edition

    Mule in Action, Second Edition is a totally-revised guide covering Mule 3 fundamentals and best practices. It starts with a quick ESB overview and then dives into rich examples covering core concepts ...

    Mule in action下载(英文版)

    《Mule in Action》一书深入探讨了Mule——一个轻量级消息框架与高度分布式的对象代理系统,为读者提供了全面的理论与实践指导。本书由David Dossot和John D'Emic共同撰写,旨在帮助开发者掌握Mule的核心功能与配置...

    mule in action 说明+文档介绍

    mule in action 和doc文档详细介绍 Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议...

    mule in action

    《Mule in Action》是一本专注于Mule ESB(企业服务总线)的入门教程,旨在帮助读者系统地学习和理解这一强大的集成平台。Mule ESB是开源领域中的一个重量级选手,常用于构建灵活、可扩展的企业级集成解决方案。这...

    Mule in Action

    Mule in Action is acomprehensive tutorial designed for working Java developers. This authoritativebook explores the architecture and the main features of version Mule 2 throughnumerous running ...

    mule in action 第二版英文正式版

    ### Mule in Action 第二版 英文正式版 关键知识点概述 #### 一、书籍简介与背景 《Mule in Action》第二版是一本详细介绍Mule ESB(Enterprise Service Bus)这一著名开源框架的书籍。该书由David Dossot、John D...

    Mule in action

    《Mule in Action》这本书是关于Mule ESB(企业服务总线)的权威指南,由David Chappell和James Strachan等作者撰写。Mule ESB是一种开源的集成平台,它允许开发者轻松地连接各种系统、服务和应用程序,实现数据的...

    MULE用户指南3.3

    **MULE用户指南3.3** 是一份针对MULE企业服务总线(ESB)的官方文档,旨在帮助用户理解并有效地使用MULE 3.3版本。MULE ESB是一个开源的企业级集成平台,它提供了灵活且强大的工具来连接各种系统、应用程序和服务,...

    Mule in Action, Second Edition

    总体而言,Mule in Action, Second Edition这本书是关于Mule ESB使用和集成实践的权威指南,涵盖了从基础概念到高级特性的广泛主题。本书适合于那些希望深入学习和利用Mule ESB进行企业级应用集成的开发人员和架构师...

    Mule+ESB+Studio +v3.3安装使用手册

    ### Mule ESB Studio v3.3 安装与使用详解 #### 一、Mule ESB Studio 简介 Mule ESB (Enterprise Service Bus) 是一款强大的集成平台,用于连接不同的应用和服务,实现数据和服务的无缝交互。Mule ESB Studio v3.3...

    mule in action 即mule实战源码

    《Mule in Action》是关于Mule ESB的实战指南,该书深入浅出地介绍了如何使用Mule这一强大的企业服务总线(ESB)进行应用程序集成。Mule ESB以其用户基数庞大、文档详尽以及社区活跃而备受赞誉,是企业级集成解决...

    Mule ESB Studio v3.3 安装使用手册

    【Mule ESB Studio v3.3 安装使用手册】是针对Mule ESB集成服务平台的一个详细指导,旨在帮助用户成功安装和使用Mule Studio。Mule ESB是一款强大的企业服务总线(ESB)工具,用于构建、部署和管理集成解决方案。...

    mule in action mule 实战

    Mule in Action是一本关于Mule ESB(企业服务总线)的实战指南,旨在为读者提供深入的实践知识和案例分析。ESB作为一种流行的中间件技术,用于实现不同系统之间的服务集成。Mule作为一个开源的ESB解决方案,通过其...

    Mule in Action 2014

    《Mule in Action》第二版是一本全面介绍如何使用Mule ESB进行高效集成开发的书籍,由David Dossot、John D’Emic和Victor Romero共同编写。 #### 二、Mule ESB的关键特性 **1. 消息处理:** Mule ESB支持多种消息...

Global site tag (gtag.js) - Google Analytics