Spring Integration Java DSL and Http.outboundGateway: How to get the real error message JSON
How to get the real error message JSON when the Http.outboundGateway
call is failed.
For example my program does the HTTP POST
. The operation fails with the error code 400 Bad Request
and the real error message is (tested with the Postman):
{
"name": [
"This field is needed."
]
}
I have the error channel like this:
@Bean
private IntegrationFlow myErrorChannel() {
return f -> f.handle("myErrorHandler", "handle")
....
;
}
and the Class MyErrorHandler
is like this:
@Service
public class MyErrorHandler {
@ServiceActivator
public Message<MessageHandlingException> handle(Message<MessageHandlingException> message) {
...
}
}
Does the MessageHandlingException
contain the real error message?
{
"name": [
"This field is needed."
]
}
I debugged the code and checked the MessageHandlingException
exception and it seems it doesn't contain the real error message. The detailMessage contains the text 400 Bad Request
, but I want to know the real error message.
How to get the real error message?
Edit:
This is working (I'm assigning the real error message to the new payload):
final RestClientResponseException clientException = (RestClientResponseException) messagingHandlingException.getCause();
payload = clientException.getResponseBodyAsString();
spring-integration spring-integration-dsl
add a comment |
How to get the real error message JSON when the Http.outboundGateway
call is failed.
For example my program does the HTTP POST
. The operation fails with the error code 400 Bad Request
and the real error message is (tested with the Postman):
{
"name": [
"This field is needed."
]
}
I have the error channel like this:
@Bean
private IntegrationFlow myErrorChannel() {
return f -> f.handle("myErrorHandler", "handle")
....
;
}
and the Class MyErrorHandler
is like this:
@Service
public class MyErrorHandler {
@ServiceActivator
public Message<MessageHandlingException> handle(Message<MessageHandlingException> message) {
...
}
}
Does the MessageHandlingException
contain the real error message?
{
"name": [
"This field is needed."
]
}
I debugged the code and checked the MessageHandlingException
exception and it seems it doesn't contain the real error message. The detailMessage contains the text 400 Bad Request
, but I want to know the real error message.
How to get the real error message?
Edit:
This is working (I'm assigning the real error message to the new payload):
final RestClientResponseException clientException = (RestClientResponseException) messagingHandlingException.getCause();
payload = clientException.getResponseBodyAsString();
spring-integration spring-integration-dsl
add a comment |
How to get the real error message JSON when the Http.outboundGateway
call is failed.
For example my program does the HTTP POST
. The operation fails with the error code 400 Bad Request
and the real error message is (tested with the Postman):
{
"name": [
"This field is needed."
]
}
I have the error channel like this:
@Bean
private IntegrationFlow myErrorChannel() {
return f -> f.handle("myErrorHandler", "handle")
....
;
}
and the Class MyErrorHandler
is like this:
@Service
public class MyErrorHandler {
@ServiceActivator
public Message<MessageHandlingException> handle(Message<MessageHandlingException> message) {
...
}
}
Does the MessageHandlingException
contain the real error message?
{
"name": [
"This field is needed."
]
}
I debugged the code and checked the MessageHandlingException
exception and it seems it doesn't contain the real error message. The detailMessage contains the text 400 Bad Request
, but I want to know the real error message.
How to get the real error message?
Edit:
This is working (I'm assigning the real error message to the new payload):
final RestClientResponseException clientException = (RestClientResponseException) messagingHandlingException.getCause();
payload = clientException.getResponseBodyAsString();
spring-integration spring-integration-dsl
How to get the real error message JSON when the Http.outboundGateway
call is failed.
For example my program does the HTTP POST
. The operation fails with the error code 400 Bad Request
and the real error message is (tested with the Postman):
{
"name": [
"This field is needed."
]
}
I have the error channel like this:
@Bean
private IntegrationFlow myErrorChannel() {
return f -> f.handle("myErrorHandler", "handle")
....
;
}
and the Class MyErrorHandler
is like this:
@Service
public class MyErrorHandler {
@ServiceActivator
public Message<MessageHandlingException> handle(Message<MessageHandlingException> message) {
...
}
}
Does the MessageHandlingException
contain the real error message?
{
"name": [
"This field is needed."
]
}
I debugged the code and checked the MessageHandlingException
exception and it seems it doesn't contain the real error message. The detailMessage contains the text 400 Bad Request
, but I want to know the real error message.
How to get the real error message?
Edit:
This is working (I'm assigning the real error message to the new payload):
final RestClientResponseException clientException = (RestClientResponseException) messagingHandlingException.getCause();
payload = clientException.getResponseBodyAsString();
spring-integration spring-integration-dsl
spring-integration spring-integration-dsl
edited Nov 28 '18 at 12:42
Mike
asked Nov 21 '18 at 11:00
MikeMike
4111
4111
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The Resttemplate
uses a DefaultResponseErrorHandler
by default. That one has a logic like:
protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException {
String statusText = response.getStatusText();
HttpHeaders headers = response.getHeaders();
byte body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
An exception from here is thrown to the HttpRequestExecutingMessageHandler
which really wraps it into the MessageHandlingException
.
Since you say that you can handle the last one via your MyErrorHandler
, I would suggest you just take a look into the cause
of the MessageHandlingException
, and you'll that RestClientResponseException
with all the required info from the response.
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on theRestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
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%2f53410674%2fspring-integration-java-dsl-and-http-outboundgateway-how-to-get-the-real-error%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
The Resttemplate
uses a DefaultResponseErrorHandler
by default. That one has a logic like:
protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException {
String statusText = response.getStatusText();
HttpHeaders headers = response.getHeaders();
byte body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
An exception from here is thrown to the HttpRequestExecutingMessageHandler
which really wraps it into the MessageHandlingException
.
Since you say that you can handle the last one via your MyErrorHandler
, I would suggest you just take a look into the cause
of the MessageHandlingException
, and you'll that RestClientResponseException
with all the required info from the response.
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on theRestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
add a comment |
The Resttemplate
uses a DefaultResponseErrorHandler
by default. That one has a logic like:
protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException {
String statusText = response.getStatusText();
HttpHeaders headers = response.getHeaders();
byte body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
An exception from here is thrown to the HttpRequestExecutingMessageHandler
which really wraps it into the MessageHandlingException
.
Since you say that you can handle the last one via your MyErrorHandler
, I would suggest you just take a look into the cause
of the MessageHandlingException
, and you'll that RestClientResponseException
with all the required info from the response.
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on theRestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
add a comment |
The Resttemplate
uses a DefaultResponseErrorHandler
by default. That one has a logic like:
protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException {
String statusText = response.getStatusText();
HttpHeaders headers = response.getHeaders();
byte body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
An exception from here is thrown to the HttpRequestExecutingMessageHandler
which really wraps it into the MessageHandlingException
.
Since you say that you can handle the last one via your MyErrorHandler
, I would suggest you just take a look into the cause
of the MessageHandlingException
, and you'll that RestClientResponseException
with all the required info from the response.
The Resttemplate
uses a DefaultResponseErrorHandler
by default. That one has a logic like:
protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException {
String statusText = response.getStatusText();
HttpHeaders headers = response.getHeaders();
byte body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
An exception from here is thrown to the HttpRequestExecutingMessageHandler
which really wraps it into the MessageHandlingException
.
Since you say that you can handle the last one via your MyErrorHandler
, I would suggest you just take a look into the cause
of the MessageHandlingException
, and you'll that RestClientResponseException
with all the required info from the response.
answered Nov 21 '18 at 14:13
Artem BilanArtem Bilan
67.5k84973
67.5k84973
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on theRestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
add a comment |
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on theRestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
I checked with debugger and then logged message.getPayload().getMostSpecificCause(), but the result is org.springframework.web.client.HttpClientErrorException: 400 Bad Request. It is not what I wanted. Is there something I'm doing wrong?
– Mike
Nov 22 '18 at 7:27
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
And also I can see from the complete stack trace that there is not the information what I need. Is there something wrong I'm doing??
– Mike
Nov 23 '18 at 6:53
I think the information you need is indeed not included into stack trace, but that is a part of getters on the
RestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
I think the information you need is indeed not included into stack trace, but that is a part of getters on the
RestClientResponseException
– Artem Bilan
Nov 23 '18 at 13:23
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
Thanks, just you said. Added the answer above.
– Mike
Nov 28 '18 at 12:43
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%2f53410674%2fspring-integration-java-dsl-and-http-outboundgateway-how-to-get-the-real-error%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