[
https://issues.apache.org/jira/browse/CAMEL-11948?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16221839#comment-16221839
]
ASF GitHub Bot commented on CAMEL-11948:
----------------------------------------
davsclaus closed pull request #2064: CAMEL-11948 NPE on DefaultMessage setBody
if deprecated constructor was used
URL: https://github.com/apache/camel/pull/2064
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
b/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
index 4c564b89aa3..a2ae7e73a2a 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java
@@ -33,7 +33,7 @@
* Unless a specific provider wishes to do something particularly clever with
* headers you probably want to just derive from {@link DefaultMessage}
*
- * @version
+ * @version
*/
public abstract class MessageSupport implements Message, CamelContextAware,
DataTypeAware {
private CamelContext camelContext;
@@ -48,6 +48,7 @@ public String toString() {
return String.format("Message[%s]", messageId == null ? "" :
messageId);
}
+ @Override
public Object getBody() {
if (body == null) {
body = createBody();
@@ -55,10 +56,12 @@ public Object getBody() {
return body;
}
+ @Override
public <T> T getBody(Class<T> type) {
return getBody(type, getBody());
}
+ @Override
public Object getMandatoryBody() throws InvalidPayloadException {
Object answer = getBody();
if (answer == null) {
@@ -97,6 +100,7 @@ public Object getMandatoryBody() throws
InvalidPayloadException {
return null;
}
+ @Override
public <T> T getMandatoryBody(Class<T> type) throws
InvalidPayloadException {
// eager same instance type test to avoid the overhead of invoking the
type converter
// if already same type
@@ -116,14 +120,16 @@ public Object getMandatoryBody() throws
InvalidPayloadException {
throw new InvalidPayloadException(e, type, this);
}
+ @Override
public void setBody(Object body) {
this.body = body;
// set data type if in use
- if (body != null && camelContext.isUseDataType()) {
+ if (body != null && camelContext != null &&
camelContext.isUseDataType()) {
this.dataType = new DataType(body.getClass());
}
}
+ @Override
public <T> void setBody(Object value, Class<T> type) {
Exchange e = getExchange();
if (e != null) {
@@ -156,6 +162,7 @@ public boolean hasDataType() {
return dataType != null;
}
+ @Override
public Message copy() {
Message answer = newInstance();
// must copy over CamelContext
@@ -166,6 +173,7 @@ public Message copy() {
return answer;
}
+ @Override
public void copyFrom(Message that) {
if (that == this) {
// the same instance so do not need to copy
@@ -183,6 +191,7 @@ public void copyFrom(Message that) {
copyFromWithNewBody(that, that.getBody());
}
+ @Override
public void copyFromWithNewBody(Message that, Object newBody) {
if (that == this) {
// the same instance so do not need to copy
@@ -219,6 +228,7 @@ public void copyFromWithNewBody(Message that, Object
newBody) {
copyAttachments(that);
}
+ @Override
public Exchange getExchange() {
return exchange;
}
@@ -227,14 +237,17 @@ public void setExchange(Exchange exchange) {
this.exchange = exchange;
}
+ @Override
public CamelContext getCamelContext() {
return camelContext;
}
+ @Override
public void setCamelContext(CamelContext camelContext) {
this.camelContext = camelContext;
}
+ @Override
public void copyAttachments(Message that) {
// the attachments may be the same instance if the end user has made
some mistake
// and set the OUT message with the same attachment instance of the IN
message etc
@@ -270,6 +283,7 @@ protected Object createBody() {
return null;
}
+ @Override
public String getMessageId() {
if (messageId == null) {
messageId = createMessageId();
@@ -277,6 +291,7 @@ public String getMessageId() {
return this.messageId;
}
+ @Override
public void setMessageId(String messageId) {
this.messageId = messageId;
}
diff --git
a/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageTest.java
b/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageTest.java
index 112c2a9fc4f..0ca64638383 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageTest.java
@@ -16,15 +16,16 @@
*/
package org.apache.camel.impl;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.camel.Attachment;
import org.junit.Test;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.MatcherAssert.assertThat;
-
public class DefaultMessageTest {
@Test
@@ -36,4 +37,14 @@ public void testAttachmentsAreSorted() {
assertThat(attachments, instanceOf(LinkedHashMap.class));
}
+ @Test
+ public void testCamelContextIsNull() {
+ @SuppressWarnings("deprecation")
+ DefaultMessage message = new DefaultMessage();
+ String body = "something";
+ message.setBody(body);
+ assertEquals(body, message.getBody());
+ assertEquals(null, message.getCamelContext());
+ }
+
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> NPE on DefaultMessage setBody if deprecated constructor was used
> ----------------------------------------------------------------
>
> Key: CAMEL-11948
> URL: https://issues.apache.org/jira/browse/CAMEL-11948
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Affects Versions: 2.20.0
> Reporter: Thomas Papke
> Priority: Minor
> Fix For: 2.21.0
>
>
> After upgrade camel 2.20.0, some operations fail with a NullPointerException:
> {code}
> Caused by: java.lang.NullPointerException
> at
> org.apache.camel.impl.MessageSupport.setBody(MessageSupport.java:122)
> {code}
> The issue seems to be introduced with the change CAMEL-11380.
> The issue could be easily reproduced by using the deprecated constructor,
> where no camelContext is set:
> {code}
> Message message = new DefaultMessage();
> message.setBody("something");
> {code}
> To remain better backward compatibility, i would suggest a nullcheck in the
> setBody for cases where the CamelContext is not set.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)