2012-11-17 15 views
5

È possibile eseguire il marshalling di XML direttamente su un oggetto esistente e aggiornare solo determinati campi?Marshalling su un oggetto esistente utilizzando JAXB

Desidero modificare solo alcuni campi richiesti dal client.

Eventuali suggerimenti?

+0

Può essere fatto con la riflessione. A seconda di quanto siano complessi i tipi, potrebbe essere piuttosto semplice. Curioso di vedere se sono raccomandate eventuali librerie. – jahroy

+0

Gli oggetti da riammettere non sono sotto il mio controllo. Possono ospitare qualsiasi tipo di membro, incluse anche altre classi definite dall'utente. In questo caso, è possibile utilizzare la riflessione? Dovrei usare anche Introspection? Qualche esempio disponibile per lo stesso? –

+0

Questo è il punto di riflessione: puoi ispezionare qualsiasi oggetto senza sapere nulla a riguardo. Oggi non sarò in grado di lavorare su un esempio, ma vedrò se posso postare qualche codice più tardi stasera (forse tra 12 ore). – jahroy

risposta

0

La soluzione è: Annotazioni e riflessione. e no non ci sono librerie per lo stesso. Ho cercato molto quando stavo facendo questo compito.

Ho fatto esattamente la stessa cosa che vuoi, ho fatto la mia stessa implementazione per questo. Ma è proprietario quindi non posso condividerlo.

Ma per suggerire soluzioni: ho usato le annotazioni per contrassegnare i campi che sono ricaricabili e poi ho utilizzato Reflection per ricaricare solo le parti che sono ricaricabili.

Fase 1: Unmarshal Anche in questo caso il codice XML per creare un nuovo oggetto

Fase 2: Chiamare i metodi setter sul vecchio oggetto con i nuovi valori dall'oggetto appena deserializzati.

Spero che questo aiuti.

+0

Ma vedo dai commenti precedenti che la fonte non è sotto il tuo controllo, quindi Reflection può aiutarti, a patto che ci siano metodi setter pubblici alle proprietà che stai cercando di ricaricare. –

Problemi correlati