ExpoPushMessage.setData() is throwing java.lang.NoSuchMethodError
mehulkasliwal opened this issue · 0 comments
Description
While sending metadata with the expo push message object, the library is throwing java.lang.NoSuchMethodError exception. Following are the details:
Dependency (pom.xml)
<dependency>
<groupId>io.github.jav</groupId>
<artifactId>expo-server-sdk</artifactId>
<version>1.1.0</version>
</dependency>
Code snippet
` public void pushNotification(String recipient, String title, String message, Map<String, Object> dataExpo) throws PushClientException, InterruptedException {
if (!PushClient.isExponentPushToken(recipient))
throw new Error("Token:" + recipient + " is not a valid token.");
ExpoPushMessage expoPushMessage = new ExpoPushMessage();
expoPushMessage.addTo(recipient);
expoPushMessage.setTitle(title);
expoPushMessage.setBody(message);
expoPushMessage.setData(dataExpo);
List<ExpoPushMessage> expoPushMessages = new ArrayList<>();
expoPushMessages.add(expoPushMessage);
PushClient client = new PushClient();
List<List<ExpoPushMessage>> chunks = client.chunkPushNotifications(expoPushMessages);
List<CompletableFuture<List<ExpoPushTicket>>> messageRepliesFutures = new ArrayList<>();
for (List<ExpoPushMessage> chunk : chunks) {
messageRepliesFutures.add(client.sendPushNotificationsAsync(chunk));
}
// Wait for each completable future to finish
List<ExpoPushTicket> allTickets = new ArrayList<>();
for (CompletableFuture<List<ExpoPushTicket>> messageReplyFuture : messageRepliesFutures) {
try {
for (ExpoPushTicket ticket : messageReplyFuture.get()) {
allTickets.add(ticket);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
List<ExpoPushMessageTicketPair<ExpoPushMessage>> zippedMessagesTickets = client.zipMessagesTickets(expoPushMessages, allTickets);
List<ExpoPushMessageTicketPair<ExpoPushMessage>> okTicketMessages = client.filterAllSuccessfulMessages(zippedMessagesTickets);
String okTicketMessagesString = okTicketMessages.stream().map(
p -> "Title: " + p.message.getTitle() + ", Id:" + p.ticket.getId()
).collect(Collectors.joining(","));
System.out.println(
"Recieved OK ticket for " +
okTicketMessages.size() +
" messages: " + okTicketMessagesString
);
List<ExpoPushMessageTicketPair<ExpoPushMessage>> errorTicketMessages = client.filterAllMessagesWithError(zippedMessagesTickets);
String errorTicketMessagesString = errorTicketMessages.stream().map(
p -> "Title: " + p.message.getTitle() + ", Error: " + p.ticket.getDetails().getError()
).collect(Collectors.joining(","));`
Data object
We have tried to pass a simple HashMap<String, Object>
with values:
- "key1" -> "value1"
- "key2" -> "value2"
as well as a complex data object with nested values. None of them is working
Error
It is throwing the following ExecutionException when performing -> allTickets.add(ticket);
java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.util.JacksonFeatureSet com.fasterxml.jackson.core.JsonParser.getReadCapabilities()'