Aprendendo Apache XMLBEANS  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
gabiso
Entusiasta Java
[Avatar]

Membro desde: 28/04/2006 08:49:25
Mensagens: 15
Localização: Curitiba - PR
Offline

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:



Agora vamos criar uma instância da classe Pessoa:




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...



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 .



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...



Acima temos um objeto principal representando o documento e só através dele é que pegamos o objeto Vo.
... pegando dados



... alterando dados



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???



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

This message was edited 1 time. Last update was at 11/03/2008 09:45:23

[WWW] [MSN]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Com que finalidade você está usando os beans gerados com o XML Beans?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Dennys
JavaEvangelist

Membro desde: 06/04/2003 15:28:35
Mensagens: 399
Localização: Taboão da Serra
Offline

danieldestro wrote:Com que finalidade você está usando os beans gerados com o XML Beans?



Opa! Comecei a trabalhar com a plataforma da BEA...

O pessoal usa bastante como parametro de métodos de WebServices...

Ah! Uma outra coisa bacana é fazer transformação de um XML para outro XML com layouts diferentes....


Abaços!
[MSN] [ICQ]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Inútil para web services se você usa algo como Apache Axis ou outro engine.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Dennys
JavaEvangelist

Membro desde: 06/04/2003 15:28:35
Mensagens: 399
Localização: Taboão da Serra
Offline

danieldestro wrote:Inútil para web services se você usa algo como Apache Axis ou outro engine.


Como disse sou novo com a plataforma... não podemos julgar só pelas minhas palavras... vamos na fonte...

http://www.bea.com/


Só um detalhe... o WebLogic... usa o Apache Axis como engine...




Até+....
[MSN] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
gabiso
Entusiasta Java
[Avatar]

Membro desde: 28/04/2006 08:49:25
Mensagens: 15
Localização: Curitiba - PR
Offline

Sim, é possível...criar mais de um objeto pessoa

No exemplo eu criei como simple type...
mas voce pode criar mais uma ramificação... e repetir o pessoa... na hora de transformar em objeto java.. vai vir como array

Exemplificando::


Veja que voce tem um element persons: que no corpo da tag dele tem uma sequence de elements person

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlnss="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>


o xml desse xsd ficaria algo parecido com isso::

<?xml version="1.0" encoding="ISO-8859-1"?><persons xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd"><person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person><person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person><person>
<full_name>Stale Refsnes</full_name>
</person></persons>
[WWW] [MSN]
gabiso
Entusiasta Java
[Avatar]

Membro desde: 28/04/2006 08:49:25
Mensagens: 15
Localização: Curitiba - PR
Offline

Complementando...

Para gerar classes Java a partir do XSD

1- Ajustar variaveis de ambiente

export XMLBEANS_HOME=<diretorio de instalacao>
export PATH=$PATH:$XMLBEANS_HOME/bin
export CLASSPATH=$XMLBEANS_HOME/lib/xbean.jar:$CLASSPATH


2 - Executar comando scomp para gerar classes

Ex::
scomp -out tutorials\gettingstarted\lib\easypo.jar schemas\easypo\easypo.xsd

primeiro parametro é o local e o nome do jar com as classes
segundo parametro é aonde esta o xsd
[WWW] [MSN]
abelgomes
Virtual Machine Man
[Avatar]

Membro desde: 12/06/2008 17:08:23
Mensagens: 706
Localização: Manaus-AM
Offline

como eu faço para cria r o PessoaDocument??

...the only easy day was yesterday...
[Email] [MSN]
gabiso
Entusiasta Java
[Avatar]

Membro desde: 28/04/2006 08:49:25
Mensagens: 15
Localização: Curitiba - PR
Offline

Duas maneiras de se obter o objeto pessoa document.

um eh criando um novo xml.. e outro ehh carregando um xml jah existente.

Cria um novo xml.



carrega o xml existente.


[WWW] [MSN]
Rafael Nascimento
Debugger
[Avatar]

Membro desde: 03/02/2011 20:54:16
Mensagens: 70
Offline

Olá, galera,

Estou tentando usar o xmlBeans para trabalhar com a NFe, mas estou obtendo um problema com o objeto retornado pelo pelo método parse. Todos os objetos (tags) com exceção do objeto raiz, estão vindo null. Os getters estão obedecendo a estrutura definida pelo XSD, porém estão todos null.

o arquivo xsd que estou usando é o leiauteNFe_v2.00.xsd

se alguém pudar ajudar, agradeço

[Email]
gabiso
Entusiasta Java
[Avatar]

Membro desde: 28/04/2006 08:49:25
Mensagens: 15
Localização: Curitiba - PR
Offline

Ola Rafael,

Experimente re-gerar as classes java através do xsd, pode ser que voce tenha alterado a estrutura
e não tenha feito isso.

Escrevi esse tutorial a bastante tempo e hoje existe implementação da própria Sun - chama-se JAXB.

É bem simples, somente algumas nomenclaturas mudam. funciona da mesma forma, após escrever o
xsd é necessário rodar um comando para gerar as classes java.

Exemplos..
http://www.oracle.com/technetwork/articles/javase/index-140168.html

[WWW] [MSN]
ovelha
Java Ninja
[Avatar]

Membro desde: 12/09/2007 13:17:41
Mensagens: 281
Offline

Será que seu arquivo.xml que vc esta fazendo o parse esta sem definições de namespace ou com definições incorretas?

bééééééééééééééééé
Rafael Nascimento
Debugger
[Avatar]

Membro desde: 03/02/2011 20:54:16
Mensagens: 70
Offline

Gabiso, estou tentando usar o JAXB:


mas na linha 7 estou obtendo o seguinte erro:

ei gerei todas as classes a partir de todos os esquemas XSD contidos na pasta PL_006g (a mais recente) do portal da NFe (http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=/fwLvLUSmU8=)

não estou sabendo como corrigir esse erro. Se alguem puder dar alguma dica, ajudaria muito
[Email]
robsonperassoli
JavaBaby
[Avatar]

Membro desde: 31/10/2008 14:07:32
Mensagens: 76
Offline

Criei um tutorial bem simples no meu blog ensinando como começar com xmlbeans.

Segue o link: http://robsonp.com/01/2011/xml-com-xmlbeans/

Valeu

Robson Gian Perassoli
http://robsonp.com
robsonperassoli@gmail.com
[WWW]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team