| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2006 10:24:16
|
gabiso
Entusiasta Java
![[Avatar]](/images/avatar/48cb136b65a69e8c2aa22913a0d91b2f.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/05/2006 16:32:40
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/06/2006 17:30:59
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/06/2006 18:02:08
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/06/2006 18:31:03
|
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é+....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 01:47:36
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/02/2007 16:31:45
|
gabiso
Entusiasta Java
![[Avatar]](/images/avatar/48cb136b65a69e8c2aa22913a0d91b2f.jpg)
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 xmlns s="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 xmlns si="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>
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2008 09:48:02
|
gabiso
Entusiasta Java
![[Avatar]](/images/avatar/48cb136b65a69e8c2aa22913a0d91b2f.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2008 15:03:00
|
abelgomes
Virtual Machine Man
![[Avatar]](/images/avatar/e14601b19b804b49c4022a1dd205554e.jpg)
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... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2008 08:01:24
|
gabiso
Entusiasta Java
![[Avatar]](/images/avatar/48cb136b65a69e8c2aa22913a0d91b2f.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2011 14:03:14
|
Rafael Nascimento
Debugger
![[Avatar]](/images/avatar/8b9eb4cd5667928a8838f7b9c4555249.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2011 16:12:54
|
gabiso
Entusiasta Java
![[Avatar]](/images/avatar/48cb136b65a69e8c2aa22913a0d91b2f.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2011 18:22:59
|
ovelha
Java Ninja
![[Avatar]](/images/avatar/394201ad68984c677be221f6d9f263fc.jpeg)
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ééééééééééééééééé |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2011 08:39:54
|
Rafael Nascimento
Debugger
![[Avatar]](/images/avatar/8b9eb4cd5667928a8838f7b9c4555249.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/07/2011 14:27:30
|
robsonperassoli
JavaBaby
![[Avatar]](/images/avatar/9643ea653fa4c97e6c0b01346ab1ad6e.jpg)
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 |
|
|
 |
|
|