0
I’m using the JAXB API. I can persist right a java object in xml but only persist the attribute "Name" the rest of the attributes are not persisted. Here are my codes:
This is the method that saves the object in XML.
/**
* Salva os dados do grupo atual no arquivo especificado.
*
* @param file
*/
public void saveDataToFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(GruposListWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Envolvendo nossos dados da pessoa.
GruposListWrapper wrapper = new GruposListWrapper();
wrapper.setGrupos(gruposData);
// Enpacotando e salvando XML no arquivo.
m.marshal(wrapper, file);
// Saalva o caminho do arquivo no registro.
setFilePath(file);
} catch (Exception e) { // catches ANY exception
e.printStackTrace();
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Could not save data");
alert.setContentText("Could not save data to file:\n" + file.getPath());
alert.showAndWait();
}
}
This is the Wrapper class
/**
* Classe auxiliar para envolver uma lista de grupos. Esta é usada para
*salvar a lista de grupos em XML.
*
* @author Marco Jakob
*/
@XmlRootElement(name = "grupos")
public class GruposListWrapper {
private List<Grupos> grupos;
@XmlElement(name = "grupo")
public List<Grupos> getGrupos() {
return grupos;
}
public void setGrupos(List<Grupos> grupos) {
this.grupos = grupos;
}
}
The list to be saved is this:
private ObservableList<Grupos> gruposData =
FXCollections.observableArrayList();
This is my class Groups:
public class Grupos implements Pesquisavel{
private StringProperty nome;
private StringProperty quantidadeProdutos;
private StringProperty valorTotal;
private List<Produtos> listaProdutos = new ArrayList<>();
public Grupos() {
this(null);
}
public Grupos(String nome) {
this.nome = new SimpleStringProperty(nome);
this.quantidadeProdutos = new SimpleStringProperty("10");
this.valorTotal = new SimpleStringProperty("10");
}
public Grupos(String nome, String quantidadeProdutos, String valorTotal) {
this.nome = new SimpleStringProperty(nome);
this.quantidadeProdutos = new SimpleStringProperty(quantidadeProdutos);
this.valorTotal = new SimpleStringProperty(valorTotal);
}
public void setNome(String nome) {
this.nome = new SimpleStringProperty(nome);
}
public void setQuantidadeProdutos() {
this.quantidadeProdutos = new SimpleStringProperty(Integer.toString(getListaProdutos().size()));
}
public void setValorTotal() {
Double novoValor = 0.0;
for(Produtos x: getListaProdutos()) {
novoValor += Double.parseDouble(x.getValor().get());
}
this.valorTotal = new SimpleStringProperty(Double.toString(novoValor));
}
public void setQuantidadeProdutos(String quantidade) {
this.quantidadeProdutos = new SimpleStringProperty(quantidade);
}
public void setValorTotal(String valor) {
this.valorTotal = new SimpleStringProperty(valor);
}
public StringProperty getNomeProperty() {
return nome;
}
public StringProperty getQuantidadeProdutosProperty() {
return quantidadeProdutos;
}
public StringProperty getValorTotalProperty() {
return valorTotal;
}
public List<Produtos> getListaProdutos(){
return listaProdutos;
}
@Override
public String getNome() {
return nome.get();
}
@Override
public String getCodigo() {
return null;
}
@Override
public String toString() {
return getNome();
}
}
When I save in XML it always saves like this, no matter how much I change the attributes, how many changes I make, it always saves only the Group name in XML:
It didn’t work that way, my xml looks like this: https://imgur.com/a/fP2LImg
– Gabriel Henrique
Post your Modified Groups class.
– rhenesys