Merge arbitrary number of for each output payloads mulesoft
I'm trying to create a flow, that takes the URI params it got called with and uses them to call another flow (the number of times the other flow is called depends on the number of URI params).
<flow name="get:/test-config">
<set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>
<!-- Iterate over the keys to retrieve each params list -->
<foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">
<!-- Iterate over the params list for each key -->
<foreach collection="#[params.getAll(payload)]" doc:name="For Each">
<logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>
<set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>
<logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName=„Id" value="#[flowVars.Id]"/>
</http:request-builder>
</http:request>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"Id" : flowVars.Id,
"color" : payload.*color
} ]]>
</dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</foreach>
</flow>
The flow that gets called via the HTTP Request delivers data in JSON format:
"Id": "1",
"color": [
"blue",
"green"
]
"Id": "2",
"color": [
"yellow",
"blue"
]
"Id": "3"
...
"Id" : "4"
...
I'd like to filter and aggregate these outputs so the overall result looks like this:
"Ids": [
"1",
"2"
]
"commonColor": [
"blue"
]
And at this point I'm kinda stuck as the number of data sets to merge varies and I also don't quite know how to access and compare the fields of the payload to find items with matching colors, as the payload changes with every iteration. One idea I came across was to save / append the current payload in a variable to save it for further processing, but all examples just worked with 2 or a maximum of three payloads, whereas I'm confronted with an arbitrary amount of possible payloads (and the position / number of colors also varies...).
Any ideas / help on how this problem could be solved would be very appreciated!
PS: I also came across Scatter / Gather, but I'm not quite sure if it's suitable in this case, as I don't know the number of calls / intermediary results beforehand...
mule mule-component dataweave
add a comment |
I'm trying to create a flow, that takes the URI params it got called with and uses them to call another flow (the number of times the other flow is called depends on the number of URI params).
<flow name="get:/test-config">
<set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>
<!-- Iterate over the keys to retrieve each params list -->
<foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">
<!-- Iterate over the params list for each key -->
<foreach collection="#[params.getAll(payload)]" doc:name="For Each">
<logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>
<set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>
<logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName=„Id" value="#[flowVars.Id]"/>
</http:request-builder>
</http:request>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"Id" : flowVars.Id,
"color" : payload.*color
} ]]>
</dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</foreach>
</flow>
The flow that gets called via the HTTP Request delivers data in JSON format:
"Id": "1",
"color": [
"blue",
"green"
]
"Id": "2",
"color": [
"yellow",
"blue"
]
"Id": "3"
...
"Id" : "4"
...
I'd like to filter and aggregate these outputs so the overall result looks like this:
"Ids": [
"1",
"2"
]
"commonColor": [
"blue"
]
And at this point I'm kinda stuck as the number of data sets to merge varies and I also don't quite know how to access and compare the fields of the payload to find items with matching colors, as the payload changes with every iteration. One idea I came across was to save / append the current payload in a variable to save it for further processing, but all examples just worked with 2 or a maximum of three payloads, whereas I'm confronted with an arbitrary amount of possible payloads (and the position / number of colors also varies...).
Any ideas / help on how this problem could be solved would be very appreciated!
PS: I also came across Scatter / Gather, but I'm not quite sure if it's suitable in this case, as I don't know the number of calls / intermediary results beforehand...
mule mule-component dataweave
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27
add a comment |
I'm trying to create a flow, that takes the URI params it got called with and uses them to call another flow (the number of times the other flow is called depends on the number of URI params).
<flow name="get:/test-config">
<set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>
<!-- Iterate over the keys to retrieve each params list -->
<foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">
<!-- Iterate over the params list for each key -->
<foreach collection="#[params.getAll(payload)]" doc:name="For Each">
<logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>
<set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>
<logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName=„Id" value="#[flowVars.Id]"/>
</http:request-builder>
</http:request>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"Id" : flowVars.Id,
"color" : payload.*color
} ]]>
</dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</foreach>
</flow>
The flow that gets called via the HTTP Request delivers data in JSON format:
"Id": "1",
"color": [
"blue",
"green"
]
"Id": "2",
"color": [
"yellow",
"blue"
]
"Id": "3"
...
"Id" : "4"
...
I'd like to filter and aggregate these outputs so the overall result looks like this:
"Ids": [
"1",
"2"
]
"commonColor": [
"blue"
]
And at this point I'm kinda stuck as the number of data sets to merge varies and I also don't quite know how to access and compare the fields of the payload to find items with matching colors, as the payload changes with every iteration. One idea I came across was to save / append the current payload in a variable to save it for further processing, but all examples just worked with 2 or a maximum of three payloads, whereas I'm confronted with an arbitrary amount of possible payloads (and the position / number of colors also varies...).
Any ideas / help on how this problem could be solved would be very appreciated!
PS: I also came across Scatter / Gather, but I'm not quite sure if it's suitable in this case, as I don't know the number of calls / intermediary results beforehand...
mule mule-component dataweave
I'm trying to create a flow, that takes the URI params it got called with and uses them to call another flow (the number of times the other flow is called depends on the number of URI params).
<flow name="get:/test-config">
<set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>
<!-- Iterate over the keys to retrieve each params list -->
<foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">
<!-- Iterate over the params list for each key -->
<foreach collection="#[params.getAll(payload)]" doc:name="For Each">
<logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>
<set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>
<logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName=„Id" value="#[flowVars.Id]"/>
</http:request-builder>
</http:request>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"Id" : flowVars.Id,
"color" : payload.*color
} ]]>
</dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</foreach>
</flow>
The flow that gets called via the HTTP Request delivers data in JSON format:
"Id": "1",
"color": [
"blue",
"green"
]
"Id": "2",
"color": [
"yellow",
"blue"
]
"Id": "3"
...
"Id" : "4"
...
I'd like to filter and aggregate these outputs so the overall result looks like this:
"Ids": [
"1",
"2"
]
"commonColor": [
"blue"
]
And at this point I'm kinda stuck as the number of data sets to merge varies and I also don't quite know how to access and compare the fields of the payload to find items with matching colors, as the payload changes with every iteration. One idea I came across was to save / append the current payload in a variable to save it for further processing, but all examples just worked with 2 or a maximum of three payloads, whereas I'm confronted with an arbitrary amount of possible payloads (and the position / number of colors also varies...).
Any ideas / help on how this problem could be solved would be very appreciated!
PS: I also came across Scatter / Gather, but I'm not quite sure if it's suitable in this case, as I don't know the number of calls / intermediary results beforehand...
mule mule-component dataweave
mule mule-component dataweave
asked Nov 20 at 22:09
Charlie28000
373
373
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27
add a comment |
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402345%2fmerge-arbitrary-number-of-for-each-output-payloads-mulesoft%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402345%2fmerge-arbitrary-number-of-for-each-output-payloads-mulesoft%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Please add more detail about what should be the expected output. You show an incomplete example and suggested there are many variations. Which ids are selected? Are the colors only the ones that appear in all responses from the HTTP request?
– Alejandro Dobniewski
Nov 20 at 23:27