如何在mule4中设置headersqueryparams作为一个varibalepayload的事先?

问题描述 投票:0回答:1

在 mule4 的 RequestProcessor 中,我们设置了一些 hedaers 和 queryparams.eg: for headers。

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个回答
0
投票

你可以只发送对象而不是表达式。你可以用任何DataWeave表达式动态地生成那个对象。请注意,你原来的例子只是一个返回对象的DataWeave表达式,只不过它是硬编码在HTTP Request里面的。

例如,我会把一个对象分配给一个变量,然后用它作为头信息。

<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>

1
投票

不要直接使用http连接器。把它包装成单独的流或子流,并使用流引用到这个流。在这种情况下,它将只有一个http连接器,你可以在一个地方改变修改。

下面是一个例子--一个helloFlow通过引用一个SingleHttpRequestFlow向echoFlow和echo1Flow发出两个http请求。

SingleHttpRequestFlow是唯一一个发出http请求的地方。因此,如果需要更改头文件,则在一个地方完成。enter image description here

以下是代码

<?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>
© www.soinside.com 2019 - 2024. All rights reserved.