这个 payloadFactory 调解器到底在做什么?

What is exactly doing this payloadFactory mediator?

我绝对是 WSO2 的新手,我正在开发一个包含此 ESB 项目部分 的 WSO2 Enterprise Integrator 项目(我认为我的问题只与 ESB).

有关

所以我的疑问是:我有一个 XML 文件定义了一个 API。流程以 payloadFactory 中介开始,类似这样:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/xxxTest2" name="xxxTest2" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <!--  Create empty message to get all samples from DSS -->
            <!-- Get Sample ID -->
            <payloadFactory media-type="xml">
                <format>
                    <body/>
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('uri.var.int_val')" xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd"/>
                </args>
            </payloadFactory>
            ...............................................................
            ...............................................................
            ...............................................................
</api>

这个 API 处理我可以使用 CURL 发送的请求:

curl -v http://MY_SERVER_IP:8280/xxxTest2

阅读官方文档:

https://docs.wso2.com/display/ESB481/PayloadFactory+Mediator

我知道有效负载工厂用于创建必须使用发送 HTTP 请求的东西发送的内容消息(如果这是一个错误的断言,请纠正我)。

我的疑问是:

此消息的内容为空,因为它是:

<format>
    <body/>
</format>

但是它包含定义到 args 元素中的这个参数:

<args>
    <arg evaluator="xml" expression="get-property('uri.var.int_val')" xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd"/>
</args>

所以我有2个疑问:

1) 阅读之前的文档,此参数应包含之前有效负载内容中的 $1 变量的内容值(... 元素)。但它是空的。它不包含任何变量。那么为什么我发现这个论点?

2) 参数的值用表达式检索:

expression="get-property('uri.var.int_val')"

这个表达式到底是什么意思?什么是检索?

要将参数传递给 Payload 工厂调解器,您必须在该部分中声明它。

假设您正在将一个参数 'name' 传递给有效载荷工厂调解器,您的源应该类似于

<payloadFactory media-type="xml" xmlns="http://ws.apache.org/ns/synapse">
<format>
    <name_of_the_element xmlns=""></name_of_the_element>
</format>
<args>
    <arg evaluator="xml"
        expression="get-property('uri.var.int_val')" literal="false"/>
</args>

这里,uri.var.int_val的值将传递给元素$1。 PAyload 工厂中介使用位置参数作为其参数,即 $1,$2,....$N.

  1. 如果您创建的有效负载中没有参数,您可以删除源中的部分。因此,如果您的有效负载只是 ,那么您的源将类似于
 <payloadFactory media-type="xml">
                <format>
                    <body/>
                </format>
     </payloadFactory>
  1. 表达式expression="get-property('uri.var.int_val')"从URI参数中提取int_val的值。 谢谢