Falha no schema XML Sefaz PR


#1

Estou obtendo o erro 215 Falha no schema XML no retorno do SEFAZ PR quando envio uma NFe, no proprio site da SEFAZ PR encontrei a seguinte orientação:
Para a versão 2.00 da NF-e o Manual de Integração versão 4.01-NT2009.006 (páginas 13-14) especifica que a tag NFe deverá conter declaração namespace. Dessa forma, caso uma NF-e versão 2.00 não contenha tal declaração será rejeitada por falha de schema (rejeição 215)..
Gostaria de saber se algum possui um tutorial sobre como gerar a classe NfeRecepcao2Stub partindo dos arquivos wsdl da SEFAZ. Verifiquei que quando foi gerado em 2009 estas classes utilizou-se o plugin do eclipse axis2-1.5.1, porem existem varias opções e um tutorial ajudaria a gerar do mesmo jeito.

Obrigado


#2

Conseguimos regerar o NFeRecebecaoStub, porém não resolveu o nosso problema, debugando um pouco mais vimos que o Adempiere, monta a mensagem da NF corretamente, conforme solicita a SEFAZ PR colocando namespace nas tags (exemplo ). Agora vimos que o sistema na hora de “envelopar” a mensagem para enviar no web service, faz um PARSE da mensagem para (NFeDadosMsg) e neste momente ele retira o namespace desta tag ficando apenas , acreditamos que este seja o erro motivo do erro de schema inválido, pois o próprio site da receita pede esta namespace nesta tag conforme da para ver neste link.
http://www.sped.fazenda.pr.gov.br/modules/noticias/article.php?storyid=196&tit=20012011-1349-NF-e-versao-2.00-rejeicoes-215
“Para a versão 2.00 da NF-e o Manual de Integração versão 4.01-NT2009.006 (páginas 13-14) especifica que a tag NFe deverá conter declaração namespace. Dessa forma, caso uma NF-e versão 2.00 não contenha tal declaração será rejeitada por falha de schema (rejeição 215).”.
Se alguém puder ajudar agradeço.


#3

muito estranho, a empresa que eu trabalho é de SP, porém eu uso o processo de consulta da NFe para vários estados para validar a nota de entrada… e o estado do PR retorna corretamente a minha solicitação do webService ConsultaProtocolo


#4

Foi necessária criação de uma nova classe NFeStreamWrapper que extende a classe StreamWrapper. Alem disto é necessário substituir na classe NfeRecepção2Sutb.java como mostrado abaixo abaixo:

// We need to wrap the reader so that it produces a fake START_DOCUMENT event
// this is needed by the builder classes
org.apache.axis2.databinding.utils.NamedStaxOMBuilder builder1 =
new org.apache.axis2.databinding.utils.NamedStaxOMBuilder(
//antigo new StreamWrapper(reader),startQname1);
[b]new NFeStreamWrapper/b,startQname1);
object.setExtraElement(builder1.getOMElement());

                                     reader.next();
  • Esta classe foi necessária para fazer uma correção do erro Falha de Schema (215), que acontecia

  • somente no Sefaz PR, este erro não acontece em outros Sefaz.

  • O WebService do PR precisa que a tag venha com namespace, ou seja, precisa

  • chegar o xml no WS desta forma

  • Embora a nota fiscal seja sera gerada pelo Adempiere com este namespace, a classe StreamWrapper

  • por um motivo que desconhecemos agora, retirava este namespace por retornar nulo para a tag NFe.

  • Esta foi a forma mais rápida que encontramos embora menos elegante de se resolver o problema.
    */
    public class NFeStreamWrapper extends StreamWrapper {

    public NFeStreamWrapper(XMLStreamReader realReader) {
    super(realReader);
    }

    public String fakeNamespace(String value) {
    if (StringUtils.isBlank(value)) {
    if (“nfe”.equalsIgnoreCase(getName().getLocalPart())) {
    return “xmlns”;
    }
    }
    return value;
    }

    @Override
    public String getNamespaceURI(String s) {
    return fakeNamespace(super.getNamespaceURI(s));
    }

    @Override
    public NamespaceContext getNamespaceContext() {
    return super.getNamespaceContext();
    }

    @Override
    public int getNamespaceCount() {
    return super.getNamespaceCount();
    }

    @Override
    public String getNamespacePrefix(int i) {
    return fakeNamespace(super.getNamespacePrefix(i));
    }

    @Override
    public String getNamespaceURI() {
    return fakeNamespace(super.getNamespaceURI());
    }

    @Override
    public String getNamespaceURI(int i) {
    return fakeNamespace(super.getNamespaceURI(i));
    }
    }