Mudanças entre as edições de "XSD To Java Object (JAXB Plugin)"

De Wiki do Leitão
Ir para: navegação, pesquisa
(Criou página com 'É possível utilizar o Java para gerar Objetos que representam as informações usados em um WebService. Para criar esses objetos vamos precisar primeiro dos arquivos XSD do webservice. De posse dos XSD devemos coloca-los em alguma pasta dentro do projeto, mesmo que temporariamente, para que a IDE possa encontra-lo. Agora basta seguir os passos abaixo: '''1.''' Clique com o botão direito, no menu Generate > JAXB Classes... para abrir o wizard. File:XSDToJava1.jpg...')
 
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 21: Linha 21:




Para os serviços da NFe, recomendo que para cada XSD gerado se crie um pacote separado para esses arquivos mesmo que muitos arquivos possam ser reaproveitados (por serem o mesmo tipo internamente). Acredito que seja melhor ter alguns arquivos repetidos do que conflitos futuros por versões diferentes dos serviços publicados da SEFAZ.}}
Para os serviços da NFe, recomendo que para cada XSD gerado se crie um pacote separado para esses arquivos mesmo que muitos arquivos possam ser reaproveitados (por serem o mesmo tipo internamente). Acredito que seja melhor ter alguns arquivos repetidos do que conflitos futuros por versões diferentes dos serviços publicados da SEFAZ.
 
Além disso, a cada XSD que se criam novos arquivos, muitos se sobrepõe por usarem o mesmo tipo e arquivos de dependências entre os XSDs. Caso alguma alteração/adaptação tenha sido realizada nos objetos criados anteriormente, ela será perdida nos arquivos que forem sobrepostos. Alterações como '''@XMLRootElement()''' precisarão ser refeitas.
 
}}
 
 
{{nota|Falta do @XMLRootElement()|Ao criar os objetos a partir do XSD da SEFAZ, o JAXB não inclui a annotation de identificação do objeto raíz nos elementos necessários por conta da estrutura com o XSD da SEFAZ foi montado.
 
Para solucionar isso, em cada objeto que representa uma tag raiz de algum serviço é necessário incluir a annotation manualmente para que o JAXB consiga serializar/desserializar o XML corretamente.
 
Exemplo: na Classe TEnviNFe, que representa a tag enviNFe utilizada no serviço de envio de NFe para autotização, é necessário adicionar a seguinte annotation à classe:
<pre>@XmlRootElement(name = "enviNFe")</pre>
}}
}}

Edição atual tal como às 19h37min de 29 de agosto de 2023

É possível utilizar o Java para gerar Objetos que representam as informações usados em um WebService.

Para criar esses objetos vamos precisar primeiro dos arquivos XSD do webservice. De posse dos XSD devemos coloca-los em alguma pasta dentro do projeto, mesmo que temporariamente, para que a IDE possa encontra-lo.

Agora basta seguir os passos abaixo:


1. Clique com o botão direito, no menu Generate > JAXB Classes... para abrir o wizard.

XSDToJava1.jpg


2. Escolha o projeto onde as classes geradas devem ser colocadas

XSDToJava2.jpg


3. Na tela seguinte defina o package que deseja colocar as classes e clique em Finish.

XSDToJava3.jpg


Stop 256.png
Escolha o Pacote com Cuidado
Dependendo das definições do XSD o JAXB cria sua estrutura utilizando o JAXBElement, e um factory para criar os objetos sob demanda. Caso seja feito um refactory os objetos podem parar de funcionar com um erro completamente distorcido como NumberFormatException.


Para os serviços da NFe, recomendo que para cada XSD gerado se crie um pacote separado para esses arquivos mesmo que muitos arquivos possam ser reaproveitados (por serem o mesmo tipo internamente). Acredito que seja melhor ter alguns arquivos repetidos do que conflitos futuros por versões diferentes dos serviços publicados da SEFAZ.

Além disso, a cada XSD que se criam novos arquivos, muitos se sobrepõe por usarem o mesmo tipo e arquivos de dependências entre os XSDs. Caso alguma alteração/adaptação tenha sido realizada nos objetos criados anteriormente, ela será perdida nos arquivos que forem sobrepostos. Alterações como @XMLRootElement() precisarão ser refeitas.



Note 64.png
Falta do @XMLRootElement()
Ao criar os objetos a partir do XSD da SEFAZ, o JAXB não inclui a annotation de identificação do objeto raíz nos elementos necessários por conta da estrutura com o XSD da SEFAZ foi montado.

Para solucionar isso, em cada objeto que representa uma tag raiz de algum serviço é necessário incluir a annotation manualmente para que o JAXB consiga serializar/desserializar o XML corretamente.

Exemplo: na Classe TEnviNFe, que representa a tag enviNFe utilizada no serviço de envio de NFe para autotização, é necessário adicionar a seguinte annotation à classe:

@XmlRootElement(name = "enviNFe")