|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2014 the original author or authors. |
|
|
|
* Copyright 2002-2017 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -18,13 +18,23 @@ package org.springframework.messaging.support; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Map; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.messaging.Message; |
|
|
|
import org.springframework.messaging.MessageHeaders; |
|
|
|
import org.springframework.messaging.MessageHeaders; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* A {@link GenericMessage} with a {@link Throwable} payload. |
|
|
|
* A {@link GenericMessage} with a {@link Throwable} payload. |
|
|
|
|
|
|
|
* The payload is typically a {@link org.springframework.messaging.MessagingException} |
|
|
|
|
|
|
|
* with the message at the point of failure in its {@code failedMessage} property. |
|
|
|
|
|
|
|
* An optional {@code originalMessage} may be provided, which represents the message |
|
|
|
|
|
|
|
* that existed at the point in the stack where the error message is created. |
|
|
|
|
|
|
|
* <p>Consider some code that starts with a message, invokes some process that performs |
|
|
|
|
|
|
|
* transformation on that message and then fails for some reason, throwing the exception. |
|
|
|
|
|
|
|
* The exception is caught and an error message produced that contains both the original |
|
|
|
|
|
|
|
* message, and the transformed message that failed. |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Mark Fisher |
|
|
|
* @author Mark Fisher |
|
|
|
* @author Oleg Zhurakousky |
|
|
|
* @author Oleg Zhurakousky |
|
|
|
|
|
|
|
* @author Gary Russell |
|
|
|
* @since 4.0 |
|
|
|
* @since 4.0 |
|
|
|
* @see MessageBuilder |
|
|
|
* @see MessageBuilder |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@ -32,6 +42,7 @@ public class ErrorMessage extends GenericMessage<Throwable> { |
|
|
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = -5470210965279837728L; |
|
|
|
private static final long serialVersionUID = -5470210965279837728L; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final Message<?> originalMessage; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Create a new message with the given payload. |
|
|
|
* Create a new message with the given payload. |
|
|
|
@ -39,6 +50,7 @@ public class ErrorMessage extends GenericMessage<Throwable> { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public ErrorMessage(Throwable payload) { |
|
|
|
public ErrorMessage(Throwable payload) { |
|
|
|
super(payload); |
|
|
|
super(payload); |
|
|
|
|
|
|
|
this.originalMessage = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -49,6 +61,7 @@ public class ErrorMessage extends GenericMessage<Throwable> { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public ErrorMessage(Throwable payload, Map<String, Object> headers) { |
|
|
|
public ErrorMessage(Throwable payload, Map<String, Object> headers) { |
|
|
|
super(payload, headers); |
|
|
|
super(payload, headers); |
|
|
|
|
|
|
|
this.originalMessage = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -60,6 +73,72 @@ public class ErrorMessage extends GenericMessage<Throwable> { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public ErrorMessage(Throwable payload, MessageHeaders headers) { |
|
|
|
public ErrorMessage(Throwable payload, MessageHeaders headers) { |
|
|
|
super(payload, headers); |
|
|
|
super(payload, headers); |
|
|
|
|
|
|
|
this.originalMessage = null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a new message with the given payload and original message. |
|
|
|
|
|
|
|
* @param payload the message payload (never {@code null}) |
|
|
|
|
|
|
|
* @param originalMessage the original message (if present) at the point in the stack |
|
|
|
|
|
|
|
* where the ErrorMessage was created |
|
|
|
|
|
|
|
* @since 5.0 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public ErrorMessage(Throwable payload, Message<?> originalMessage) { |
|
|
|
|
|
|
|
super(payload); |
|
|
|
|
|
|
|
this.originalMessage = originalMessage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a new message with the given payload, headers and original message. |
|
|
|
|
|
|
|
* The content of the given header map is copied. |
|
|
|
|
|
|
|
* @param payload the message payload (never {@code null}) |
|
|
|
|
|
|
|
* @param headers message headers to use for initialization |
|
|
|
|
|
|
|
* @param originalMessage the original message (if present) at the point in the stack |
|
|
|
|
|
|
|
* where the ErrorMessage was created |
|
|
|
|
|
|
|
* @since 5.0 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public ErrorMessage(Throwable payload, Map<String, Object> headers, Message<?> originalMessage) { |
|
|
|
|
|
|
|
super(payload, headers); |
|
|
|
|
|
|
|
this.originalMessage = originalMessage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Create a new message with the payload, {@link MessageHeaders} and original message. |
|
|
|
|
|
|
|
* <p><strong>Note:</strong> the given {@code MessageHeaders} instance |
|
|
|
|
|
|
|
* is used directly in the new message, i.e. it is not copied. |
|
|
|
|
|
|
|
* @param payload the message payload (never {@code null}) |
|
|
|
|
|
|
|
* @param headers message headers |
|
|
|
|
|
|
|
* @param originalMessage the original message (if present) at the point in the stack |
|
|
|
|
|
|
|
* where the ErrorMessage was created |
|
|
|
|
|
|
|
* @since 5.0 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public ErrorMessage(Throwable payload, MessageHeaders headers, Message<?> originalMessage) { |
|
|
|
|
|
|
|
super(payload, headers); |
|
|
|
|
|
|
|
this.originalMessage = originalMessage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The original message (if present) at the point in the stack where the |
|
|
|
|
|
|
|
* ErrorMessage was created. |
|
|
|
|
|
|
|
* @return the originalMessage |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public Message<?> getOriginalMessage() { |
|
|
|
|
|
|
|
return originalMessage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public String toString() { |
|
|
|
|
|
|
|
if (this.originalMessage == null) { |
|
|
|
|
|
|
|
return super.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder(super.toString()); |
|
|
|
|
|
|
|
if (sb.length() > 0) { |
|
|
|
|
|
|
|
sb.setLength(sb.length() - 1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
sb.append(", originalMessage=").append(this.originalMessage.toString()).append("]"); |
|
|
|
|
|
|
|
return sb.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|