2012-03-27 15 views
5

Ho un file xml come segue e quando filePath2 è nullo o vuoto, voglio che il valore sia quello del valore di filePath1. C'è un modo in cui posso ottenere questo attraverso JAXB.Imposta il valore predefinito in JAXB

<file filePath1="C:/filePath"> 
    <subFile name="Test"> 
     <filePath2></filePath2> 
    </subFile> 
<file/> 

Non voglio hardcode il valore predefinito. Se il valore per filePath2 è nullo o vuoto (""), desidero impostare l'attributo filePath1 come valore di "String filePath". C'è un modo per farlo tramite un setter in JAXB?

risposta

3

Utilizzando pianura Oracle JAXB vedo solo la possibilità di attuare tale utilizzando un javax.xml.bind.Unmarshaller.Listener. Implementare quell'interfaccia nella classe del modello ed eseguire i controlli necessari nel metodo afterUnmarshal(..).

Qui è possibile accedere al valore di filePath1 e impostare (se necessario) su filePath2.

1

Se è possibile utilizzare le annotazioni, che questo dovrebbe fare il trucco

... 
private String foo; 

@XmlElement(defaultValue="bar") 
public String getFoo() { 
    return foo; 
} 
... 
+2

Ciò comporterà il valore predefinito su "" bar "'. Non leggerà dinamicamente '../../@ filePath1' –

2

Grazie per tutti i tuoi input, alla fine ho optato per una soluzione più semplice; per aggiornare il setter in cui viene chiamato filePath2. La parte JAXB -

String filePath2; 
@XmlElement(required = true) 
public void setFilePath2(final String file) { 
    this.filePath2= file; 
} 

Dove viene utilizzato filePath -

if (filePath2 == null || filePath2.isEmpty()) { 
    setFilePath2(getFilePath1()); 
} 

Se vi imbattete in un bettr ancora soluzione semplice me lo faccia sapere.

Problemi correlati