【问题标题】:How to set headers/queryparams in mule4 as a varibale/payload beforhand?如何预先将 mule 4 中的 headers/queryparams 设置为变量/payload?
【发布时间】:2020-05-12 01:17:45
【问题描述】:

在 RequestProcessor 的 mule4 中,我们设置了一些 hedaers 和 queryparams。 例如:对于标题;

output application/java
---
{
    "xXX- applicationid" : vars.'applicationid',
    "XX-username" : p('username'),
    "XXX-signature":vars.'signature'
}


            <http:request method="GET" doc:name="HTTP-Get"
                doc:id="ec8910c5-36fe-4367-9234-d459776ac8e3" config-ref="request_config"
                path="${auth.path}">
                <http:headers><![CDATA[#[output application/java ---
   {
        "xXX- applicationid" : vars.'applicationid',
        "XX-username" : p('username'),
        "XXX-signature":vars.'signature'
    }
]]]></http:headers>

            </http:request>

这很好用。但是以后,如果我们想添加另一个头参数,我们需要来这里编辑这个配置。我不想在这里做。。 我只想在这里将所有标题作为变量/组件传递..所以,我以后不需要编辑这个连接器。相反,我可以在那个变量/组件设置级别上做,我们可以重用这个连接器。

如何在 mule4 中执行此操作以获得更多可扩展/可管理的连接器?

【问题讨论】:

    标签: mule mule-studio mulesoft mule-esb


    【解决方案1】:

    不要直接使用 http 连接器。将其包装为单独的流或子流,并使用对此流的流引用。在这种情况下,它将只有一个 http 连接器,您可以在一处更改/修改。

    这里是示例 - 一个 helloFlow 通过引用一个 SingleHttpRequestFlow 向 echoFlow 和 echo1Flow 发出两个 http 请求。

    SingleHttpRequestFlow 是唯一一个发出 http 请求的地方。因此,如果需要更改标题,则在一个地方完成。

    这里是代码

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:wsc="http://www.mulesoft.org/schema/mule/wsc" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
    
     xmlns:http="http://www.mulesoft.org/schema/mule/http"
    
     xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
    http://www.mulesoft.org/schema/mule/wsc http://www.mulesoft.org/schema/mule/wsc/current/mule-wsc.xsd">
    
     <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="3cca14aa-10d5-465d-9ea3-523c3b927828" >
    
      <http:listener-connection host="0.0.0.0" port="8081" />
    
     </http:listener-config>
    
     <http:request-config name="HTTP_Request_configuration" doc:name="HTTP Request configuration" doc:id="2149cc85-f8a5-43c3-b940-b12ea0dc5934" >
    
      <http:request-connection host="localhost" port="8081" />
    
     </http:request-config>
        <sub-flow name="SingleHttpRequestFlow" doc:id="51814424-61c3-4abb-8548-dfd46605beaa" >
            <http:request method="GET" doc:name="Request" doc:id="344daf1e-248a-4bca-a829-1c00929d835d" url="#[vars.url]">
                <http:headers><![CDATA[#[output application/java
    ---
    {
        "Key" : "Value",
        "Key-1" : "Value-1"
    }]]]></http:headers>
            </http:request>
        </sub-flow>
        <flow name="echoFlow" doc:id="20f7749a-dd1f-43b9-a92f-ced0f17471ed" >
            <http:listener doc:name="Listener" doc:id="4c85f760-96fe-4072-af2a-f74bcd514d8b" config-ref="HTTP_Listener_config" path="/echo"/>
            <ee:transform doc:name="Transform Message" doc:id="e1942d41-468f-4b5c-9f78-d54f4a5876d8" >
                <ee:message >
                    <ee:set-payload ><![CDATA[%dw 2.0
    output application/json
    ---
    attributes.headers ++ attributes.queryParams]]></ee:set-payload>
                </ee:message>
            </ee:transform>
            <logger level="INFO" doc:name="Logger" doc:id="94eae8db-f453-4dc3-bbad-43f1fee47063" />
        </flow>
        <flow name="echo1Flow" doc:id="1d735acd-b39a-430d-aeed-1b113332a970" >
            <http:listener doc:name="Listener" doc:id="3e7ec930-7784-420e-b71a-cd8553524f42" config-ref="HTTP_Listener_config" path="/echo1"/>
            <ee:transform doc:name="Transform Message" doc:id="893f3c97-d8ed-43fe-95ef-d35175b88c5d" >
                <ee:message >
                    <ee:set-payload ><![CDATA[%dw 2.0
    output application/json
    ---
    attributes.headers ++ attributes.queryParams]]></ee:set-payload>
                </ee:message>
            </ee:transform>
            <logger level="INFO" doc:name="Logger" doc:id="929cd9a2-3b1d-4ddf-badc-ef38f88f10eb" />
        </flow>
        <flow name="helloFlow" doc:id="3f60bcae-83a5-46ce-8508-2a29bc787719" >
    
      <http:listener doc:name="Listener" doc:id="1faf3649-d661-45aa-b7a5-fc573029cba5" config-ref="HTTP_Listener_config" path="/test" allowedMethods="GET">
    
       <ee:repeatable-file-store-stream inMemorySize="1024" />
    
       <http:response reasonPhrase="Success" >
    
        <http:headers ><![CDATA[#[output application/java
    
    ---
    
    {
    
     name : "Max"
    
    }]]]></http:headers>
    
       </http:response>
    
    
    </http:listener>
            <ee:transform doc:name="echo" doc:id="b3c02cdc-25dd-4046-9519-c9cfc3db4373" >
                <ee:message >
                </ee:message>
                <ee:variables >
                    <ee:set-variable variableName="url" ><![CDATA[%dw 2.0
    output application/java
    ---
    'http://localhost:8081/echo?echo=one']]></ee:set-variable>
                </ee:variables>
            </ee:transform>
            <flow-ref doc:name="SingleHttpRequestFlow" doc:id="c66ea21d-361d-4ef1-8ca1-915798d07ddf" name="SingleHttpRequestFlow" />
            <logger level="INFO" doc:name="Logger" doc:id="08eeb07b-d209-40cf-82e8-50fa46fbf57f" message="#[payload]"/>
            <ee:transform doc:name="Transform Message" doc:id="6e7d212f-c57e-419a-a430-cc919082b945" >
                <ee:message >
                </ee:message>
                <ee:variables >
                    <ee:set-variable variableName="url" ><![CDATA[%dw 2.0
    output application/java
    ---
    'http://localhost:8081/echo1?echo=two']]></ee:set-variable>
                </ee:variables>
            </ee:transform>
            <flow-ref doc:name="SingleHttpRequestFlow" doc:id="74a29771-a876-4177-ac8a-7401af2051ee" name="SingleHttpRequestFlow"/>
            <logger level="INFO" doc:name="Logger" doc:id="7769318d-41da-4737-a72a-5f0b7bc43496" message="#[payload]"/>
    
    
    </flow>
    
    </mule>
    

    【讨论】:

    • 我没有得到这个,我用我的问题编辑了更多。如果涉及额外的 http 标头,我以后不想编辑我的 组件。宁愿将所有 heders 作为组件传递.. mule 是否有使用 处理器的选项?
    • 提供的例子。你想要一个地方来改变标题。你来了。
    【解决方案2】:

    您可以只发送对象而不是表达式。您可以使用任何 DataWeave 表达式动态生成该对象。请注意,您的原始示例只是一个返回对象的 DataWeave 表达式,只是它在 HTTP 请求中进行了硬编码。

    例如,我将一个对象分配给一个变量,然后将其用作标题。

    <set-variable variableName="myHeaders" value="#[output application/java --- { myHeader1:  'header1, myHeader2: 'header2' }]" />
    
    <http:request method="GET" doc:name="Request" config-ref="HTTP_Request_configuration" path="/headers">
       <http:headers ><![CDATA[#[output applicaton/java
         ---
         vars.myHeaders
       ]]]></http:headers>    
    </http:request>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多