WSO2 ESB 5.0.0 一些组件的使用教程
Posted 菠萝蚊鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSO2 ESB 5.0.0 一些组件的使用教程相关的知识,希望对你有一定的参考价值。
WSO2 ESB 5.0.0 一些组件的使用教程
- 一、 新建 WSO2 解决方案
- 二、添加 Rest API
- 三、Property Mediator
- 四、Class Mediator
- 五、PayLoadFactory Mediator
- 六、Response Mediator
- 七、发布到 WSO2 ESB
- 八、使用 Postman 测试
- 九、单个接收、返回属性示例类
- 十、单个接收、返回属性示例 REST API.xml
- 十一、多个接收、返回属性示例
- 十二、Call Mediator
- 十三、AddressEndpoint
- 十四、DataMapper
- 十五、Log Mediator
一、 新建 WSO2 解决方案
二、添加 Rest API
右键单击api文件夹,添加一个REST API
打开 api 的 xml 文件,单击 Resource,在属性把 Post 设为 true,这个是设置可以接收 http 方法。
三、Property Mediator
属性中介器对消息没有直接影响,而是对流经 Synapse 的消息上下文产生影响。 可以通过 Synapse XPath 变量或 get-property() 扩展函数检索消息上设置的属性。 一个属性可以有一个定义的有效范围。 如果属性没有定义的范围,则默认为 Synapse 消息上下文范围。 使用指定为 remove 的操作的属性元素,可以删除任何现有的消息上下文属性。
1、设置 Property 接收 xml / json 数据
2、设置Property属性
Property Action
- set:如果选择此项,将在消息上下文中设置该属性。
- remove:如果选择此项,该属性将从消息上下文中移除。
Value Type
- Value:如果选择此项,静态值将被视为属性值,并且应在值参数中输入该值。
- Expression:如果选择此项,则在调解期间将通过Value Expression来确定属性值。 此表达式应输入到 Expression 参数中。
Property Data Type
- 属性的数据类型。 属性中介将把属性作为选定类型的属性进行处理。
①、JSON 数据解析公式:json-eval($.name)
多层解析:json-eval($.a.b.c)
②、XML数据解析公式://name
多层解析://a//b//c
③、添加多个 Property
④、通过 Property 获取 header
<property expression="$trp:usercode" name="usercode" scope="default" type="STRING"/>
<property expression="$trp:password" name="password" scope="default" type="STRING"/>
四、Class Mediator
类中介器创建自定义指定类的实例并将其设置为中介器。 该类必须实现 org.apache.synapse.api.Mediator 接口。 如果指定了任何属性,则在初始化期间在类上调用一次相应的 setter 方法。
仅当没有已提供所需功能的内置介体时,才将类介体用于特定于用户的自定义开发。 维护自定义类会产生很高的开销。 因此避免使用它们,除非场景经常重复使用并且非常特定于用户。
1、添加 Class 中介器
2、设置 Class 属性
3、设置 Property Name
4、新建一个 Mediator Project
5、在类中获取 Property 的数据
类中设置的 get、set 的属性名必须和上面设置的 Property Name 一致。
6、在类中返回 Property
此处返回的是 xml 格式,则在 PayloadFactory 的 get-property 设置的应该是 xml 格式。
五、PayLoadFactory Mediator
PayloadFactory Mediator 转换或替换消息的内容。 中介器配置中的每个参数都可以是静态值,或者可以指定 XPath 或 JSON 表达式以通过针对现有 SOAP 消息评估提供的表达式来在运行时获取值。 可以配置请求或响应的格式并将其映射到提供的参数。
1、添加 PayLoadFactory
2、设置 PayloadFactory 属性
Media Type
- 此参数用于指定是否应以 JSON 或 XML 格式创建消息负载。
Payload Format
- Inline:如果选中此选项,则可以通过在出现的文本字段中输入有效负载格式在 PayloadFactory 介体配置中进行定义。 要将内容添加到有效负载,请使用 $n 格式为要添加的每个值输入变量(从 1 开始并随着每个附加变量递增,即 $1、$2 等)。 然后,将按照与变量相同的顺序创建参数,以指定每个变量的实际值。
- Register Reference:如果选择此项,则可以选择保存在注册表中的现有负载格式。 单击相关的 Governance Registry 或 Configuration Registry 以从资源树中选择有效负载格式。
①、返回单个参数
返回JSON数据,Payload为:“ESB”:$1
Class 中介器返回的必须是 json 才能使用此表达式
在Value中指定参数返回值的表达式。
返回全部值:$.
返回esb的temp的值:$.esb.temp
返回xml数据,Payload为:$1
此处的 get-property(‘resp’) 的参数名必须和在 Class 在返回的 Property 一致!!!
②、返回多个参数
XML
JSON
六、Response Mediator
响应中介器停止对当前消息的处理并将消息作为响应发送回客户端。
1、添加一个Response
七、发布到 WSO2 ESB
第一次运行可能会发布不成功,重新Redeploy一下
八、使用 Postman 测试
WSO2输出
日志:
property_name: jsondata
xmldata: "ESB":"DATA":"DATAINFOS":"PUUID":11111,"SYNCODE":"ZWY","DATAINFO":"DESC1":"ABC"
result: "result":"S","moveTotal":12
[2021-07-09 10:28:24,629] INFO - LogMediator To: /ttt, MessageID: urn:uuid:4bbb1765-2743-4cc6-a86e-3ad670237d41, Direction: request, Payload: "ESB":"result":"S","moveTotal":12
九、单个接收、返回属性示例类
package com;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
import org.json.JSONObject;
import org.json.XML;
public class TTTest extends AbstractMediator
private String property_name;
public String getProperty_name()
return property_name;
public void setProperty_name(String property_name)
this.property_name = property_name;
public boolean mediate(MessageContext context)
// TODO Implement your mediation logic here
String xmldata = (String) context.getProperty(property_name);
System.out.println("property_name: " + property_name);
System.out.println("xmldata: " + xmldata);
//StringBuffer resultss = new StringBuffer("<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?>");
//resultss.append("<ESB></ESB>");
String sss = "<result>S</result><moveTotal>" + 12 + "</moveTotal>";
//JSONObject j = XML.toJSONObject(sss);
System.out.println("result: " + sss);
context.setProperty("response", sss);
return true;
十、单个接收、返回属性示例 REST API.xml
<?xml version="1.0" encoding="UTF-8"?>
<api context="/ttt" name="ttt" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST GET">
<inSequence>
<property expression="json-eval($.)" name="jsondata" scope="default" type="STRING"/>
<class name="com.TTTest">
<property name="property_name" value="jsondata"/>
</class>
<payloadFactory media-type="json">
<format>"ESB":$1</format>
<args>
<arg evaluator="xml" expression="get-property('response')"/>
</args>
</payloadFactory>
<log level="full"/>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
十一、多个接收、返回属性示例
package com;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
public class TTTest extends AbstractMediator
private String property_name;
private String property2;
public String getProperty_name()
return property_name;
public void setProperty_name(String property_name)
this.property_name = property_name;
public String getProperty2()
return property2;
public void setProperty2(String property2)
this.property2 = property2;
public boolean mediate(MessageContext context)
// TODO Implement your mediation logic here
String p1 = (String)context.getProperty(property_name);
String p2 = (String)context.getProperty(property2);
System.out.println("p1: " + p1);
System.out.println("p2: " + p2);
String args = "\\n" +
" \\"esb\\":\\n" +
" \\"args1\\":\\"aaaaaaaaaaa\\",\\n" +
" \\"args2\\":\\n" +
" \\"bbb\\":\\"bbbbbbbbbbb\\"\\n" +
" \\n" +
" \\n" +
"";
context.setProperty("args", args);
return true;
<?xml version="1.0" encoding="UTF-8"?>
<api context="/test_first" name="testfirst" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST GET">
<inSequence>
<property expression="json-eval($.esb.args1)" name="test" scope="default" type="STRING"/>
<property expression="json-eval($.esb.args2)" name="test2" scope="default" type="STRING"/>
<class name="com.TTTest">
<property name="property_name" value="test"/>
<property name="property2" value="test2"/>
</class>
<payloadFactory media-type="json">
<format>"ESB": 
"args1":$1,
"args2":$2

</format>
<args>
<arg evaluator="json" expression="$.esb.args1"/>
<arg evaluator="json" expression="$.esb.args2"/>
</args>
</payloadFactory>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
十二、Call Mediator
Call Mediator用于将消息从 ESB 发送到端点。可以以阻塞或非阻塞方式调用服务。
当以非阻塞模式调用服务时,底层工作线程无需等待响应即可返回。在阻塞模式下,底层工作线程被阻塞并在向端点发送请求后等待响应。阻塞模式下的调用中介器与 Callout 中介器非常相似。
在阻塞和非阻塞模式下,Call 中介器都以同步方式运行。因此,中介在服务调用后暂停,并在收到响应时从序列中的下一个中介恢复。调用中介器允许创建独立于底层架构的配置。
Call 中介器的非阻塞模式利用非阻塞传输来获得更好的性能。因此,建议尽量在非阻塞模式下使用。但是,有些场景需要使用阻塞模式。例如,当实现与 JMS 事务相关的场景时,以阻塞模式使用底层线程至关重要。
在阻塞模式下,Call mediator 使用 <ESB_HOME>/repository/conf/axis2/axis2_blocking_client.xml
文件作为 Axis2 配置。有关可为呼叫介体配置的阻塞传输相关参数的更多信息,请参阅配置 axis2_blocking_client.xml。
Endpoint Type
- None:如果不提供端点,请选择此选项。 Call 中介将使用其 wsa:to 地址发送消息。
- Define Inline:如果选择此项,则应将消息发送到的端点可以包含在呼叫中介器配置中。 单击添加以添加所需的端点。
- Pick From Registry:如果选择此项,则可以将消息发送到当前作为资源保存在注册表中的预定义端点。 单击相关的配置注册表或治理注册表以从资源树中选择所需的端点。
- XPath:如果选择此项,则消息应发送到的端点将通过 XPath 表达式派生。 需要在选择此选项时出现的文本字段中输入相关的 XPath 表达式。(如果要提供表达式,则可以单击 NameSpaces 添加命名空间。 然后将出现 Namespace Editor 面板,可以在其中提供 XPath 表达式中使用的任意数量的名称空间前缀和 URL。)
Blocking
- 如果设置为 true,则可以在阻塞模式下使用呼叫调解器。
十三、AddressEndpoint
地址端点是通过指定 EPR(端点参考)和配置的其他属性定义的端点。
(简单的来说就是 Call Mediator 接收消息的端点)
属性说明
Basic
- URI:目标端点的EPR。
- Format:端点的消息格式。
- Leave As-Is:如果选中此选项,则不会对传出消息进行任何转换。
- SOAP 1.1:如果选择此项,消息将转换为 SOAP 1.1。
- SOAP 1.2:如果选择此项,消息将转换为 SOAP 1.2。
- Plain Old XML (POX):如果选择此选项,消息将转换为纯旧 XML 格式。
- Representational State Transfer (REST) - 如果选择此项,消息将转换为 REST。
- GET:如果选择此项,消息将转换为 HTTP Get 请求。
- statistics enabled:这将启用端点的统计信息。
- trace enabled:这将启用端点的跟踪。
在 WSO2 ESB 5.0.0 中使用 SLF4J 日志框架
在 WSO2 ESB 5.0.0 中使用 MyBatis 框架