Разбор всей записи AWS SQS с использованием GSON - PullRequest
0 голосов
/ 01 октября 2018

Я безуспешно пытаюсь разобрать это сообщение.Используя API AWS Simple Queue Service, я следую инструкциям и делаю следующее ...

for(Message m : Messages){
    System.out.println(m.getBody());
}

Возвращает строку JSON в этой структуре:

{
    "Records": [
        {
            "EventSource": "",
            "EventVersion": "",
            "EventSubscriptionArn": "",
            "Sns": {
                "Type": "",
                "MessageId": "",
                "TopicArn": "",
                "Subject": null,
                "Message": ""                
                "Timestamp": "",
                "SignatureVersion": "",
                "Signature": "”
                "SigningCertUrl": "",
                "UnsubscribeUrl": "",
                "MessageAttributes": {}
            }
        }
    ]
}

Я пыталсяпроанализируйте всю эту вещь в Java-объект, используя GSON, чтобы я мог извлечь параметр «Сообщение» (который также содержит JSON), а затем использовать GSON для анализа этого (сделано и работает, когда я просто передаю этот текст напрямую).

Это классы, которые я настроил, но это не будет работать - у каждого есть общедоступные методы получения и установки .....

Класс записей:

public class Records {

    public ArrayList<ExceptionMessages> exceptionMessages = new ArrayList<ExceptionMessages>();

    public ArrayList<ExceptionMessages> getExceptionMessages() {
        return exceptionMessages;
    }

    public void setExceptionMessages(ArrayList<ExceptionMessages> exceptionMessages) {
        this.exceptionMessages = exceptionMessages;
    }

Класс сообщения:

public class ExceptionMessages {

    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns messageJSON;     
}

Класс Sns (где хранится сообщение):

public class Sns {

    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public String MessageAttributes;
}

Я получаю исключение нулевого указателя при попытке .get(0) из ArrayList, так что он пуст и анализ не выполняетсяпроисходить.

Вот как я это называю ...

Я посылаю m.getBody() методу синтаксического анализа и пытаюсь выполнить синтаксический анализ следующим образом:

Gson gson = new Gson();
Records record = new Records();
gson.fromJson(JSONString.replaceAll("\\s+", ""), Records.class);

1 Ответ

0 голосов
/ 01 октября 2018

Структура должна быть

class RecordContainer {
    ArrayList<Record> Records;
}

class Record {
    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns Sns;     
}

class Sns {
    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public MessageAttributes MessageAttributes;
}
...