linux mule,Mule 官方例子研究(2)

Mule 官方例子研究(2)

日期:2011-10-28

点击:169

来源: 未知

分享至:

exchange-pattern=\"request-response\">

在服务配置中,对CXF来说ServiceClass是不需要的。这是因为在这个配置中,CXF是能够自动发现组件的。基于流的配置目前还不支持,所以serviceClass必须被明确的制定。

三、HelloWorld 例子分析

3.1 概述

该部分主要描述Hello World例子的配置和行为。

当我们在浏览器中输入预定义的地址 (http://localhost:8888/?name=Ross) 时 Mule解释输入值中“?name=”后的部分,进行验证,使greeeter.java 类去添加一些文本到字符串中,然后传递到另外一个flow,第二个flow继续添加文本,然后通过浏览器传回来;以上做的这些知识简单的方式,但是这个例子使用了flows和http传输去说明消息路由和转换器在Mule中的引用。

1615114553-5.jpg%5C%22

3.2运行应用

如果正在使用MULE IDE 环境,可以创建一个基于Hello World例子的工程,然后通过Eclipse来运行;

如果没有使用MULE IDE环境,简单的拷贝预构建的档案资料(mule-example-hello-3.0.0.zip)到应用文件夹($MULE_HOME/apps),并启动mule。去通过浏览器访问web service 调用:

http://localhost:8888/?name=Ross

通过在控制台按“CTR-C”停止mule;

3.3编译例子

同上

3.4如何工作的?

Hello World应用被配置在mule-config.xml中,这个文件存在于mule 根目录下的examples/hello/src/main/app. 该部分主要是通过配置和JAVA资源文件的调用实现的。

3.5资源文件

消息的文本是从hello-example-messages.properties文件中获得的,该文件存在于

Message text is taken from the hello-example-messages.properties file in the exampleshellosrcmainresourcesmessages文件夹, 以下是资源文件的内容:

1=, how are you?

2=Hello

3=Please enter your name:

4=Please provide a valid name with at least one character!

在同一个文件夹中,该属性文件有翻译的版本可以替换,例如你可以德语的字符串替换英语的字符串。

3.6类

Mule 配置文件唤起两个JAVA类去处理消息,首先是Greeter类,这个类用一个方法从LocalMessage类去推送字符串“hello”,字符串内容来自属性文件。Greeter类的方法 greet() 然后去追加人名。

public class Greeter

{

private String greeting = \"\";

public Greeter()

{

greeting = LocaleMessage.getGreetingPart1();

}

public Object greet(NameString person)

{

Object payload = person;

if (person.isValid())

{

person.setGreeting(greeting);

}

else

{

payload = new Exception(LocaleMessage.getInvalidUserNameError());

}

return payload;

}

}

第二个类是ChitChatter , 这个类实现附加字符串”,how are you?”.

public class ChitChatter

{

private String chitchat = \"\";

public ChitChatter()

{

chitchat = LocaleMessage.getGreetingPart2();

}

public void chat(ChatString string)

{

string.append(chitchat);

}

}

3.7 把类连接起来

在Hello World中,调用这些类的配置文件,在composite元素中组成了3个接入点,去接受HTTP、Servlet、和VM请求;

Hollo World flow 使用这个composite元素去获得在浏览器中输入的名字,调用greeter类,路由意外的错误去分离被调用的systemErorHandler中的handler.

...

接入点元素使用http传输 接受接入的消息。在问候者受到消息之前,Transformer-refs属性指定接入转换器被调用。该转换器早先在配置文件被定义:

该转换器转换从Http Connector 收到的Http Request 为NameString 对象,该对象是类Greeter的Greet()方法预期的数据类型。当你指定逐渐的时候,可以不必指出一个具体类中的一个具体的方法—Mule 能决定基于消息数据类型的适合的方法。

Greeter类预决定对输入的用户“问候”后,消息被匹配在端点vm://chitchatter. 这是调ChitChat flow, 同时调用定制的转换器NameStringToChatString,转换NameString object为ChatString object.

responseTransformer-refs=\"ChatStringToString\" exchange-pattern=\"request-response\"/>

去更多的演示转换器,ChitChatter类期待一个ChatString对象,于是我们有了一个NameStringToChatString转换器,在组件接收到消息之前,去转换消息有效部分从NameString 为ChatString。消息被接收在vm://chitchatter上,这个端点是关于Greeter类分发它的消息。

消息被处理后,该消息被作为Http响应信息被发送,这个组件上的响应转换会记录。甚至认为没有接出提供者,再有一个转换器ChatStringToString,设置 Even though there is no outbound provider, there is one more transformer, ChatStringToString,它转换有效负载从ChatString 为 平常的string ,所以他能被Http 传输处理,在http响应中被显示。

注释:JAVA类没有任何的路由逻辑,他们是通过Mule的配置文件连接在一起的,能实现在JAVA类,WebService等之间传递消息

3.8 配置Servlet 传输

在Web容器中部署MULE是很常见的,使用Web Server 代替Mule Http Transport去管理Http connection。通过Servlet的方式调用Hello 服务,提交一个Web 表单,如下:

使用Servlet传输,下面的端点能被添加到配置文件中 (注释: the REST endpoint currently only works on the servlet transport only since the HttpRequestToParameter transformer only supports servlets.):

3.9 配置VM 传输

这个实例也演示在Mule 程序中如何连接服务、如何使用mule Client

然后用Mule Client API 去调用服务:

MuleClient client = new MuleClient(muleContext);

client.send(\"vm://greeter\", \"Ross\", null);

MuleMessage response = client.send(\"vm://greeter\", \"Ross\", null);

System.out.println(\"response = \" + response.getPayload());

1615113320-6.jpg%5C'

大小: 63.8 KB

1615114462-7.jpg%5C'

大小: 12.3 KB

1615112222-8.jpg%5C'

大小: 50.5 KB

1615113J1-9.jpg%5C'

大小: 62 KB

1615113026-10.jpg%5C'

大小: 14.6 KB

Tags:

分享至:

验证码:

vdimgck.php

理智评论文明上网,拒绝恶意谩骂

用户名:

匿名发表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值