在 WSO2 ESB 项目中,这个与 header 中介链接的 payloadFactory 到底是如何工作的?
How exactly works this payloadFactory chained with an header mediator in a WSO2 ESB project?
我绝对是 WSO2 的新手,我正在开发一个 WSO2 Enterprise Integrator 项目,其中包含这个 ESB 项目部分(我认为我的问题只与 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>
<!--
Adding an header that defines the actionr related to the "FindNotProcessed" DSS service
used to retrieve all the unprocessed resource on the DB
-->
<header name="Action" scope="default" value="urn:FindNotProcessed"/>
<!-- Log the request generated by the previous payloadFactory mediator: -->
<log level="full"/>
...............................................................
...............................................................
...............................................................
</api>
我的疑问是:这个 payloadFactory 中介生成 空消息 因为它的内容是:
<format>
<body/>
</format>
链中的下一个元素是 header 中介:
<header name="Action" scope="default" value="urn:FindNotProcessed"/>
用于设置具有 name="Action" 的新 header 指定(作为值)DSS[ 的名称=57=]服务从数据库中获取一些数据。
最后,链中的下一个元素是日志中介。在我看来,它用于记录由先前的 payloadFactory 中介与以下 header 连接生成的消息调解员。
This log mediator generate this log:
TID: [-1234] [] [2017-03-28 10:05:30,943] INFO {org.apache.synapse.mediators.builtin.LogMediator} -
To: /glisTest2, WSAction: urn:FindNotProcessed, SOAPAction: urn:FindNotProcessed, MessageID: urn:uuid:95913219-2ad1-4488-a260-78693f3bbde2, Direction: request,
Envelope:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<body xmlns="http://ws.apache.org/ns/synapse"/>
</soapenv:Body>
</soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
我的疑惑是:
1) 为什么它会生成嵌入 soapenv 结构的 XML 消息?
2) 这取决于 header 中介器定义 scope="default" 应该与 Synapse 重合。因为看了官方文档:
https://docs.wso2.com/display/ESB481/Header+Mediator
它说:
Scope: Select Synapse if you want to manipulate SOAP headers. Select
Transport if you want to manipulate HTTP headers.
所以我认为以这种方式设置会生成 SOAP 消息,这是因为我的消息进入 soapenv 结构的原因。
是我遗漏了什么吗?
默认情况下,WSO2 EI/ESB中的所有消息都将被视为 SOAP 消息,这就是为什么您的有效负载包含在 soap 信封中的原因。
Headers 实际上在您将消息发送到端点时起作用,因此如果您有端点 http://hostname:port/abc/xyz ,消息的操作(Soap Action)将被设置作为 urn:FindNotProcessed。这意味着消息将转到端点的 urn:FindNotProcessed 操作,前提是端点是 soap 端点。
谢谢
我绝对是 WSO2 的新手,我正在开发一个 WSO2 Enterprise Integrator 项目,其中包含这个 ESB 项目部分(我认为我的问题只与 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>
<!--
Adding an header that defines the actionr related to the "FindNotProcessed" DSS service
used to retrieve all the unprocessed resource on the DB
-->
<header name="Action" scope="default" value="urn:FindNotProcessed"/>
<!-- Log the request generated by the previous payloadFactory mediator: -->
<log level="full"/>
...............................................................
...............................................................
...............................................................
</api>
我的疑问是:这个 payloadFactory 中介生成 空消息 因为它的内容是:
<format>
<body/>
</format>
链中的下一个元素是 header 中介:
<header name="Action" scope="default" value="urn:FindNotProcessed"/>
用于设置具有 name="Action" 的新 header 指定(作为值)DSS[ 的名称=57=]服务从数据库中获取一些数据。
最后,链中的下一个元素是日志中介。在我看来,它用于记录由先前的 payloadFactory 中介与以下 header 连接生成的消息调解员。
This log mediator generate this log:
TID: [-1234] [] [2017-03-28 10:05:30,943] INFO {org.apache.synapse.mediators.builtin.LogMediator} -
To: /glisTest2, WSAction: urn:FindNotProcessed, SOAPAction: urn:FindNotProcessed, MessageID: urn:uuid:95913219-2ad1-4488-a260-78693f3bbde2, Direction: request,
Envelope:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<body xmlns="http://ws.apache.org/ns/synapse"/>
</soapenv:Body>
</soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
我的疑惑是:
1) 为什么它会生成嵌入 soapenv 结构的 XML 消息?
2) 这取决于 header 中介器定义 scope="default" 应该与 Synapse 重合。因为看了官方文档: https://docs.wso2.com/display/ESB481/Header+Mediator
它说:
Scope: Select Synapse if you want to manipulate SOAP headers. Select Transport if you want to manipulate HTTP headers.
所以我认为以这种方式设置会生成 SOAP 消息,这是因为我的消息进入 soapenv 结构的原因。
是我遗漏了什么吗?
默认情况下,WSO2 EI/ESB中的所有消息都将被视为 SOAP 消息,这就是为什么您的有效负载包含在 soap 信封中的原因。
Headers 实际上在您将消息发送到端点时起作用,因此如果您有端点 http://hostname:port/abc/xyz ,消息的操作(Soap Action)将被设置作为 urn:FindNotProcessed。这意味着消息将转到端点的 urn:FindNotProcessed 操作,前提是端点是 soap 端点。
谢谢