Я считаю, что JiBX - лучший из них (JAXB, Castor, XMLBeans и т. д.), особенно потому, что я предпочитаю файлы сопоставления над аннотациями. По общему признанию, он имеет приличную кривую обучения, но на веб-сайте есть много хороших примеров. Вы, должно быть, пропустили учебник .
Если вы идете только в одном направлении (XML -> POJO), вы можете использовать Digester .
Боковой комментарий: я предпочитаю сопоставлять файлы по аннотациям, потому что аннотации:
Вы пытаетесь использовать другие конечные точки, которые отправляют уведомления, такие как смс? Прямая адресация в настоящее время доступна только для конечных точек push-уведомлений. Это ошибка, которую вы получите, когда попытаетесь опубликовать на определенной конечной точке, которая не разрешает прямую прямую адресацию!
http://aws.amazon.com/sns/faqs/#Does_SNS_support_direct_addressing_for_SMS_or_Email
Ничего из этого не сработает, если вы не помассируете полезную нагрузку.
var arn = 'ENDPOINT_ARN';
console.log("endpoint arn: " + arn);
var payload = {
default: message_object.message,
GCM: {
data: {
message: message_object.message
}
}
};
// The key to the whole thing is this
//
payload.GCM = JSON.stringify(payload.GCM);
payload = JSON.stringify(payload);
// Create the params structure
//
var params= {
TargetArn: arn,
Message: payload,
MessageStructure: 'json' // Super important too
};
sns.publish(params , function(error, data) {
if (error) {
console.log("ERROR: " + error.stack);
}
else {
console.log("data: " + JSON.stringify(data));
}
context.done(null, data);
});
Итак, получается, что вы должны указать структуру сообщения (будучи json). Я пытался опубликовать в конечной точке с консоли AWS, и она работала великолепно, пока я выбирал JSON. Использование RAW ничего не даст.
В моем сценарии выполнялись предыдущие посты:
var params = {
TargetArn: arn,
Message:'Success!!! ',
Subject: 'TestSNS'
};
И хотя CloudWatch регистрировал успех, я ни разу не получил сообщение. Как только я добавил данные MessageStructure и правильно отформатировал полезную нагрузку, он заработал как шарм.
Параметр [default] бесполезен, но я оставил его там, чтобы показать, как может выглядеть структура.
Если вы не зафиксируете часть payload.GCM, SNS откажется и скажет, что ваше сообщение должно содержать элемент «GCM».
Единственное, что раздражает, это то, что вы должны знать, какова конечная точка. Я надеялся, что вам не нужно было форматировать сообщение на основе конечной точки, что в некоторой степени противоречит цели SNS.
Нечто подобное работает нормально для меня. Я могу публиковать на определенную конечную точку, используя: изолированную программную среду Apple Push Notification Service (APNS_SANDBOX)
Вы также можете попробовать обновить aws-sdk, текущая версия 1.9.0.
Вот мой код, TargetArn был скопирован непосредственно из консоли SNS. Я опустил некоторые данные, например & amp;
var sns = new AWS.SNS();
var params = {
TargetArn:'arn:aws:sns:us-west-2:302467918846:endpoint/APNS_SANDBOX/<APP_NAME>/<USER_TOKEN>'
Message:'Success!!! ',
Subject: 'TestSNS'
};
sns.publish(params, function(err,data){
if (err) {
console.log('Error sending a message', err);
} else {
console.log('Sent message:', data.MessageId);
}
});