• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rui Carlos

Serialização de objectos para XML

8 mensagens neste tópico

Estou neste momento a desenvolver um pequeno software onde tenho de guardar objectos em disco.

Depois de um pequeno problema ao ler os objectos que tinha guardado usando o formato binário do Java, lembrei-me do XML.

Fiz uma pesquisa no Google, e encontrei algumas soluções para guardar objectos em ficheiros XML.

Ainda só experimentei uma delas (em que nem sequer precisava de recorrer a bibliotecas externas), mas não fui muito bem sucedido, pois não conseguia guardar estruturas de dados ligeiramente mais complexas.

Assim, gostaria de saber se alguém costuma fazer isto, i.e., serializar objectos em XML, e se sim, quais as soluções que usam, quais os problemas que apresenta, quais as vantagens e desvantagens dessa solução, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Curiosamente, essa foi a primeira solução que testei, e não funcionou muito bem...

Quando tento serializar uma estrutura do tipo TreeMap<Date,ArrayList>, o resultado é:

<object class="java.util.TreeMap"/>

Ou seja, não consegui guardar o objecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hummm isso é estranho, faz lá um teste, não especifiques os tipos mete só TreeMap e vê lá se funciona.

Por acaso nunca testei com estruturas da API.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só me aventurei nesse tipo de soluções uma vez, tenho usado sempre a serialização standard para guardar objectos ou usar um motor de bases de dados para objectos.

Como problemas, o elevado tempo de desenvolvimento comparado com o tempo requerido para a serialização standard, dado que implica que sejas tu a controlar o mecanismo de serialização, tem, no entanto como vantagem o ponto de, ao controlares tudo, teres mais flexibilidade no que queres guardar.

Problemas:

- É tu que tens de criar o código de serialização e tens de ter atenção a todos os pormenores de serialização

- O teu código será naturalmente mais lento e exigente, embora este ponto seja discutível

- Bugs no código de serialização são mais difíceis de resolver.

Vantagens:

- Maior controlo sobre a forma como os dados são guardados

- Permite outros formatos.

Mas como não especificaste bem o problema não sei se será uma boa opção alterares o processo de serialização. Já agora que problemas te deu a serialização para o formato binário?

Depois de ler o texto do magician devo dizer que não posso considerar isso como um processo diferente de serialização, o que está a ser feito é que está a ser usada a serialização padrão, mas optando por uma stream de saída diferente e que daí altera o formato dos dados. Quando mencionei as vantagens/desvantagens foi sobre alterar efectivamente o processo de serialização para métodos teus e não para métodos usados pelo mecanismo oferecido pelo Java. No caso apresentado apenas fazem a conversão dos dados binários resultantes da serialização para uma versão XML, logo se tiveste problemas no formato binário, ou os problemas realmente são do mecanismo e irão persistir ou então foi algo introduzido por ti e estar a alterar o formato é dar a volta ao problema em vez de o resolver.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tive a analisar mais ou menos aquilo e parece que o problema reside nos objectos Date, provavelmente o Date não implementa totalmente o conceito Java Bean como é necessário para este tipo de serialização.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema no modo binário estava no facto de ter adicionado métodos a uma classe, e isso ter alterado o suid da mesma, impedindo-me de ler dados guardados anteriormente.

Mas não queria que a discussão fosse para este ponto. Isto é outra questão, que já resolvi, e foi apenas a minha motivação para criar esta discussão.

Acho que o XML é uma das melhores alternativas para armazenar dados, pois podemos ler os dados directamente, ou até os podemos editar sem precisar do programa. Ao mesmo tempo, existe um amplo suporte para este formato em termos de bibliotecas, o que facilita a utilização deste formato.

Assim, o que eu pretendia era mais conhecer diferentes bibliotecas/softwares que suportem isto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema no modo binário estava no facto de ter adicionado métodos a uma classe, e isso ter alterado o suid da mesma, impedindo-me de ler dados guardados anteriormente.

Esse é um problema que a serialização, seja em modo binários seja em modo XML ou outro qualquer, tem, embora ao converteres para um formato de texto esse problema possa ser "escondido", não deixa de estar lá.

Acho que o XML é uma das melhores alternativas para armazenar dados (...)

XML é uma boa alternativa mas tem um objectivo diferente do da serialização. Portanto o que querias não era serializar objectos mas sim apenas guardar os dados da tua aplicação :).

Quando trabalho com XML, por norma, utilizo apenas as capacidades da plataforma, não uso bibliotecas extra. Isto porque acho que o que existe é suficiente e não necessito de acrescentar mais, além de ser mais portável e flexível já que não fico preso a uma biblioteca especifica.

Por isso não conheço alternativas, no papel de bibliotecas externas, para ler/escrever ficheiros XML, seja usando SAX seja usando DOM, faço tudo com os packages que vêm por omissão no JDK.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora