Sto lavorando su un componente per una coda di messaggi aziendali che consuma un messaggio da una coda e lo invia come messaggio di testo. Il messaggio viene raccolto dal mio utente in formato JSON (non ho la possibilità di modificare la modalità di ricezione del messaggio).
{
"id":"19ADFASDFGG456SDGE",
"body":"Hello World!",
"to":[15189511011, 19178567788]
}
Una volta ricevuto dal mio utente ho bisogno di compilare un file XML come questo
<Request>
<Identification>
<UserID>CONSTANT_USER</UserID>
<Password>CONSTANT_PASS</Password>
</Identification>
<Service>
<ServiceName>SendMessage</ServiceName>
<ServiceDetail>
<CombiMessage>
<CombiList>
<Individual type='sms'>${to}</Individual>
</CombiList>
<Text>${body}</Text>
</CombiMessage>
</ServiceDetail>
</Service>
</Request>
Dove ${to}
e ${body}
vengono popolati dall'oggetto JSON. Questo XML non può essere generato nel codice (deve risiedere in una cartella di risorse come un file xml). Oltre a consumare il messaggio e successivamente a inviare un messaggio di testo, l'utente dispone anche delle funzionalità di registrazione e passa l'oggetto JSON (o un POJO contenente tali dati) a un altro sistema.
Fondamentalmente quando un oggetto JSON viene consumato dalla coda in questo momento sto usando una libreria chiamata Jackson per popolare un Pojo che assomiglia a questo.
public class Message {
private Set<PhoneNumber> to;
private String body;
private String id;
}
E l'oggetto JSON popola quel Pojo tramite Jackson in questo modo.
public static Message getMessage(String json) {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(json, Message.class);
}
Da lì ora ho un POJO che è una copia esatta dell'oggetto JSON e posso inviarlo al sistema di registrazione, all'altro sistema, e posso anche inserire l'XML con esso.
Tuttavia non ho trovato un modo ideale per popolare l'XML. Attualmente ho qualcosa di semplice come questo
private static String populate(String request, Message message) {
return request.replaceAll("${to}", message.getTo().toString()).replaceAll("${body}", message.getBody());
}
Questo va bene a questo proposito, ma solo perché ho semplificato eccessivamente per fare questa domanda. A volte il file XML ha quasi mille campi che devono essere popolati. Qualcuno può raccomandare una soluzione per questo ultimo passo? Come farlo dinamicamente? Fondamentalmente vorrei mappare i campi nel mio POJO con i nodi nel file xml (ricordando anche che ho bisogno di mantenere il file xml esterno).