Problemas no Cancelamento da NFe 2.00

4 respostas
G

Olá senhores,
Já tentei de tudo, mas não consegui resolver meu problema.

Estou tentando consumir o webservice de cancelamento da NFe 2.00, consigo assinar, validar, transmitir normal, o problema é na hora de fazer o unmarshal do retCancNFe.

Já tentei utilizar o JAXB com o código:

JAXBContext jc = JAXBContext.newInstance("br.inf.portalfiscal.nfe.cancnfe");
Unmarshaller u = jc.createUnmarshaller();
tRetCancNFe = (TRetCancNFe) u.unmarshal(f);

mas ocorre o seguinte erro:

unexpected element (uri:"http://www.portalfiscal.inf.br/nfe", local:"retCancNFe"). Expected elements are.....

Pesquisando encontrei alguns tópicos que orientavam a adicionar a annotation @XmlRootElement(name=“retCancNFe”).
Fiz isso, mas continua o mesmo erro.

Já tentei utilizar o Xstream com o código:

XStream xStream  = new XStream();
xStream.processAnnotations(new Class[] {TCancNFe.class, TRetCancNFe.class});
xStream.alias("retCancNFe", TRetCancNFe.class);
tRetCancNFe = (TRetCancNFe) xStream.fromXML(xmlRetorno);

mas ocorre o seguinte erro:

Exception occurred during event dispatching: java.lang.InstantiationError: javax.xml.datatype.XMLGregorianCalendar at sun.reflect.GeneratedSerializationConstructorAccessor3.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(Sun14ReflectionProvider.java:74) at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:308) at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:161) at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:82)

Se alguém tiver uma luz, agradeço.

4 Respostas

DeGuedes

Cara eu uso assim e funciona:

//Faz o unmarshall do retorno.do cancelmaneto
        JAXBContext context = JAXBContext.newInstance("nfe2.beans.retCancNFe");
        Unmarshaller unmarshaller = context.createUnmarshaller();
        JAXBElement<TRetCancNFe> retcanc = (JAXBElement<TRetCancNFe>) unmarshaller.unmarshal(new StringReader(respCanc));

        TRetCancNFe retorno = retcanc.getValue();

[]'s

L

eu tive esse problema com esse objeto XMLGregorianCalendar com o xmlStream…
Também uso o JaxB pra fazer a comunixação com o wsdl penei muito pra fazer essa bendita nfe

Na verdade o xmlStream não consegue decifrar esses tipo de objeto para poder fazer a transformação pra vc… o Objeto XMLGregorianCalendar… pra ele conseguir vc vai ter que baixar e setar no classpath da sua aplicação o jar xercesImpl que possui esse objeto… o wsdl não transmite um objeto Date… transmite esse XMLGregorianCalendar…

E

Cara, aqui na empresa eu utilizo o XStream e td vai de boa…inclusive o WebService de cancelamento.

Lembro de ter dado um bug relacionado a gerar o objeto da resposta e precisei adicionar o stax no classpath, mas confesso que não me recordo se era o mesmo erro que está tendo.

Abraço

G

Tive que fazer uma ganbiarra aqui p/ poder liberar a versão pois o prazo se esgotou.
Assim que as coisas acalmarem por aqui vou testar as sugestões de vocês.
Obrigado.

Criado 30 de março de 2011
Ultima resposta 30 de mar. de 2011
Respostas 4
Participantes 4