-
Bug
-
Resolution: Won't Do
-
Major
-
None
-
None
-
False
-
None
-
False
-
%
-
Todo
Following simple route:
from(slackEndpoint)
.process(ex -> ex.getIn().setBody(ex.getIn().getBody(Message.class).getText()))
.log("${body}");
where slackEndpoint is:
String slackEndpoint = String.format("slack:%s?token=RAW(%s)&conversationType=%s", IM_CHANNEL_NAME, slack.account().token(), ConversationType.IM);
will fail for every IM channel with NPM. Stacktrace:
2022-03-31 12:44:44,688 ERROR [org.apa.cam.imp.eng.AbstractCamelContext] (main) Error starting CamelContext (camel-1) due to exception thrown: null: java.lang.NullPointerException
at org.apache.camel.component.slack.SlackConsumer.lambda$getChannelId$2(SlackConsumer.java:153)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1632)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
at org.apache.camel.component.slack.SlackConsumer.getChannelId(SlackConsumer.java:155)
at org.apache.camel.component.slack.SlackConsumer.doStart(SlackConsumer.java:60)
Issue is that IMs do not have name set. I.E.:
Conversation(enterpriseId=null, id=1111111111, name=null, created=22222222, creator=null, unlinked=null, nameNormalized=null, pendingShared=null, lastRead=null, topic=null, purpose=null, previousNames=null, numOfMembers=null, latest=null, locale=null, unreadCount=null, unreadCountDisplay=null, user=3333333333, isUserDeleted=false, priority=0.0, dateConnected=null, sharedTeamIds=null, parentConversation=null, pendingConnectedTeamIds=null, conversationHostId=null, internalTeamIds=null, connectedTeamIds=null, connectedLimitedTeamIds=null, isChannel=false, isGroup=false, isIm=true, isArchived=false, isGeneral=false, isReadOnly=false, isThreadOnly=false, isNonThreadable=false, isShared=false, isExtShared=false, isOrgShared=false, isPendingExtShared=false, globalShared=false, orgDefault=false, orgMandatory=false, isMoved=null, isMember=false, open=false, isPrivate=false, isMpim=false, isStarred=false)
So this method always return NPM for IM:
https://github.com/apache/camel/blob/80b92e3624ae5db59a1a24a441f1b10b39eaa1a5/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackConsumer.java#L152
Other conversationTypes (PUBLIC_CHANNEL, PRIVATE_CHANNEL, MPIM) have name correctly set and the route above works fine with them.