[ 
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:
us...@infra.apache.org


> 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)

Reply via email to