Bonjour,

Voici mon problème : j'ai un fichier XML qui contient différentes données de configuration. Je souhaite gérer (lire/écrire) ce fichier simplement. Pour cela il me semble que JAXB est adapté.
Dans mon application j'ai donc un objet (Param) qui reprend les différentes données de configuration sous forme d'attributs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
 
@XmlRootElement(name = "param")
@XmlAccessorType(XmlAccessType.FIELD)
public class Param {
	private static Param instance;
 
	@XmlElement
	private String data;
 
	private Param(){
 
	}
 
	public static synchronized Param getInstance() {
		if (null == Param.instance) {
			Param.instance = new Param();
		}
 
		return Param.instance;
	}
 
	public String getData() {
		return this.data;
	}
}
Je veux que cet objet soit un singleton car les paramétres de l'appli sont communs à toute l'appli et je veux y avoir accès depuis n'importe où sans avoir à me trainer un lien vers cet objet.

J'arrive à faire le unmarshal de mon fichier XML mais si je fais un getInstance() de celui-ci un nouvel objet est créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
import java.io.File;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
 
public class TestJaxb {
	public static void main(String args[]) {
		// Read xml config file. 
		JAXBContext jaxbContext;
		try {
			jaxbContext = JAXBContext.newInstance(Param.class);
			Unmarshaller um = jaxbContext.createUnmarshaller();
			File _configFile = new File("param.xml");
			Param param = (Param)um.unmarshal(_configFile);
			System.out.println("Param 1 : " + param + "(" + param.getData() + ")");
			param = Param.getInstance();
			System.out.println("Param 2 : " + param + "(" + param.getData() + ")");
		} catch (JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
Effectivement, lors du unmarshal l'attribut instance prend la valeur par défaut (null). Du coup le getInstance() créé un nouvel objet.

Ma question est donc : comment faire pour que lors du unmarshal mon attribut instance soit mis à jour.

Merci pour vos suggestions.


S. Combes