XSD -> JAVA - Gerar código

Gostaria de saber se alguem conhece algum aplicativo ou algo que funcione como um gerador de código.
Preciso gerar classes JAVA a partir de um código XSD. É possível?

Abraço

1 curtida

Pesquisa por Jaxb e xjc

tem esse post aqui do blog da caelum, que tem um exemplo simples de como usar o JAXB

Eu quero gerar as classes JAVA a partir do XSD e não o contrário. É possível com JAXB?
Eu utilizo Windows XP e também vi muito sobre exportar pra C# e VB .NET.

[quote=max.analista]Eu quero gerar as classes JAVA a partir do XSD e não o contrário. É possível com JAXB?
Eu utilizo Windows XP e também vi muito sobre exportar pra C# e VB .NET.[/quote]

Bom, você deixou claro com esse comentário que não leu o link que eu te passei.

[quote=digaoneves][quote=max.analista]Eu quero gerar as classes JAVA a partir do XSD e não o contrário. É possível com JAXB?
Eu utilizo Windows XP e também vi muito sobre exportar pra C# e VB .NET.[/quote]

Bom, você deixou claro com esse comentário que não leu o link que eu te passei.[/quote]

Sò queria confirmar. MAs confirmei no post. :wink:

Unmarshaller deve me ajudar ^^

Testar aqui.

O comando XJC não funciona porque?
Na linha de comando (DOS") diz que não é um comando válido.

suas variáveis de ambiente estão configuradas corretamente? o xjc fica dentro do diretório bin, do seu JAVA_HOME

Consegui verificar o problema do XJC.
Agora o problema está no momento de criar as classes. Creio que algumas propriedades não estão reconhecendo.

[ERROR] - Cannot resolve the name ‘TChNFe’ to a ‘type definition’ component.

Isso ocorre durante a execução do xjc? esse XSD está correto ?

Isso, durante a execução.

Creio que o XSD é composto de vários arquivos, por isso está dando erro.
Eu estou querendo fazer um sistema de leitura de Nota Fiscal Eletrônica e nos meus testes iniciais gostaria de trabalhar criando as minhas classes Java a partir do XSD disponibilizado no http://www.nfe.fazenda.gov.br/portal/principal.aspx. Creio então que seja válido este XSD.

Vejo que o erro está na definição do tipo de alguns elementos.

Consigo fazer o XJC em todos os arquivos? Você já trabalhou com isso e pode me dar um pontapé inicial?

Abraço.

ah sim, no caso acho que você tem que colocar todos os arquivos no comando…

xjc enviNFe_v2.00.xsd leiauteNFe_v2.00.xsd tiposBasico_v1.03.xsd xmldsig-core-schema_v1.01.xsd…

Faz um tempo que não faço isso, mas acho que é por aí

1 curtida

É isso mesmo.

Existe um XSD que contem os ‘tipos de arquivos’ e em outro XSD, há a declaração de elementos com marcações do ‘type’ definidos no primeiro arquivo.

Exemplificando:

tiposBasicos.XSD

<?xml version="1.0" encoding="UTF-8"?>
<!-- PL_006h - 13/05/11 - correções da NT 2011/004  // v2.0-->
<!-- PL_006f - 29/05/10 - correcao do tipo TDec_1504 para limitar a quantidade de decimais para 4  // v2.0-->
<!-- PL_006f - 09/05/10 - eliminação da possibilidade informar a Inscrição produtor rural na IEDest  // v2.0-->
<!-- PL_006d - 04/10/09 - alterada a ordem do pattern do TIE - adequacao libxml  // v2.0-->
<!-- PL_006d - 20/08/09 - acrescentado o tipo númerico com 10 casas decimais,15 casas inteiras e hora  // v2.0-->
<!-- PL_005d - 11/08/09 - alteração no enumeration do tpais para nova tabela de paises do BACEN-->
<!-- PL_005b - 24/10/08 - acrescentado a tabela do tpais   e outras alterações para eliminar os brancos no início e fim do campo   -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:nfe="http://www.portalfiscal.inf.br/nfe" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:simpleType name="TCodUfIBGE">
		<xs:annotation>
			<xs:documentation>Tipo Código da UF da tabela do IBGE</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="preserve"/>
			<xs:enumeration value="11"/>
			<xs:enumeration value="12"/>
			<xs:enumeration value="13"/>
			<xs:enumeration value="14"/>
			<xs:enumeration value="15"/>
			<xs:enumeration value="16"/>
			<xs:enumeration value="17"/>
			<xs:enumeration value="21"/>
			<xs:enumeration value="22"/>
			<xs:enumeration value="23"/>
			<xs:enumeration value="24"/>
			<xs:enumeration value="25"/>
			<xs:enumeration value="26"/>
			<xs:enumeration value="27"/>
			<xs:enumeration value="28"/>
			<xs:enumeration value="29"/>
			<xs:enumeration value="31"/>
			<xs:enumeration value="32"/>
			<xs:enumeration value="33"/>
			<xs:enumeration value="35"/>
			<xs:enumeration value="41"/>
			<xs:enumeration value="42"/>
			<xs:enumeration value="43"/>
			<xs:enumeration value="50"/>
			<xs:enumeration value="51"/>
			<xs:enumeration value="52"/>
			<xs:enumeration value="53"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TCodMunIBGE">
		<xs:annotation>
			<xs:documentation>Tipo Código do Município da tabela do IBGE</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="preserve"/>
			<xs:pattern value="[0-9]{7}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TChNFe">
		<xs:annotation>
			<xs:documentation>Tipo Chave da Nota Fiscal Eletrônica</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="preserve"/>
			<xs:pattern value="[0-9]{44}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TProt">
		<xs:annotation>
			<xs:documentation>Tipo Número do Protocolo de Status</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="preserve"/>
			<xs:pattern value="[0-9]{15}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TRec">
		<xs:annotation>
			<xs:documentation>Tipo Número do Recibo do envio de lote de NF-e</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="preserve"/>
			<xs:pattern value="[0-9]{15}"/>
		</xs:restriction>
	</xs:simpleType>
	
        ...
</xs:schema>

leiauteNFe_v2.00.XSD


<?xml version="1.0" encoding="UTF-8"?>
<!--  PL_006j_semAncora - 26/10/11 - versao emergencial sem ancora no pattern da placa -->
<!--  PL_006j - 20/10/11 - alteracao no formato da placa do veiculo para aceitar AAA999, AAA9999, AA9999 e AAAA999  // NT2011/005 -->
<!--  PL_006i - 03/07/11 - acrescimo do item 6/7 tpEmis  // NT2011/004 -->
<!--  PL_006i - 10/06/11 - acrescimo do item 8 - Venda a Orgao Publico no motDesoICMS  // NT2011/004 -->
<!--  PL_006i - 13/05/11 - correções da NT 2011/004  // v2.0-->
<!--  PL_006g versao com inclusão de novos CFOP e CST do PIS/COFINS 24/06/2010-->
<!--  PL_006f versao com alteração do NCM para aceitar zeros, CST do ICMSST, vTodDed do grupo da cana 09/05/2010 -->
<!--  PL_006f correção da definição e da lista de valores válidos para alguns campos - vide NT 2010/003 para maiores detalhes - 31/05/2010 -->
<!--  PL_006f correção do tipo básico utilizado para os campos de quantidade, elimição dos CFOP de transportes do TCFOP e criação de TCFOPTransp com CFOP de transportes 31/05/2010 -->
<!--  PL_006e versao com alteração do tipo dhCont para forcar a data no formato AAAA-MM-DDTHH:MM:SS 15/03/2010 -->
<!--  PL_006d versao com correcao do NCM, nSerie, nCano e eliminacao do key constraint do nfeProc 10/03/2010 -->
<!--  PL_006c versao com correcoes 30/12/2009 -->
<!--  PL_006 versao com correcoes 08/12/2009 -->
<!--  versao com alteracoes do tipo token, valida a partir de 03/11/08- PL_005b-->
<!--  versao com atualizacao na UFCons e cPais emi - 21/12/2008-->
<!-- PL_006m - 01/09/2012 - correções da NT 2012/003 -->
<!-- PL_006n - 01/09/2012 -  inclusão do codANP 810201001  -->
<xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.portalfiscal.inf.br/nfe" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema_v1.01.xsd"/>
	<xs:include schemaLocation="tiposBasico_v1.03.xsd"/>
	<xs:complexType name="TNFe">
		...
			<xs:element name="nRec" type="TRec">
				<xs:annotation>
					<xs:documentation>Número do Recibo Consultado</xs:documentation>
				</xs:annotation>
			</xs:element>
                ...
</xs:schema>

O type ‘TRec’ definido no primeiro arquivo está sendo definido em um element do segundo arquivo.

Vou realizar alguns testes aqui e volto a me posicionar neste Post.

Vlw, grato! :slight_smile:

Consegui gerar.

xjc tiposBasico_v1.03.xsd leiauteNFe_v2.00.xsd -p br.com.jaxb.nfe

Agora é ver se consigo trabalhar com isto. Obrigado galera :slight_smile:

1 curtida

Percebi que todos os objetos das classes criadas são do tipo String.
Porque? (a pergunta que não quer calar)

É um XML, ué…

No fundo no fundo ele é uma String.

Pensei que no XSD eram definidos os tipos de cada atributo de cada classe.
Por exemplo:

Numero da nota fiscal do tipo inteiro.

Integer nNF;

public void setNNF(Integer nNF){
     ...
}

public Integer getNNF(){
      return this.nNF;
}

Mas não, vem tudo String.
É possível montar a estrutura de acordo com o type dos elementos ?

Bom, quando eu usei o JAXB eu deixei assim mesmo, nem me preocupei.

Ainda mais porque se você tiver que formatar valores monetários, casas decimais, terá que deixar como String

Ééé, ta indo. Ta funcionando tranquilo. To pensando aqui numa forma de trabalhar da melhor maneira possível.
Seria essencial descobrir o tipo de nota antes de começar a preencher. Mas tudo bem, da pra passar por isso.

Você saberia me informar um tutorial onde se aprende a fazer um layout dinâmico?