Serializando vector para um XML

Ae galera blz?? tenho este codigo abaixo que gravar um object!

XMLEncoder encXML; try { encXML = new XMLEncoder( new BufferedOutputStream( new FileOutputStream( strFileName+".xml" ))); encXML.writeObject(obj); encXML.close(); } catch (FileNotFoundException e) { JOptionPane.showMessageDialog(null,e.toString()+"\nErro ao salvar o arquivo "+strFileName); }

PROBLEMA:

Eu estou gravando um Vector, este Vector tem dentro atributos e mais um vector com dois atributos(do tipo Point)! e quando eu vou gravar, ele nao esta salvando os atributos Point de dentro do vector, alguem sabe me dizer o porque? E qual seria a solução para isso???

Obrigado

ninguem tem ideia do porque que isso ocorre?

a classe Point implementa java.io.Serializable ?

nao tenho menor ideia, heheh vou ver, ja atualizo aqui!!!

java.awt
Class Point

java.lang.Object
extended byjava.awt.geom.Point2D
extended byjava.awt.Point

All Implemented Interfaces:
Cloneable, Serializable

tenta:

      encXML.writeObject( obj );
      encXML.flush();
      encXML.close();

será q o segredo é o flush !?

eh noa nao faz menos diferença!!! nao tenho menor ideia do que fazer!! ta fodiz, alguma solução?

Vector não é um JavaBeans, não tem pq funcionar. XMLEncoder é para JavaBeans apenas.

XStream! XStream! XStream! :slight_smile:

fiz

import java.awt.Point;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Vector;

public class JugTest
{

	public static void main(String[] args)
	{
		Vector superVector = new Vector();
		Point superPoint = new Point(1,1);
		Point superPoint2 = new Point(2,2);
		
		superVector.add(superPoint);
		superVector.add(superPoint2);
		
		
		XMLEncoder encXML;
		try
		{
			encXML = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(
					"ser.xml")));
			encXML.writeObject(superVector);
			encXML.close();
		}
		catch (FileNotFoundException e)
		{
		}
	}
}

ser.xml ficou assim:

<?xml version="1.0" encoding="UTF-8"?> 
&lt;java version="1.5.0_03" class="java.beans.XMLDecoder"&gt; 
 &lt;object class="java.util.Vector"&gt; 
  &lt;void method="add"&gt; 
   &lt;object class="java.awt.Point"&gt; 
    &lt;int&gt;1&lt;/int&gt; 
    &lt;int&gt;1&lt;/int&gt; 
   &lt;/object&gt; 
  &lt;/void&gt; 
  &lt;void method="add"&gt; 
   &lt;object class="java.awt.Point"&gt; 
    &lt;int&gt;2&lt;/int&gt; 
    &lt;int&gt;2&lt;/int&gt; 
   &lt;/object&gt; 
  &lt;/void&gt; 
 &lt;/object&gt; 
&lt;/java&gt; 

Ja tentei usar o XStream, mas nao consigo ler o arquivo, ele me retorna uma string imensa!!! heheh, tem como vc me ajudar? ou me passar um exemplo seu??

Obrigado

[quote=foia]fiz

import java.awt.Point;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Vector;

public class JugTest
{

	public static void main(String[] args)
	{
		Vector superVector = new Vector();
		Point superPoint = new Point(1,1);
		Point superPoint2 = new Point(2,2);
		
		superVector.add(superPoint);
		superVector.add(superPoint2);
		
		
		XMLEncoder encXML;
		try
		{
			encXML = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(
					"ser.xml")));
			encXML.writeObject(superVector);
			encXML.close();
		}
		catch (FileNotFoundException e)
		{
		}
	}
}

ser.xml ficou assim:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.5.0_03" class="java.beans.XMLDecoder"> 
 <object class="java.util.Vector"> 
  <void method="add"> 
   <object class="java.awt.Point"> 
    <int>1</int> 
    <int>1</int> 
   </object> 
  </void> 
  <void method="add"> 
   <object class="java.awt.Point"> 
    <int>2</int> 
    <int>2</int> 
   </object> 
  </void> 
 </object> 
</java> 

po ai funcionou, nao da para entender! Eu tou usando o JAVA 1.5.3, e nao entendi o link que vc me passou? O que eu devo fazer???

Obrigado!!!

ao q parece na versão 1.4.x existia esse bug.
posta o xml que o teu programa gera.

ta ai…

  <?xml version="1.0" encoding="UTF-8" ?> 
- <java version="1.5.0_03" class="java.beans.XMLDecoder">
- <object class="java.util.Vector">
- <void method="add">
- <object class="br.pucpr.elements.Retangulo">
- <void property="colorB">
- <object class="java.awt.Color">
  <int>102</int> 
  <int>255</int> 
  <int>102</int> 
  <int>255</int> 
  </object>
  </void>
- <void property="colorP">
- <object class="java.awt.Color">
  <int>255</int> 
  <int>0</int> 
  <int>0</int> 
  <int>255</int> 
  </object>
  </void>
- <void property="opaque">
  <boolean>true</boolean> 
  </void>
  </object>
  </void>
  </object>
  </java>

só ta faltando os pontos, que odio isso!! será que tu sabe alguma solução???

valeu

flws

  • tem certeza que está incluindo os Point no Vetor !?
  • troca o Vector por ArrayList.

chutômetro puro !! :mrgreen:

Qual foi o codigo que vc usou pra fazer isso com XStream? Aqui eu nunca tive problemas…

[quote=foia]- tem certeza que está incluindo os Point no Vetor !?

  • troca o Vector por ArrayList.

chutômetro puro !! :mrgreen: [/quote]

Ja tinha pensado nisso, mas antes fui fazer uma tentativa, olha soh:

tentei passar uma coisa bem simples para xml:

private Point p = new Point(2,2);

hehe ele nao grava, o problema é com o Point mesmo!! foddaaa!!!

Olha kra eu usei no esquema aqui do tutorial do GUJ, mas os problemas foram:


<?xml version="1.0" encoding="UTF-8" ?> 
 - <java version="1.5.0_03" class="java.beans.XMLDecoder">
 - <object class="java.util.Vector">
 - <void method="add">
 - <object class="br.pucpr.elements.Retangulo">
 - <void property="colorB">
 - <object class="java.awt.Color">
   <int>102</int> 
   <int>255</int> 
   <int>102</int> 
   <int>255</int> 
   </object>
   </void>
 - <void property="colorP">
 - <object class="java.awt.Color">
   <int>255</int> 
   <int>0</int> 
   <int>0</int> 
   <int>255</int> 
   </object>
   </void>
 - <void property="opaque">
   <boolean>true</boolean> 
   </void>
   </object>
   </void>
   </object>
   </java>

Usando o XStream ele nao salva como acima, ele salva mo zoneado, nao cria por exemplo:

ele fica tudo em preto, nao fica como um xml, com as tags e etc, será que você nao poderia me passar por e-mail como vc fez???

Valeussss

corvao (belo nome, seus pais devem estar orgulhosos :mrgreen:), posta aqui o codigo que vc usou pra serializar os objetos usando o XStream. Provavelmente tem algum vacilo ali.


XStream xstream = new XStream();

String primitivasXML= xstream.toXML(vetElements);
/*
* vetElements é um Vector;
* Esse Vector contem vários objetos, esses objetos são  AbstractPrimitiva 
*que tem os atributos Cor de Borda, Cor de Fundo, String, numPontos,
*Fonte, Boolean opaque, Um vector(que contem um ou 2 pontos da 
*java.awt.Point), e + os metodos da classe 
*/

XMLEncoder encXML;
		try {
			encXML = new XMLEncoder( 
			                         new BufferedOutputStream( 
			                         new FileOutputStream( "teste.xml" )));
			encXML.writeObject(primitivasXML); 
			encXML.flush();
			encXML.close();

isso ae, qual o erro???

olá, consegui gerar o xml usando seu exemplo, como faço para fazer o inverso…ler o xml e gerar um Vector?

meu xml:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_01" class="java.beans.XMLDecoder"> 
 <object class="java.util.Vector"> 
  <void method="add"> 
   <array class="java.lang.String" length="2"> 
    <void index="0"> 
     <string>Uliana</string> 
    </void> 
    <void index="1"> 
     <string>32487954</string>
    </void> 
   </array> 
  </void> 
  <void method="add"> 
   <array class="java.lang.String" length="2"> 
    <void index="0"> 
     <string>Paulo</string> 
    </void> 
    <void index="1"> 
     <string>38452597</string> 
    </void> 
   </array> 
  </void> 
  <void method="add"> 
   <array class="java.lang.String" length="2"> 
    <void index="0"> 
     <string>Uliana</string> 
    </void> 
    <void index="1"> 
     <string>84569874</string> 
    </void> 
   </array> 
  </void> 
  <void method="add"> 
   <array class="java.lang.String" length="2"> 
    <void index="0"> 
     <string>Uliana</string> 
    </void> 
    <void index="1"> 
     <string>95369874</string> 
    </void> 
   </array> 
  </void> 
 </object> 
</java> 

meu codigo:

Vector v = new ExecutarSql().consultaTodosContatos();// retorna um Vector de String [2]		
		
		
				
		XMLEncoder encXML;   
        try   
        {   
            encXML = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(   
                    "C:\\teste.xml")));   
            encXML.writeObject(v);
            encXML.close();   
        }   
        catch (Exception e)   
        {   
        	System.out.println("Erro: "+e);
        }  

Obrigado.