No mundo J2EE, o poderoso xml está cada vez mais presente, e sendo representado e utilizado de diversas formas e tecnologias,
- podendo ser através de web-services,
- como camada middleware representando entidade comum para comunicação de sistemas;
- ou mesmo como dados em ambientes de integração;
e é nesse mundo que entra os XMLBEANS.
A idéia XMLBEAN foi desenvolvida pela BEA Systems , sendo utilizada como recurso na maioria de seus produtos; em Setembro de 2003 a tecnologia foi doado para a Apache para ela dar continuidade ao projeto.
Aprendendo XMLBEANS
O XMLBean é uma maneira de representar e manipular dados e documentos em XML através do Java.
O foco principal de um XMLBEAN é um XML Schema ( arquivo XSD ). No arquivo XSD é definido como os dados são representados indicando os seus atributos e também sua tipagem.
A idéia aqui é a mesma de quando você escreve o codigo em um arquivo TLD para criar uma nova TAG JSP.
No TLD você descreve como deve funcionar, "quais são as regras a seguir" ;; e no JSP voce simplesmente utiliza a tag.
É através dos Schemas (XSD) é que os dados serão ?instanciados? e serão representados em arquivos XML.
Pensemos da seguinte maneira:: "O XSD é a classe e o xml é o objeto da classe"
Imagine sua classe Vo chamado Pessoa com os atributos nome e sobrenome:
Mãos a obra, vamos programar:
public class Pessoa{
private String nome;
private String sobrenome;
public String getNome(){
peturn nome;
}
public String getSobrenome(){
return sobrenome;
}
public void setNome(String paramNome){
nome = paramNome;
}
public void setSobrenome(String paramSobrenome){
sobrenome = paramSobrenome;
}
}
Agora vamos criar uma instância da classe Pessoa:
Pessoa pessoa = new Pessoa();
Pessoa.setNome("Fulano");
Pessoa.setSobrenome("de Tal");
Quando criamos um objeto de uma determinada classe, especificamente falando de VOs, estamos criando uma estrutura e um comportamento predefinido pela classe, ou seja, através dos códigos acima voce tem o objeto pessoa que está guardando a informação ?Fulano? e ?de Tal? em seus atributos Nome e Sobrenome respectivamente e seguindo exatamente as normas regidas pela sua classe.
Agora faremos a mesma coisa utilizando XMLBEANS.
Definindo sua "Classe"
Quando voce escreve um Vo… voce começa escrevendo a classe com seus atributos e métodos get e set para cada atributo…
É isso que faremos agora…
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://openuri.org/easypo"
xmlns:po="http://openuri.org/easypo"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Pessoa">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Credo!!! meu Deus!! O que é isso aí em cima??? Isso aí em cima é um arquivo XSD ( Schema ) nele percebemos a definição do nome da classe ?Pessoa? como um elemento principal e dentro do corpo é definido propriedades ?também elemento? que representa os atributos da nossa classe Pessoa para só depois fechar o elemento principal “Pessoa”.
Não se preocupe com a sintaxe e definição das tags, pois raramente vai criar um xsd na mão a partir do zero. Existem ferramentas para geração do arquivo, o foco aqui é entender a idéia do que é um xsd.
Instanciando um objeto da classe Pessoa
Agora faremos uma instância da nossa classe e atribuiremos informação aos atributos do nosso objeto .
<po:Pessoa xmlns:po="http://openuri.org/easypo">
<po:Pessoa>
<po:nome>Fulano</po:nome>
<po:sobrenome>de Tal</po:sobrenome>
</po:Pessoa>
</po:Pessoa>
Vemos no xml acima que ele segue as normas regidas pelo xsd (“classe”) e que a propriedade ?po:nome? tem o conteúdo ?Fulano? e a propriedade ?po:sobrenome? tem o conteúdo ?de Tal? e ambos estão cobertos pelo emento principal chamado Pessoa.
Acessando atributos do objeto
Da mesma maneira que invoco get e set do meu objeto Vo em Java eu também posso acessar e alterar meu XMLBEAN.
Carregando xml…
PessoaDocument pesDoc = PessoaDocument.Factory.parse(new File("Pessoa.xml"));
Pessoa pes = pesDoc.getPessoa();
Acima temos um objeto principal representando o documento e só através dele é que pegamos o objeto Vo.
… pegando dados
pes.getNome();
pes.getSobrenome();
… alterando dados
pes.setNome( ?ciclano?);
Ei??? é igual ao VO Java??? é fácil assim??? cadê o SAX e o DOM??? Sim meu pequeno gafanhoto é tão fácil quanto.
No Java eu posso dar um new e criar um novo objeto a qualquer momento e em xmlBean como eu faço isso???
PessoaDocument pesDoc = PessoaDocument.Factory.newInstance();
Pessoa novaPessoa = PessoaDocument.addNewPessoa();
Pronto… agora é só aplicar get e set sobre o objeto novaPessoa… igual voce faria em um objeto Vo comum.
Vantagens e desvantagens
Ei??? Qual é a vantagem do xmlbean sobre o meu Vo java comum???
Bom, acredito que o arquivo xml é muito mais portável que o objeto Vo java type… pois pode ser acessado a qualquer momento e por qualquer aplicação aonde quer que ela esteja; em outro contexto; em outro servidor; em outra rede; em outro continente… aff exagerei!!! rsrrs e também seguindo as regras definidas por voce no seu Schema ( XSD)
Uhnnn ahh legal!!! Intão vou trocar todos os meus VOs por xmlbeans???
O fato de carregar e descarregar arquivo xml e ter SAX e DOM para manipulação xml por traz do framework implica em performance em aplicações, portanto a utilização de xmlbeans é encargo do desenvolvedor viabilizando custo/beneficio e visando também o tamanho de sua aplicação.
Acredito que as reais vantagens no emprego de XMLBEANS é quando voce gostaria que um determinado Vo fique disponível para acesso externo independente de tecnologia e local físico/lógico.
Se você realmente se interessou pela tecnologia, por favor não se atenha a esse texto tabajara, prossiga seus estudos através dos links abaixo!!!
Referências
Pagina Apache XMLBeans - Documentação - Tutoriais - Downloads - Exemplos
http://xmlbeans.apache.org
Eclipse plug-in - geração de arquivos xsd / xml / java ( value objects )
http://sourceforge.net/projects/xmlbeansplug
Eclipse Plug-in geracao de arquivos xsd a partir de java code
http://www.java-x.us
Artigo dev2dev BEA ? XMLBEANS - Getting Started
http://e-docs.bea.com/workshop/docs81/doc/en/workshop/guide/xmlbeans/conGettingStartedwithXMLBeans.html
Gabriel Ishigami Solana
SCJP - Sun Certificied Java Programmer
SCWCD - Sun Certificied Web Components Developer
Linux user #440457
http://counter.li.org