



右键单击api文件夹,添加一个REST API


打开 api 的 xml 文件,单击 Resource,在属性把 Post 设为 true,这个是设置可以接收 http 方法。
属性中介器对消息没有直接影响,而是对流经 Synapse 的消息上下文产生影响。 可以通过 Synapse XPath 变量或 get-property() 扩展函数检索消息上设置的属性。 一个属性可以有一个定义的有效范围。 如果属性没有定义的范围,则默认为 Synapse 消息上下文范围。 使用指定为 remove 的操作的属性元素,可以删除任何现有的消息上下文属性。

Property Action
Value Type
Property Data Type

多层解析:json-eval($.a.b.c)
多层解析://a//b//c


<property expression="$trp:usercode" name="usercode" scope="default" type="STRING"/>
<property expression="$trp:password" name="password" scope="default" type="STRING"/>
类中介器创建自定义指定类的实例并将其设置为中介器。 该类必须实现 org.apache.synapse.api.Mediator 接口。 如果指定了任何属性,则在初始化期间在类上调用一次相应的 setter 方法。
仅当没有已提供所需功能的内置介体时,才将类介体用于特定于用户的自定义开发。 维护自定义类会产生很高的开销。 因此避免使用它们,除非场景经常重复使用并且非常特定于用户。






类中设置的 get、set 的属性名必须和上面设置的 Property Name 一致。

此处返回的是 xml 格式,则在 PayloadFactory 的 get-property 设置的应该是 xml 格式。
PayloadFactory Mediator 转换或替换消息的内容。 中介器配置中的每个参数都可以是静态值,或者可以指定 XPath 或 JSON 表达式以通过针对现有 SOAP 消息评估提供的表达式来在运行时获取值。 可以配置请求或响应的格式并将其映射到提供的参数。

Media Type
Payload Format
返回JSON数据,Payload为:{“ESB”:$1}

Class 中介器返回的必须是 json 才能使用此表达式
在Value中指定参数返回值的表达式。
返回全部值:$.
返回esb的temp的值:$.esb.temp

返回xml数据,Payload为:$1

此处的 get-property(‘resp’) 的参数名必须和在 Class 在返回的 Property 一致!!!

XML

JSON



响应中介器停止对当前消息的处理并将消息作为响应发送回客户端。







第一次运行可能会发布不成功,重新Redeploy一下



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("");
//resultss.append(" ");
String sss = "S " + 12 + "";
//JSONObject j = XML.toJSONObject(sss);
System.out.println("result: " + sss);
context.setProperty("response", sss);
return true;
}
}
<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;
}
}
<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用于将消息从 ESB 发送到端点。可以以阻塞或非阻塞方式调用服务。
当以非阻塞模式调用服务时,底层工作线程无需等待响应即可返回。在阻塞模式下,底层工作线程被阻塞并在向端点发送请求后等待响应。阻塞模式下的调用中介器与 Callout 中介器非常相似。
在阻塞和非阻塞模式下,Call 中介器都以同步方式运行。因此,中介在服务调用后暂停,并在收到响应时从序列中的下一个中介恢复。调用中介器允许创建独立于底层架构的配置。
Call 中介器的非阻塞模式利用非阻塞传输来获得更好的性能。因此,建议尽量在非阻塞模式下使用。但是,有些场景需要使用阻塞模式。例如,当实现与 JMS 事务相关的场景时,以阻塞模式使用底层线程至关重要。
在阻塞模式下,Call mediator 使用 文件作为 Axis2 配置。有关可为呼叫介体配置的阻塞传输相关参数的更多信息,请参阅配置 axis2_blocking_client.xml。
Endpoint Type
Blocking
地址端点是通过指定 EPR(端点参考)和配置的其他属性定义的端点。
(简单的来说就是 Call Mediator 接收消息的端点)
属性说明
Basic



Data Mapper 中介器是一种可以集成到中介序列中的数据映射解决方案。它将一种数据格式转换并转换为另一种数据格式,或更改消息中数据的结构。它提供了一个基于 WSO2 Developer Studio 的工具来创建图形映射配置,并生成 WSO2 Data Mapper 引擎执行此图形映射配置所需的文件。
WSO2 数据映射器是一个独立的组件,不依赖于任何其他 WSO2 产品。但是,其他产品可以使用 Data Mapper 来实现/提供数据映射功能。 Data Mapper Mediator 是中间组件,它提供了到 WSO2 ESB 的数据映射能力。
数据映射器介体从注册表中查找配置文件,并使用输入消息类型 (XML/JSON/CSV) 和输出消息类型 (XML/JSON/CSV) 配置数据映射引擎。然后它从 WSO2 ESB 消息流中获取请求消息,并使用配置的数据映射引擎执行转换并将输出消息添加到 ESB 消息流。


本例演示JSON转XML
输入JSON
{
"esb":{
"args1":"aaaaaaaaaaa",
"args2":{
"bbb":"bbbbbbbbbbb"
}
}
}
输出XML
<esb>
<args1>aaaaaaaaaaaargs1>
<args2>
<bbb>bbbbbbbbbbbbbb>
args2>
esb>
保存为文件
右键单击,选择Load Input

Output选择xml
导入之前保存的文件
把箭头拉线接上,即可完成JSON转XML

最后记得把Configuration添加到项目
日志中介器用于记录中介消息。
Log Category:
以下日志级别对应于 ESB 服务级别日志。
TRACE - 这指定了比 DEBUG 更细粒度的信息事件。
DEBUG - 这指定了对调试应用程序最有用的细粒度信息事件。
INFO - 这指定了在粗粒度级别突出显示应用程序进度的信息性消息。
WARN - 这表示潜在的有害情况。
ERROR - 这指定了可能仍允许应用程序继续运行的错误事件。
FATAL - 这表示可能会导致应用程序中止的非常严重的错误事件。
Log Level:
Full:如果选择此选项,将记录在简单级别记录的所有标准标题以及消息的完整有效负载。 此日志级别会导致解析消息内容,从而导致性能开销。
Simple:如果选择此项,将记录标准头(即 To、From、WSAction、SOAPAction、Reply To 和 MessageID)。
Headers头:如果选中此选项,则会记录所有 SOAP 标头块。
Custom:如果选择此项,则只会记录添加到日志介体配置的属性。
Log Separator:此参数用于指定要在日志中用于分隔属性的值。 , 逗号是默认值。