从WSO2 ESB项目调用DSS服务调用时,这个头调解器的工作原理是什么?

时间:2017-03-29 11:09:46

标签: wso2 integration wso2esb wso2dss

我在 WSO2 中是新的,我有以下疑问。

我正在开发 ESB 项目。在 链中,有标题介体

var name string
row := db.Con().QueryRow("SELECT name FROM users WHERE id = 2;")
err := row.Scan(&name)

if err != nil && err != sql.ErrNoRows {
    // log the error
}

因为您可以看到 header 介体在 payloadFactory 介体之后被链接,构建了一条必须发送到 DSS的空消息服务。

标头介体:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/glisTest2" name="glisTest2" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <!-- Create empty message to get all samples from DSS -->
            <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 action related to the "FindNotProcessed" DSS service
                 used to retrieve all the unprocessed resource on the DB. 
             -->
            <header name="Action" scope="default" value="urn:FindNotProcessed"/>

               ...................................................................
               ...................................................................
               ...................................................................
        </inSequence>

添加标题,指定必须在 DSS 服务上调用的操作名称,此操作实际上名为 FindNotProcessed ,它与定义的查询相关联。

好的我的怀疑是:

1)属性的值指定必须在 DSS 服务上执行的操作的名称,在这种情况下,此值为瓮:FindNotProcessed 即可。

在要执行的操作名称之前放置的 urn:前缀究竟是什么意思?

2)标题介体定义还包含此属性 name =“Action”

究竟代表什么?它是否类似于中介名称或者必须在操作上设置值以获得某些语义含义?对于具有语义行为的字段,它只是一个名称还是存在一组可能的值?

3)因此,要调用 DSS 服务,方法是:使用 payloadFactory 介体创建一条消息,并使用标头链接它中介,指定必须在 DSS 服务上执行的操作的名称,然后链接执行该调用的标注中介。我这样做并且有效,这是标准的做法吗?

1 个答案:

答案 0 :(得分:1)

1) urn:FindNotProcessed 是SOAPAction名称,它在Web服务WSDL中定义。 urn:只是该名称的一部分,它看起来像命名空间,但事实并非如此。

2)通过设置 name =“Action”,您将告知您正在设置哪个HTTP标头。在这种情况下,它将设置 SOAPAction:urn:FindNotProcessed

3)确实如此,但您不仅可以使用标注,还可以使用发送调用调解器,具体取决于您的逻辑。