0
I am new and I started to learn these XML days because of an implementation that should have in my application, I did some tests with Mashall and unmarshall in the main class first (see at the end) to better understand, I am making a form that should have the following operation: The user clicks on the Search XML button then selects a file in the XML format of some system folder to then import it into the application where it will be read by each text field, what I am trying to do is when it imports it into the system it can be read and in each tag being its value it is loaded into one of the input boxes (Jtextfield, Jcombobox)...
Example:
<Pedido>
<pedidos>
<pedido id = "1">
<dataCadastro>3917-04-11T00:00:00-03:00</dataCadastro> <!-- tfDataCadastro: getText(); -->
<nomeProduto>Produto C</nomeProduto> <!-- cbProduto.getSelectedItem(); -->
<numControle>41666</numControle> <!-- tfNumControle: getText(); -->
<quantidade>4</quantidade> <!-- tfQuantidade: getText(); -->
<valorUnitario>41.46</valorUnitario> <!-- tfValorUnitario: getText(); -->
<codCliente>6</codCliente> <!-- cbCodCliente.getSelectedItem(); -->
</pedido>
</Pedido>
<!-- As tags comentadas são os valores a serem recuperados -->
I tried to do so:
Daomanager:
public interface DAOManager {
ClienteDAO getClienteDAO();
PedidoDAO getPedidoDAO();
ProdutoDAO getProdutoDAO();
}
Request:
@XmlRootElement(name = "pedido")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name = "pedido")
public class Pedido implements Serializable {
@XmlElement(name="id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@XmlElement(name="dataCadastro")
@Column
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataCadastro;
@XmlElement(name="nomeProduto")
@Column
private String nomeProduto;
@XmlElement(name="numControle")
@Column
private int numControle;
@XmlElement(name="quantidade")
@Column
private int quantidade;
@XmlElement(name="valorUnitario")
@Column(precision=15, scale=7)
private float valorUnitario;
@XmlElement(name="codCliente")
@Column
private Integer codCliente;
@XmlElement(name="valorTotal")
@Column(precision=15, scale=7)
private float valorTotal;
@XmlElement(name="total")
@Column(precision=2, scale=2)
private Double total;
public Pedido() {
}
public Pedido(int numControle, Date dataCadastro, String nomeProduto, float valorUnitario, float valorTotal, int quantidade, int codCliente, Double total){
this.numControle = numControle;
this.dataCadastro = dataCadastro;
this.nomeProduto = nomeProduto;
this.valorUnitario = valorUnitario;
this.valorTotal = valorTotal;
this.quantidade = quantidade;
this.codCliente = codCliente;
this.total = total;
}
/* Getters e setters del la aplicación */
}
Mysqlpedidodao:
/**
*
* @author Vickz
*/
public class MySQLPedidoDAO implements PedidoDAO {
//null pointer exception pois esse campo estava inicializado como null antes
public ConnectionFactory cf;
public MySQLPedidoDAO(ConnectionFactory cf) {
this.cf = cf;
}
@Override
public void inserir(Pedido o) {
cf.createEm().getTransaction().begin();
//tanto persist quanto merge salvam o objeto no banco de dados
//em.persist(cliente);
cf.createEm().merge(o);
cf.createEm().getTransaction().commit();
cf.close();
}
@Override
public void alterar(Pedido o) {
cf.createEm().getTransaction().begin();
Pedido pedido = new Pedido();
pedido.getId();
cf.createEm().merge(o);
cf.createEm().getTransaction().commit();
cf.close();
}
@Override
public void excluir(Pedido o) {
cf.createEm().getTransaction().begin();
cf.createEm().remove(o);
cf.createEm().getTransaction().commit();
cf.close();
}
@Override
public Pedido pesquisar(Long id) {
cf.createEm().getTransaction().begin();
//erro abaixo
Pedido pedido = cf.createEm().find(Pedido.class, id);
cf.createEm().getTransaction().commit();
//erro ao deletar pois o factory já está fechado
//emf.close();
return pedido;
}
@Override
public List<Pedido> listar() {
cf = new ConnectionFactory();
cf.createEm().getTransaction().begin();
//pedido = *, Pedido = nome da tabela
Query consulta = cf.createEm().createQuery("select pedido from Pedido pedido");
List<Pedido> pedidos = consulta.getResultList();
cf.createEm().getTransaction().commit();
cf.close();
return pedidos;
}
}
Viewpedidos:
public class ViewPedidos extends javax.swing.JInternalFrame {
private DAOManager manager;
private PedidoModel model;
private MySQLPedidoDAO mspdao;
private MySQLClienteDAO mscdao;
private MySQLProdutoDAO msprdao;
private List<Produto> produtos;
private List<Pedido> pedidos;
private Pedido ped;
private Produto pro;
private FiltroArquivo filter;
private String xmlFile = "";
private boolean editavel;
private JAXBContext context;
/* .... Getters e Setters .... */
private void btImportarActionPerformed(java.awt.event.ActionEvent evt) {
try {
habilitarTextFieldEBotoes();
JAXBContext context = JAXBContext.newInstance(ImportarPedidoList.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Pedido pedido = (Pedido) unmarshaller.unmarshal(new File(xmlFile));
// Como fazer isso?!
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Não foi possível importar o arquivo.xml", "Falha ao carregar", JOptionPane.INFORMATION_MESSAGE);
}
}
private void btProcurarActionPerformed(java.awt.event.ActionEvent evt) {
try {
JFileChooser jFileChooser = new JFileChooser("C:\\Users\\Vickz\\Documents\\NetBeansProjects\\Loja");
jFileChooser.setDialogTitle("Escolha o arquivo xml");
jFileChooser.setFileFilter(new FiltroArquivo(".xml", "Arquivo XML"));
int result = jFileChooser.showSaveDialog(this);
if(result == JFileChooser.APPROVE_OPTION){
//JOptionPane.showMessageDialog(this, jFileChooser.getName());
xmlFile = jFileChooser.getSelectedFile().getAbsolutePath();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Não foi possível carregar o arquivo.xml", "Falha ao carregar", JOptionPane.INFORMATION_MESSAGE);
}
}
/*
@Override
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
String value = ie.getItem().toString();
// faz algo conforme a opção selecionada
if (value.equals("Produto A")) {
} else if (value.equals("Produto B")) {
} else if (value.equals("Produto C")) {
} else if (value.equals("Produto D")) {
} else if (value.equals("Produto E")) {
} else if (value.equals("Produto F")) {
} else if (value.equals("Produto G")) {
} else if (value.equals("Produto H")) {
} else if (value.equals("Produto I")) {
}
}
}*/
}
I tried several ways to do it on main but it’s also not working
public class Main {
private static JAXBContext context;
public static void main(String[] args) throws JAXBException {
ConnectionFactory cf = new ConnectionFactory();
MySQLPedidoDAO mspdao = new MySQLPedidoDAO(cf);
PedidoList pl = new PedidoList();
Main.context = JAXBContext.newInstance(Pedido.class);
//Marshaller marshaller = Main.context.createMarshaller();
//marshaller.marshal(new Pedido(41666, new java.util.Date(2017, 3, 11), "Produto C", 41.46f, 0, 4, 6, 235.54), new File("pedido.xml"));
Unmarshaller unmarshaller = Main.context.createUnmarshaller();
Pedido pedidolist = (Pedido) unmarshaller.unmarshal(new File("C:\\Users\\Vickz\\Documents\\NetBeansProjects\\Loja\\pedido.xml"));
Marshaller marshaller = Main.context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(pedidolist, System.out);
/*for(PedidoList pedidolis: unmarshalledPedido.getPedidos()){
System.out.println(pedido.getDataCadastro());
System.out.println(pedido.getNomeProduto());
System.out.println(pedido.getNumControle());
System.out.println(pedido.getQuantidade());
System.out.println(pedido.getValorUnitario());
System.out.println(pedido.getCodCliente());
System.out.println(pedido.getValorTotal());
System.out.println(pedido.getTotal());
}*/
}
Is there any easy way to solve this implementation with JAXB going through the file and splitting each of those fields and then manipulating them somewhere?
What you mean is that you are not able to fill the values in the attributes ?
– Roknauta
That!! What I’m trying to do is read the whole file
xml
that I’m sendingunmarshalling
and what I want is to separate each of the tags and for example record each one in apedido.setDataCadastro(), pedido.setNomeProduto por exemplo
... I’m running the tests by classpublic static main void (string [] args)
but what I want to do is that in the Viewpedidos class (Jswing Form) I can upload the filexml.
Inside there I take each value separately from each tag and insert each one into a Jtextfield, Jcombobox... Hence the entries would be received in formatxml
– Victor
That is, when the user loads the file, the text fields receive the values of the file and the user only inserts without filling
– Victor