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?
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.
Ééé, 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?
De acordo com cada tipo de NFe eu terei que preencher alguns itens.
Gostaria de saber se é possível montar um layout mais flexível. Por exemplo, meu sistema vai identificar automaticamente qual seria o tipo de NFe.
No entanto, para não ter que gerar uma tela pra cada tipo de nota, gostaria de ver a possibilidade de ter um formulário dinamico, hora com mais campos, hora com menos, de acordo com a identificação da nota e/ou de preenchimento dos campos.
Agora é ver se consigo trabalhar com isto. Obrigado galera :)[/quote]
Obrigado, consegui gerar as classes também segundo a sua dica.
Só uma pergunta, após executar esse comando você encontrou alguns WARNINGS?
Aqui gerou as classes, mas no prompt foi informado que alguns atributos não puderam ser mapeados para um enum (pelo menos foi isso que entendi), isso tem algum problema?
Aqui estão os avisos:
[WARNING] Simple type “TcProdANP” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 792, current limit: 256. You can use customization attrib
ute “typesafeEnumMaxMembers” to extend the limit.
line 5541 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/leiauteNFe_v2.00.xsd
[WARNING] Simple type “Tpais” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 275, current limit: 256. You can use customization attribute
“typesafeEnumMaxMembers” to extend the limit.
line 333 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/tiposBasico_v1.03.xsd
[WARNING] Simple type “TCfop” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 518, current limit: 256. You can use customization attribute
“typesafeEnumMaxMembers” to extend the limit.
line 5013 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/leiauteNFe_v2.00.xsd
Meu amigo, eu tive que parar o projeto pois assumi outros setores da empresa.
Quanto aos Warnings não te preocupes, apenas verifique se os nós mostrados foram extraídos com o conteúdo correto. Se estiver tudo ok, pode validar isso. Ocorreu um erro quanto ao limit ultrapassado, nada demais. Verifica como o Java trata esse erro, se ele corta o valor no limit, ou se ele extrai toda informação e sugere que você altere as validações.
E dai utilizei o comando assim:
xjc -b binding.xml tiposBasico_v1.03.xsd leiauteNFe_v2.00.xsd
Funcionou, não apareceu nenhum aviso, erro etc!
Porém, observando esses avisos que apareciam antes de usar o binding observei que mesmo usando o binding.xml, TcProdANP, Tpais e TCfop não foram gerados.
Tem algum problema em ficar sem eles? Ou no caso deverei mapear manualmente?
Obrigado
[quote=Leandro Rocha][quote=max.analista]
[WARNING] Simple type “TcProdANP” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 792, current limit: 256. You can use customization attrib
ute “typesafeEnumMaxMembers” to extend the limit.
line 5541 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/leiauteNFe_v2.00.xsd
[WARNING] Simple type “Tpais” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 275, current limit: 256. You can use customization attribute
“typesafeEnumMaxMembers” to extend the limit.
line 333 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/tiposBasico_v1.03.xsd
[WARNING] Simple type “TCfop” was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 518, current limit: 256. You can use customization attribute
“typesafeEnumMaxMembers” to extend the limit.
line 5013 of file:/D:/Meus%20Documentos/Documentos%20Leandro/GeraþÒo%20de%20NFE%20com%20Java/PL_006q/leiauteNFe_v2.00.xsd
Resolvido, consegui gerar todos os nós, pelo menos é o que pareceu aqui. :thumbup:
Depois de muita pesquisa e vários teste repletos de ERRORS e WARNINGS consegui montar um arquivo de binding necessário para gerar todos os nós TcProdANP, Tpais e TCfop, sem nenhum aviso ou erro.
Conferi as classes que foram geradas e pelo jeito está tudo ok, graças a Deus.
Vou deixar aqui as configurações que utilizei:
binding.xml
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<!-- Configurações globais de binding -->
<jaxb:bindings >
<jaxb:globalBindings
typesafeEnumMaxMembers="2000"
localScoping="toplevel"
typesafeEnumMemberName="generateName"
/>
</jaxb:bindings>
<!--
Configurações de binding para tipos que não são mapeados automaticamente ou são ignorados:
Neste caso foram:
Tpais (simpleType) em 'tiposBasico_v1.03.xsd';
TcProdANP (simpleType) em 'leiauteNFe_v2.00.xsd';
TCfop (simpleType) em 'leiauteNFe_v2.00.xsd'.
-->
<!-- Configurações espeficicas para 'tiposBasico_v1.03.xsd' -->
<jaxb:bindings schemaLocation="tiposBasico_v1.03.xsd">
<jaxb:bindings node="xs:simpleType[@name='Tpais']">
<jaxb:typesafeEnumClass name="Tpais"/>
</jaxb:bindings>
</jaxb:bindings>
<!-- Configurações espeficicas para 'leiauteNFe_v2.00x.sd' -->
<jaxb:bindings schemaLocation="leiauteNFe_v2.00.xsd">
<jaxb:bindings node="xs:simpleType[@name='TcProdANP']">
<jaxb:typesafeEnumClass name="TcProdANP"/>
</jaxb:bindings>
<jaxb:bindings node="xs:simpleType[@name='TCfop']">
<jaxb:typesafeEnumClass name="TCfop"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
<!--
Para adicionar dentro do próprio .xsd (Obs: Depois de schema):
<xs:annotation>
<xs:appinfo>
Configurações de binding...
</xs:appinfo>
</xs:annotation>
-->
Depois é só usar o comando:
xjc -b binding.xml tiposBasico_v1.03.xsd leiauteNFe_v2.00.xsd
(Obs: o arquivo binding.xml deve estar salvo com codificação UTF-8)
Outra coisa, se tiveram problemas com codificação ao utilizar as classes geradas no NetBeans ou Eclipse, usem o comando dessa forma:
xjc -b binding.xml tiposBasico_v1.03.xsd leiauteNFe_v2.00.xsd -encoding utf-8
:thumbup: