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