2012-03-27 14 views
5

Tengo un archivo xml como el siguiente y cuando el archivo Ruta2 es nulo o está vacío, quiero que el valor de ese valor sea el de filePath1. ¿Hay alguna manera de lograr esto a través de JAXB?Establecer el valor predeterminado en JAXB

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

No quiero forzar el código del valor predeterminado. Si el valor de filePath2 es nulo o está en blanco (""), quiero establecer el atributo filePath1 como el valor de 'String filePath'. ¿Hay alguna manera de hacerlo a través de un setter en JAXB?

Respuesta

3

El uso normal de Oracle JAXB sólo veo la posibilidad de implementar que el uso de un javax.xml.bind.Unmarshaller.Listener. Implemente esa interfaz en su clase de modelo y realice las comprobaciones necesarias en el método afterUnmarshal(..).

Ahí puede acceder al valor de filePath1 y establecerlo (si es necesario) en filePath2.

1

Si puede utilizar anotaciones, que esto debe hacer el truco

... 
private String foo; 

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

Eso cableará el valor predeterminado a '" bar "'. No leerá dinámicamente '../../@ filePath1' –

2

Gracias por todas sus entradas, al final opté por una solución más simple; para actualizar el setter donde se llama a filePath2. La parte JAXB -

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

Cuando se utiliza rutaArchivo -

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

Si se encuentra con un bettr aún solución simple que me haga saber.

Cuestiones relacionadas