Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

CallbackFailedException throws NullPointerException when a failed callback has no Error

Fermée Adaptée aux débutants
#773 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
82/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
java

Piste de recherche

Commencez par sdk/src/main/java/software/amazon/lambda/durable/exception/CallbackFailedException.java et lisez buildMessage ainsi que ses points d'appel dans operation/CallbackOperation.java (get()) et operation/ChildContextOperation.java. Appliquez la gestion null-safe pour un ErrorObject manquant décrit dans l'issue, puis ajoutez un test unitaire couvrant une opération CALLBACK FAILED sans CallbackDetails.Error qui assert CallbackFailedException (message "Callback failed") au lieu de NullPointerException, et lancez la suite de tests d'exceptions/opérations existante.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug pkg:sdk
Description

SendDurableExecutionCallbackFailure accepts a request with no Error because the field is optional. A callback that is failed this way reaches the SDK as a CALLBACK operation with Status: FAILED and no CallbackDetails.Error.

On that operation, CallbackOperation.get() throws new CallbackFailedException(op):

https://github.com/aws/aws-durable-execution-sdk-java/blob/7f1a73ca16308d31a1e5a270e504676caf890e0b/sdk/src/main/java/software/amazon/lambda/durable/operation/CallbackOperation.java#L80

The constructor passes operation.callbackDetails().error() to buildMessage. That method calls error.errorType() without a null check:

https://github.com/aws/aws-durable-execution-sdk-java/blob/7f1a73ca16308d31a1e5a270e504676caf890e0b/sdk/src/main/java/software/amazon/lambda/durable/exception/CallbackFailedException.java#L14-L15

So the handler gets a NullPointerException instead of CallbackFailedException, and a catch (CallbackFailedException e) block does not catch it. ChildContextOperation builds the same exception, so the same failure can occur there:

https://github.com/aws/aws-durable-execution-sdk-java/blob/7f1a73ca16308d31a1e5a270e504676caf890e0b/sdk/src/main/java/software/amazon/lambda/durable/operation/ChildContextOperation.java#L292

Steps to reproduce
  1. Create a callback in a durable handler and call get() on it.
  2. Call SendDurableExecutionCallbackFailure for that callback ID with no Error in the request body.
  3. On replay, get() throws NullPointerException from CallbackFailedException.buildMessage.
Expected behavior

get() throws CallbackFailedException with the message "Callback failed". This matches the reference JS implementation, which falls back to new CallbackExternalError("Callback failed") when Error is absent:

https://github.com/aws/aws-durable-execution-sdk-js/blob/0ee6c027ca3b58f3bf270fdf4a9ac87b73752467/packages/aws-durable-execution-sdk-js/src/handlers/callback-handler/callback.ts#L248-L273

Suggested fix

Handle a null ErrorObject in buildMessage:

private static String buildMessage(ErrorObject error) {
    if (error == null) {
        return "Callback failed";
    }
    var errorType = error.errorType();
    var errorMessage = error.errorMessage() != null ? error.errorMessage() : "Callback failed";
    if (errorType != null && !errorType.isEmpty()) {
        return errorType + ": " + errorMessage;
    }
    return errorMessage;
}

The errorMessage fallback also covers an Error that is present but has no message. JS uses error.ErrorMessage || "Callback failed" for that case.

DurableOperationException already accepts a null ErrorObject, so no other change is needed. Add a unit test for a FAILED callback operation with no CallbackDetails.Error.

Langage dominant
Java
Étoiles
28
Forks
16
Merge moyen
2 j 17 h
PR mergées (30 j)
56

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de aws/aws-durable-execution-sdk-java

Toutes les issues de aws/aws-durable-execution-sdk-java

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.