How to declare reusable transformer in XML without 'input-channel'?
In my application I would like to re-use the same message transformer inside of multiple <int:chain>
.
In such chains I perform http requests to different endpoints and I need to add the same basic authentication header. I would like to declare the code for adding a header only once, i.e:
<int:header-enricher id="authHeaderAdder">
<int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
name="Authorization"/>
</int:header-enricher>
And then I would like to use it with ref
in my chain before making http request:
<int:chain input-channel="someHttpChain">
<int:transformer ref="authHeaderAdder"/>
<http:outbound-gateway.../>
<int:transformer ref="someResponseTransformer"/>
</int:chain>
The problem is that I get an error on application startup:
Configuration problem: The 'input-channel' attribute is required for the top-level endpoint element: 'int:header-enricher' with id='authHeaderAdder'
How can I re-use authHeaderAdder
without writing any java code and making a <bean/>
?
spring-integration
add a comment |
In my application I would like to re-use the same message transformer inside of multiple <int:chain>
.
In such chains I perform http requests to different endpoints and I need to add the same basic authentication header. I would like to declare the code for adding a header only once, i.e:
<int:header-enricher id="authHeaderAdder">
<int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
name="Authorization"/>
</int:header-enricher>
And then I would like to use it with ref
in my chain before making http request:
<int:chain input-channel="someHttpChain">
<int:transformer ref="authHeaderAdder"/>
<http:outbound-gateway.../>
<int:transformer ref="someResponseTransformer"/>
</int:chain>
The problem is that I get an error on application startup:
Configuration problem: The 'input-channel' attribute is required for the top-level endpoint element: 'int:header-enricher' with id='authHeaderAdder'
How can I re-use authHeaderAdder
without writing any java code and making a <bean/>
?
spring-integration
add a comment |
In my application I would like to re-use the same message transformer inside of multiple <int:chain>
.
In such chains I perform http requests to different endpoints and I need to add the same basic authentication header. I would like to declare the code for adding a header only once, i.e:
<int:header-enricher id="authHeaderAdder">
<int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
name="Authorization"/>
</int:header-enricher>
And then I would like to use it with ref
in my chain before making http request:
<int:chain input-channel="someHttpChain">
<int:transformer ref="authHeaderAdder"/>
<http:outbound-gateway.../>
<int:transformer ref="someResponseTransformer"/>
</int:chain>
The problem is that I get an error on application startup:
Configuration problem: The 'input-channel' attribute is required for the top-level endpoint element: 'int:header-enricher' with id='authHeaderAdder'
How can I re-use authHeaderAdder
without writing any java code and making a <bean/>
?
spring-integration
In my application I would like to re-use the same message transformer inside of multiple <int:chain>
.
In such chains I perform http requests to different endpoints and I need to add the same basic authentication header. I would like to declare the code for adding a header only once, i.e:
<int:header-enricher id="authHeaderAdder">
<int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
name="Authorization"/>
</int:header-enricher>
And then I would like to use it with ref
in my chain before making http request:
<int:chain input-channel="someHttpChain">
<int:transformer ref="authHeaderAdder"/>
<http:outbound-gateway.../>
<int:transformer ref="someResponseTransformer"/>
</int:chain>
The problem is that I get an error on application startup:
Configuration problem: The 'input-channel' attribute is required for the top-level endpoint element: 'int:header-enricher' with id='authHeaderAdder'
How can I re-use authHeaderAdder
without writing any java code and making a <bean/>
?
spring-integration
spring-integration
edited Nov 21 '18 at 12:45
B001ᛦ
1,14251320
1,14251320
asked Nov 21 '18 at 12:43
DerpDerp
1,04511324
1,04511324
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You definitely need to use an input-channel
on that <int:header-enricher>
, e.g. input-channel="authChannel"
but inside the <chain>
you get a gain to use something like <int:gateway request-channel="authChannel"/>
. That's all: you are reusing the same transformer, but via the Spring Integration trick with the MessageChannel
.
Such an approach is cool the way that you can add more endpoint in that authChannel
flow without any changes in the original flow where you use that gateway
.
Also, even if you declare the enricher handler as a<bean/>
instead, it can't be reused in multiple chains because the enricher only has oneoutputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.
– Gary Russell
Nov 21 '18 at 14:35
add a comment |
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%2f53412303%2fhow-to-declare-reusable-transformer-in-xml-without-input-channel%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You definitely need to use an input-channel
on that <int:header-enricher>
, e.g. input-channel="authChannel"
but inside the <chain>
you get a gain to use something like <int:gateway request-channel="authChannel"/>
. That's all: you are reusing the same transformer, but via the Spring Integration trick with the MessageChannel
.
Such an approach is cool the way that you can add more endpoint in that authChannel
flow without any changes in the original flow where you use that gateway
.
Also, even if you declare the enricher handler as a<bean/>
instead, it can't be reused in multiple chains because the enricher only has oneoutputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.
– Gary Russell
Nov 21 '18 at 14:35
add a comment |
You definitely need to use an input-channel
on that <int:header-enricher>
, e.g. input-channel="authChannel"
but inside the <chain>
you get a gain to use something like <int:gateway request-channel="authChannel"/>
. That's all: you are reusing the same transformer, but via the Spring Integration trick with the MessageChannel
.
Such an approach is cool the way that you can add more endpoint in that authChannel
flow without any changes in the original flow where you use that gateway
.
Also, even if you declare the enricher handler as a<bean/>
instead, it can't be reused in multiple chains because the enricher only has oneoutputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.
– Gary Russell
Nov 21 '18 at 14:35
add a comment |
You definitely need to use an input-channel
on that <int:header-enricher>
, e.g. input-channel="authChannel"
but inside the <chain>
you get a gain to use something like <int:gateway request-channel="authChannel"/>
. That's all: you are reusing the same transformer, but via the Spring Integration trick with the MessageChannel
.
Such an approach is cool the way that you can add more endpoint in that authChannel
flow without any changes in the original flow where you use that gateway
.
You definitely need to use an input-channel
on that <int:header-enricher>
, e.g. input-channel="authChannel"
but inside the <chain>
you get a gain to use something like <int:gateway request-channel="authChannel"/>
. That's all: you are reusing the same transformer, but via the Spring Integration trick with the MessageChannel
.
Such an approach is cool the way that you can add more endpoint in that authChannel
flow without any changes in the original flow where you use that gateway
.
answered Nov 21 '18 at 14:02
Artem BilanArtem Bilan
65.3k84668
65.3k84668
Also, even if you declare the enricher handler as a<bean/>
instead, it can't be reused in multiple chains because the enricher only has oneoutputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.
– Gary Russell
Nov 21 '18 at 14:35
add a comment |
Also, even if you declare the enricher handler as a<bean/>
instead, it can't be reused in multiple chains because the enricher only has oneoutputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.
– Gary Russell
Nov 21 '18 at 14:35
Also, even if you declare the enricher handler as a
<bean/>
instead, it can't be reused in multiple chains because the enricher only has one outputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.– Gary Russell
Nov 21 '18 at 14:35
Also, even if you declare the enricher handler as a
<bean/>
instead, it can't be reused in multiple chains because the enricher only has one outputChannel
the framework prevents referencing the same handler in multiple places for exactly this reason.– Gary Russell
Nov 21 '18 at 14:35
add a comment |
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.
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%2f53412303%2fhow-to-declare-reusable-transformer-in-xml-without-input-channel%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