jav/expo-server-sdk-java

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:

  1. "key1" -> "value1"
  2. "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()'