【问题标题】:How exactly works this payloadFactory chained with an header mediator in a WSO2 ESB project?与 WSO2 ESB 项目中的标头调解器链接的这个 payloadFactory 究竟是如何工作的?
【发布时间】:2017-08-21 07:41:28
【问题描述】:

我是 WSO2 的新手,我正在开发一个包含此 ESB 项目部分的 WSO2 Enterprise Integrator 项目(我认为我的问题仅与 ESB 有关)。

所以我的疑问是:我有一个定义 API 的 XML 文件。流程从 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 name="Action" scope="default" value="urn:FindNotProcessed"/>

用于设置具有 name="Action" 的新标头,该标头指定(作为值)DSS 服务的名称以从数据库中获取一些数据。

最后,链中的下一个元素是日志中介。在我看来,它用于记录由前一个 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:如果要操作 SOAP 标头,请选择 Synapse。选择 如果要操作 HTTP 标头,请传输。

所以我认为以这种方式设置会生成 SOAP 消息,原因是因为我的消息进入了 soapenv 结构。

是不是我错过了什么?

【问题讨论】:

    标签: soap wso2 integration wso2esb


    【解决方案1】:
    1. 默认情况下,WSO2 EI/ESB 中的所有消息都将被视为 SOAP 消息,这就是您的有效负载包含在肥皂信封中的原因。

    2. 当您将消息发送到端点时,标头实际上会起作用,因此如果您有端点 http://hostname:port/abc/xyz ,则消息的 Action(Soap Action)将设置为 urn:FindNotProcessed。这意味着消息将转到端点的 urn:FindNotProcessed 操作,前提是端点是soap端点。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2016-08-07
      • 2014-12-16
      • 2017-06-03
      • 2016-11-30
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多