2016-12-23 1 views
2

Dans notre code, nous supprimons un message d'une file d'attente sqs et obtenons le deletResponse.Erreur dans le code source AWS?

String deleteResponse = sqsClient.deleteMessage(simBridge2ESBUrl, message.getReceiptHandle()).toString(); 

Le message est supprimé après cet appel, mais deleteResponse est toujours {}. Nous avons donc vérifié le code source et trouvé la fonction DeleteMessageResult::toString ne renvoie que {}.

Vous trouverez ci-dessous le code source AWS. Les fonctions toString() et hashCode() semblent être étranges. Y a-t-il une erreur dans le code source ou est-ce que je le fais mal? Merci.

/* 
* Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights 
* Reserved. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"). 
* You may not use this file except in compliance with the License. 
* A copy of the License is located at 
* 
* http://aws.amazon.com/apache2.0 
* 
* or in the "license" file accompanying this file. This file is distributed 
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
* express or implied. See the License for the specific language governing 
* permissions and limitations under the License. 
*/ 

package com.amazonaws.services.sqs.model; 

import java.io.Serializable; 

/** 
* 
*/ 
public class DeleteMessageResult implements Serializable, Cloneable { 

    /** 
    * Returns a string representation of this object; useful for testing and 
    * debugging. 
    * 
    * @return A string representation of this object. 
    * 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("{"); 
     sb.append("}"); 
     return sb.toString(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 

     if (obj instanceof DeleteMessageResult == false) 
      return false; 
     DeleteMessageResult other = (DeleteMessageResult) obj; 
     return true; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int hashCode = 1; 

     return hashCode; 
    } 

    @Override 
    public DeleteMessageResult clone() { 
     try { 
      return (DeleteMessageResult) super.clone(); 
     } catch (CloneNotSupportedException e) { 
      throw new IllegalStateException(
        "Got a CloneNotSupportedException from Object.clone() " 
          + "even though we're Cloneable!", e); 
     } 
    } 
} 
+0

Voir la documentation [documentation] (http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html) lors de la suppression du message SQS. – MaxZoom

Répondre

1

De la perspective de programmation toString() est écrit correctement. Pensez à ce que fait cette fonction:

Une représentation sous forme de chaîne de cet objet.

Puisque la classe DeleteMessageResult n'a aucune propriété, il n'y a rien à retourner. La même chose s'applique à hashCode(). Deux objets de sont toujours identiques, donc ils ont le même hash à chaque fois.

Cela étant dit, je pense que DeleteMessageResult doit contenir ResposeMetadata avec RequestId unique spectacle API reference:

<DeleteMessageResponse> 
    <ResponseMetadata> 
     <RequestId> 
      b5293cb5-d306-4a17-9048-b263635abe42 
     </RequestId> 
    </ResponseMetadata> 
</DeleteMessageResponse> 

Alors, oui, cette classe pourrait (probablement, devrait) être patché complètement en arrière la SQS API