NFE V2.00 - Veja como consumir o WS

Bom dia.

Muito bom o tópico! Agradeço a todos e acredito que deve estar ajudando muita gente além de mim.

Estou conseguindo consumir os WS do Sefaz a partir do código que o alves.Felipe postou. Porém agora surgiu um problema…
Eu já consumi o WS NfeStatusServico2 e NfeRecepcao2 sem problemas, porém agora estou tentando consumir o NfeRetRecepcao2, com o mesmo código, para ver o retorno do meu lote e estou tendo um erro…

Esse é o envelope que estou enviando:

E esse é o retorno do SEFAZ:

Eu já olhei, olhei, olhei, e não consigo achar nada errado… Alguém já passou por esse problema ou consegue presumir qual pode ser o erro?

Olá talles.pescumo,

Brow, tenta assim…

Valew

Pessoal…

Como eu havia prometido segue abaixo como que eu faço a impressão da Danfe.

Eu abro o projeto da DANFE no iReport e configuro o sql em DATA > Query do Relatório, lpa eu coloco o sql assim…

select * from vw_nfe_det where ID_NFE = $P{IDNFE}

Depois disso compilo o fonte para gerar o arquivo .jasper.

No programa eu utilizo um metodo chamado imprimir, como ele tem mais funções, vou colocar somente o que interessa…

....
Connection con = getConnection();
		Statement stm = (Statement) con.createStatement();
		String query = "select * from vw_nfe_det v where v.ID_NFE = " + idNfe;
		com.mysql.jdbc.ResultSet rs = (ResultSet) stm.executeQuery(query);
		JRResultSetDataSource jrDS = new JRResultSetDataSource(rs);
		Map parameters = new HashMap();
		parameters.put("SUBREPORT_DIR", "C:/programa/relatorios/");  //caminho necessario para localizar o subreport
		parameters.put("REPORT_CONNECTION", con);
		
        JasperPrint jasperPrint = JasperFillManager.fillReport("C:/programa/relatorios/danfe.jasper", parameters, jrDS);
        byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
                
        try {
            FileOutputStream outPut = new FileOutputStream("C:/programa/danfes/" + chNFe + "-pdf.pdf");
            outPut.write(bytes);
            outPut.close();
		} catch (FileNotFoundException e) {
			System.out.println("Erro na geração do arquivo!!! Erro FNFE: " + e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Erro na geração do arquivo!!! Erro IOE: " + e.getMessage());
			e.printStackTrace();
		}
....  

Beleza, espero ter ajudado…

Se alguem tiver alguma sugestão, ou algo que seja interessante colocar, colaborem.

Ola Mackrophus,

Se entendi era pra colocar os atributos Mackrophus xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” no body não é?

A ordem dos elementos em teoria não muda nada certo?

Eu coloquei os atributos e o erro continua o mesmo… estranho que envio a consulta do status por exemplo da mesma forma, e não da erro nenhum, assim como envio do lote…

=/

Vc esta conseguindo enviar consulta de lote no ambiente homologação sp 2.00 normalmente?

Valew!

talles.pescumo, cara isso é curioso…

Eu estou enviando para o Sefaz PR e SVRS, e vai normalmente…

Vou tentar enviar em sp pra ver o que dá.

Mackrophus realmente ta estranho…

Eu não tenho experiência com a NFe ainda, esse é meu primeiro projeto, mas mesmo assim parece estar tudo ok…

Se eu mudo algo no xml pra tentar acertar ele acusa erro na validação do Schema, se eu deixo como esta ele continua dando esse erro…
Mas em teoria não era pra acontecer, pq outros serviços funcionam normalmente enviando tudo da mesma forma… =/

Talles.

Cara, coloca o teu metodo ai, que eu vou testar com o seu.

Mackrophus meu método é praticamente a mesma coisa do alves.Felipe, vou mandar pra você dar uma olhada, dei uma modificada só pra ficar fácil de executar:

[code]import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.Provider;
import java.security.Security;
import java.util.Map;

import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.sax.SAXSource;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class NFe {
/**
* Método que envia o xml para o WS
*/
public OutputStream sendXML(InputStream xml)throws SOAPException,Exception {
String webServiceURL = “https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRetRecepcao2.asmx”;
String definitionsTargetNamespaceURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2”;
String schemaTargetNamespaceURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2”;
String soapActionURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2/nfeRetRecepcao2”;
String serviceName = “NfeRetRecepcao2”;
String portName = “NfeRetRecepcao2Soap12”;

	//preparar as propriedades
	Provider provider = new com.sun.security.sasl.Provider();
	Security.addProvider(provider);
	//Cria um serviço a partir do endereço do WS
	Service service = Service.create(new URL(webServiceURL+"?WSDL"),new QName(definitionsTargetNamespaceURI, serviceName));
	
	//Cria um Dispatch, que é responsável por invocar o serviço
	Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(schemaTargetNamespaceURI, portName),SOAPMessage.class,Service.Mode.MESSAGE);
	
	//Configura o RequestContext para a Message solicitada
	Map<String, Object> rc = dispatch.getRequestContext();
    rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
    rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, soapActionURI);
    rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, webServiceURL);
    
    // Cria um SOAPMessage Request, passando a especificação SOAP 1.2
    MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
    SOAPMessage soapMessage = factory.createMessage();
    
    // Optional
    soapMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "false");
    soapMessage.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
    
    // Cria o Header da mensagem 
    SOAPHeader header = soapMessage.getSOAPHeader();
    SOAPElement nfeCabecMsg = header.addChildElement("nfeCabecMsg", XMLConstants.DEFAULT_NS_PREFIX, definitionsTargetNamespaceURI);
    nfeCabecMsg.addChildElement("versaoDados").setValue("2.00");
    nfeCabecMsg.addChildElement("cUF").setValue("35");
    
    // Cria o Body
    SOAPBody body = soapMessage.getSOAPBody();
    
	//Esta eh a mudanca que voce sugeriu, mas nao alterou nada no retorno
    body.addAttribute(new QName("xmlns:xsi"), "http://www.w3.org/2001/XMLSchema-instance");
    body.addAttribute(new QName("xmlns:xsd"), "http://www.w3.org/2001/XMLSchema");
    
    // Cria um elemento que vai ter os dados do XML
    SOAPBodyElement nfeDadosMsg = body.addBodyElement(new QName(schemaTargetNamespaceURI, "nfeDadosMsg", XMLConstants.DEFAULT_NS_PREFIX));
    
    // Converte o stream (seu xml) para um Objeto DOM
    DOMResult domResult = new DOMResult();
	XMLReader reader = XMLReaderFactory.createXMLReader();
	InputSource inputSource = new InputSource(new FileInputStream("C:\\NFe\\consulta.xml"));
	SAXSource saxSource = new SAXSource(reader, inputSource);
	TransformerFactory transformerFactory = TransformerFactory.newInstance();
	Transformer transformer = transformerFactory.newTransformer();
	transformer.transform(saxSource, domResult);
	
    //obtém o Document
	Document document = (Document) domResult.getNode();
	//cria um elemento a partir o Document
	SOAPElement soapElement = SOAPFactory.newInstance().createElement(document.getDocumentElement());
	//adiciona no Body
    nfeDadosMsg.addChildElement(soapElement);
    //imprime o envelope
    soapMessage.writeTo(System.out);
    System.out.println();
    
    // invoca o WS e obtém o retorno
    SOAPMessage reply = dispatch.invoke(soapMessage);
    
    // Retorno
    OutputStream out = new ByteArrayOutputStream();
    reply.writeTo(out);	        
	
	((ByteArrayOutputStream)out).writeTo(System.out);
	
    return out;
}

}[/code]

O Xml eu não gerei por código, criei o arquivo na mão mesmo só pra testar, com o seguinte conteúdo:

Isso tudo funciona no envio do lote e na consulta de status do serviço, mas na consulta do lote está gerando o erro… =/

Valew!

[quote=Mackrophus]talles.pescumo, cara isso é curioso…

Eu estou enviando para o Sefaz PR e SVRS, e vai normalmente…

Vou tentar enviar em sp pra ver o que dá.[/quote]

Só para constar: está funcionando em homologação e produção em todos os estados, exceto AM, AC e PA que ainda não foi testado esse código.

[quote=talles.pescumo]Mackrophus meu método é praticamente a mesma coisa do alves.Felipe, vou mandar pra você dar uma olhada, dei uma modificada só pra ficar fácil de executar:

[code]import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.Provider;
import java.security.Security;
import java.util.Map;

import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.sax.SAXSource;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class NFe {
/**
* Método que envia o xml para o WS
*/
public OutputStream sendXML(InputStream xml)throws SOAPException,Exception {
String webServiceURL = “https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRetRecepcao2.asmx”;
String definitionsTargetNamespaceURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2”;
String schemaTargetNamespaceURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2”;
String soapActionURI = “http://www.portalfiscal.inf.br/nfe/wsdl/NfeRetRecepcao2/nfeRetRecepcao2”;
String serviceName = “NfeRetRecepcao2”;
String portName = “NfeRetRecepcao2Soap12”;

	//preparar as propriedades
	Provider provider = new com.sun.security.sasl.Provider();
	Security.addProvider(provider);
	//Cria um serviço a partir do endereço do WS
	Service service = Service.create(new URL(webServiceURL+"?WSDL"),new QName(definitionsTargetNamespaceURI, serviceName));
	
	//Cria um Dispatch, que é responsável por invocar o serviço
	Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(schemaTargetNamespaceURI, portName),SOAPMessage.class,Service.Mode.MESSAGE);
	
	//Configura o RequestContext para a Message solicitada
	Map<String, Object> rc = dispatch.getRequestContext();
    rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
    rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, soapActionURI);
    rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, webServiceURL);
    
    // Cria um SOAPMessage Request, passando a especificação SOAP 1.2
    MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
    SOAPMessage soapMessage = factory.createMessage();
    
    // Optional
    soapMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "false");
    soapMessage.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
    
    // Cria o Header da mensagem 
    SOAPHeader header = soapMessage.getSOAPHeader();
    SOAPElement nfeCabecMsg = header.addChildElement("nfeCabecMsg", XMLConstants.DEFAULT_NS_PREFIX, definitionsTargetNamespaceURI);
    nfeCabecMsg.addChildElement("versaoDados").setValue("2.00");
    nfeCabecMsg.addChildElement("cUF").setValue("35");
    
    // Cria o Body
    SOAPBody body = soapMessage.getSOAPBody();
    
	//Esta eh a mudanca que voce sugeriu, mas nao alterou nada no retorno
    body.addAttribute(new QName("xmlns:xsi"), "http://www.w3.org/2001/XMLSchema-instance");
    body.addAttribute(new QName("xmlns:xsd"), "http://www.w3.org/2001/XMLSchema");
    
    // Cria um elemento que vai ter os dados do XML
    SOAPBodyElement nfeDadosMsg = body.addBodyElement(new QName(schemaTargetNamespaceURI, "nfeDadosMsg", XMLConstants.DEFAULT_NS_PREFIX));
    
    // Converte o stream (seu xml) para um Objeto DOM
    DOMResult domResult = new DOMResult();
	XMLReader reader = XMLReaderFactory.createXMLReader();
	InputSource inputSource = new InputSource(new FileInputStream("C:\\NFe\\consulta.xml"));
	SAXSource saxSource = new SAXSource(reader, inputSource);
	TransformerFactory transformerFactory = TransformerFactory.newInstance();
	Transformer transformer = transformerFactory.newTransformer();
	transformer.transform(saxSource, domResult);
	
    //obtém o Document
	Document document = (Document) domResult.getNode();
	//cria um elemento a partir o Document
	SOAPElement soapElement = SOAPFactory.newInstance().createElement(document.getDocumentElement());
	//adiciona no Body
    nfeDadosMsg.addChildElement(soapElement);
    //imprime o envelope
    soapMessage.writeTo(System.out);
    System.out.println();
    
    // invoca o WS e obtém o retorno
    SOAPMessage reply = dispatch.invoke(soapMessage);
    
    // Retorno
    OutputStream out = new ByteArrayOutputStream();
    reply.writeTo(out);	        
	
	((ByteArrayOutputStream)out).writeTo(System.out);
	
    return out;
}

}[/code]

O Xml eu não gerei por código, criei o arquivo na mão mesmo só pra testar, com o seguinte conteúdo:

Isso tudo funciona no envio do lote e na consulta de status do serviço, mas na consulta do lote está gerando o erro… =/

Valew![/quote]

Remova:

– body.addAttribute(new QName(“xmlns:xsi”), “http://www.w3.org/2001/XMLSchema-instance”);
– body.addAttribute(new QName(“xmlns:xsd”), “http://www.w3.org/2001/XMLSchema”);

remova do SOAPMessage (temporariamente) os dados:

Teste e envie:

  • o SOAPMessage antes do envio
  • o SOAPMessage de retorno

Ola AGAraujo,

O xmlns:si xmlns:sd não tinha inicialmente, eu coloquei só por sugestão aqui no fórum como tentativa, eu vi em alguma norma técnica que não deveriam ser inclusos, mas testando com ou sem tenho os mesmos resultados, na consulta do lote ele da o mesmo retorno de erro, e os outros WS que testei(envio de lote e consulta de status) funcionam normalmente…

Essa parte de remover os dados eu não entendi… é para a tag nfeDadosMsg ficar assim:?

Se for, eu testei e ele voltou o mesmo retorno.
Não sei se entendi algo errado… =/

[quote=talles.pescumo]Ola AGAraujo,

O xmlns:si xmlns:sd não tinha inicialmente, eu coloquei só por sugestão aqui no fórum como tentativa, eu vi em alguma norma técnica que não deveriam ser inclusos, mas testando com ou sem tenho os mesmos resultados, na consulta do lote ele da o mesmo retorno de erro, e os outros WS que testei(envio de lote e consulta de status) funcionam normalmente…

Essa parte de remover os dados eu não entendi… é para a tag nfeDadosMsg ficar assim:?

Se for, eu testei e ele voltou o mesmo retorno.
Não sei se entendi algo errado… =/[/quote]

Você fez o que eu pedi, exceto pelos retornos SOAPMessage, mas blz…

Se o erro é o mesmo, o problema não está no conteúdo.
Procurei no manual e não encontrei este erro.

Poderia fazer uma checagem para ver se o WebService está direcionado corretamente, se faltou alguma coisa e depois tente novamente.
Caso não consiga vamos mudar sua implementação para testar… Só espero que isto não seja uma “frescura” do WS-SP.

Só poderei te ajudar agora amanhã, mas post hoje o resultado se possivel pois tem mais gente ai que podera te ajudar.

T+

[quote=Mackrophus]Pessoal…

Beleza, espero ter ajudado…

Se alguem tiver alguma sugestão, ou algo que seja interessante colocar, colaborem.
[/quote]

Eu vou iniciar o projeto.
Mas acho que está quase tudo aí.
Talvez o .jrxml do DANFE ajude bastante…sopa no mel.

Show de bola.

AGAraujo,

Eu fiz um teste agora para análisar os retornos, tentei me comunicar com todos os WS de SP homologação, enviando a tag NFeDadosMsg vazia, igual no teste anterior, e curiosamente todos apresentaram a mensagem de erro “Rejeição: Usar somente o namespace padrão da NF-e”, menos o envio do lote, que voltou “Lote recebido com sucesso” mesmo não enviando nada… :S

Estranho também que no WS de consulta do status do serviço, quando eu envio a mensagem completa, com os dados, ele me da retorno normal, “Serviço em operação”… será que estou fazendo algo errado no teste?

Olha só, essas são as mensagens de envio e resposta de todos os WS:

[code]//WS NfeStatusServico2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e352011-03-17T08:20:44</soap:Body></soap:Envelope>

//WS NfeRecepcao2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h103Lote recebido com sucesso352011-03-17T08:20:443510000312684931</soap:Body></soap:Envelope>

//WS NfeRetRecepcao2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e35</soap:Body></soap:Envelope>

//WS NfeConsulta2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e35</soap:Body></soap:Envelope>

//WS NfeCancelamento2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e35</soap:Body></soap:Envelope>

//WS NfeInutilizacao2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e35</soap:Body></soap:Envelope>

//WSC adConsultaCadastro2
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body</env:Body></env:Envelope>
//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:BodySP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e2011-03-17T08:20:4435</soap:Body></soap:Envelope>[/code]

E aqui as mensagens com dados do WS de consulta do status do serviço com retorno ok:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><versaoDados>2.00</versaoDados><cUF>35</cUF></nfeCabecMsg></env:Header><env:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><cUF>35</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg></env:Body></env:Envelope> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><cUF>35</cUF><versaoDados>2.00</versaoDados></nfeCabecMsg></soap:Header><soap:Body><nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><retConsStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><verAplic>SP_NFE_PL_006h</verAplic><cStat>107</cStat><xMotivo>Serviço em Operação</xMotivo><cUF>35</cUF><dhRecbto>2011-03-17T08:27:45</dhRecbto><tMed>1</tMed></retConsStatServ></nfeStatusServicoNF2Result></soap:Body></soap:Envelope>

O erro 587 esta na NT2010.009 http://www.nfe.fazenda.gov.br/portal/docs/NT2010.009.pdf , porém eu não estou utilizando nada diferente do exemplo, como você pode ver nas msg… complicado… =/

Agora consegui acessar também o WS de consulta de NFe, porém informei a NFe que passei no lote, que tinha voltado com “Lote recebido com sucesso”, e ele volta mensagem dizendo que a NF-e não esta cadastrada:

//SOAP de envio <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2"><versaoDados>2.00</versaoDados><cUF>35</cUF></nfeCabecMsg></env:Header><env:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2"><consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><xServ>CONSULTAR</xServ><chNFe>35110309574539000129550010000000011000000013</chNFe></consSitNFe></nfeDadosMsg></env:Body></env:Envelope> //Resposta <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2"><cUF>35</cUF><versaoDados>2.00</versaoDados></nfeCabecMsg></soap:Header><soap:Body><nfeConsultaNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2"><retConsSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><verAplic>SP_NFE_PL_006h</verAplic><cStat>217</cStat><xMotivo>Rejeição: NF-e não consta na base de dados da SEFAZ</xMotivo><cUF>35</cUF><chNFe>35110309574539000129550010000000011000000013</chNFe></retConsSitNFe></nfeConsultaNF2Result></soap:Body></soap:Envelope>

O erro na consulta do lote ainda continua o mesmo…

Tentei a consulta do cadastro do contribuinte, exatamente da mesma forma, e essa também deu o problema:

[code]//Mensagem SOAP de envio
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:BodyCONS-CADSP10444288000147</env:Body></env:Envelope>

//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:BodySP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e2011-03-17T14:38:1835</soap:Body></soap:Envelope>[/code]

Todos os xml que enviei foram validados ok pelo Schema, não consigo nem imaginar no momento porque alguns WS funcionam e outros não… =/

[quote=talles.pescumo]Tentei a consulta do cadastro do contribuinte, exatamente da mesma forma, e essa também deu o problema:

[code]//Mensagem SOAP de envio
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:BodyCONS-CADSP10444288000147</env:Body></env:Envelope>

//Resposta
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>soap:Header352.00</soap:Header>soap:BodySP_NFE_PL_006h587Rejeição: Usar somente o namespace padrão da NF-e2011-03-17T14:38:1835</soap:Body></soap:Envelope>[/code]

Todos os xml que enviei foram validados ok pelo Schema, não consigo nem imaginar no momento porque alguns WS funcionam e outros não… =/[/quote]

Fiz o teste com São Paulo e a única coisa que identifiquei como sendo diferente do meu (excluindo os dados) é que o seu retorno traz:

<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelopexmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance>soap:Header352.00</soap:Header>soap:Body2SP_NFE_PL_006h107Serviço em Operação352011-03-17T08:27:451</soap:Body></soap:Envelope>

Sendo que você não envia estes namespaces (aparentemente).
Tenho duas hipoteses agora: o seu SOAPMessage não é realmente o que vc está passando, sendo que ele deve estar sendo transformado antes do processo de envio o que significa que deveria pegar este valor não onde esta pegando e sim implementando SOAPHandler ou através da propriedade de de debug do java:

A outra hipotese é a de que tecnologia ASP.NET utilizada no servidor está fazendo o Bind da mensagem de forma diferente de como envia e neste caso você precisa “burlar” essa validação.

O que está acontecendo com você não está ocorrendo comigo, então estou apenas diagnosticando pelo que você esta me falando. Precisamos nos certificar antes de continuar que:
1 - Você está direcionando para o WS correto
2 - Você está utilizando JWS
3 - Você está implementando corretamente os caracteres em UTF-8
4 - Não há espamento duplo ou qualquer "caracter especial"
5 - Os mesmos testes estão sendo feitos em outros estados e estão passando.

Se estiver tudo certificado, então vamos resolver sob estas duas hipoteses.

Olha só, eu não estou com muito tempo hoje então minhas mensagens serão um pouco demoradas, mas se não conseguir resolver até o sabado, no sábado podemos resolver pela manhã online…

t+


edit

Manualmente, aponte para os serviços que está consumindo e copie os wsdl e poste-os aqui tb.
Lembre-se: precisa ser manualmente copiado, não importado ou baixado de qualquer local…

AGAraujo,

Quando vc diz manualmente, quer dizer copiar pelo browser mesmo certo?

Esse é o WSDL do serviço de consulta de status que esta funcionando normalmente:

[code]<?xml version="1.0" encoding="utf-8" ?>

Esse é o WSDL do serviço de consulta do lote, que retorna o erro:

[code]<?xml version="1.0" encoding="utf-8" ?>

Quanto as suas perguntas, desculpe a ignorância mas não entendi muito bem:
1 - Você está direcionando para o WS correto
[color=blue]Como verifico isso?[/color]
2 - Você está utilizando JWS
[color=blue]Desconheço o termo… =/ [/color]
3 - Você está implementando corretamente os caracteres em UTF-8
[color=blue]O xml em si, eu salvei na mão, pelo notepad, setando o encoding UTF-8 na mão mesmo…
Essa linha do código não assegura isso para a mensagem?[/color]

4 - Não há espamento duplo ou qualquer “caracter especial”
[color=blue]Nas minhas checagens eu não consegui encontrar, vou enviar novamente as duas mensagens que estou enviando, mas acho q esta tudo certo:[/color]

[code]<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body235STATUS</env:Body></env:Envelope>

<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope”>env:Header2.0035</env:Header>env:Body2351000031294771</env:Body></env:Envelope>[/code]
5 - Os mesmos testes estão sendo feitos em outros estados e estão passando.
[color=blue]Eu acho que não tenho como testar isso pois só tenho certificado de SP para testar, eu tentei consultar os WS de MG, mas eles voltavam como retorno que minha UF não podia acessa-los…[/color]

Quanto a sua primeira hipótese, eu acho que a mensagem é essa que eu estou passando mesmo, veja só no código aonde eu dou print e logo em seguida dou invoke no serviço:

[code]//imprime o envelope
soapMessage.writeTo(System.out);
System.out.println();

    // invoca o WS e obtém o retorno
    SOAPMessage reply = dispatch.invoke(soapMessage);[/code]

Fala galera !!

Alguém ai conseguiu desenvolver algo referente a validação do xml ??

C alguem tiver algum exemplo p/ me ajudar, pois não sei por onde começar !

Valeu !!

[quote=talles.pescumo]AGAraujo,

Quanto a sua primeira hipótese, eu acho que a mensagem é essa que eu estou passando mesmo, veja só no código aonde eu dou print e logo em seguida dou invoke no serviço:

[code]//imprime o envelope
soapMessage.writeTo(System.out);
System.out.println();

    // invoca o WS e obtém o retorno
    SOAPMessage reply = dispatch.invoke(soapMessage);[/code][/quote]

Esta maneira não é a mesma, apesar de poder produzir o mesmo resultado… Como eu disse, utilize o SOAPHandler ou o debug do java para produzir o resultado.

As outras questões que colocou no seu post em resumo é o seguinte:

  • dizer que a mensagem é UTF-8 na propriedade do SOAPMessage não siginifica que você está usando caracteres UTF-8 de origem, apenas garente que a saida será em caracteres UTF-8. Ou seja, se ao escrever num notepad utilizar o ISO* ou qualquer outro, o que vai acontecer é que essa mensagem será re-codificada para UTF-8 e os caracteres que ela não reconhece ficarão ilegíveis.
  • nunca testei os certificados de um estado em outro, mas teoricamente o certificado, pelo menos em homologação, deveria funcionar… ou então para que tanta checagem de UF?? Vou ver isto e te digo amanhã. Se puder pesquisar tb já pode agilizar algo se der certo.
  • para verificar se sua aplicação está apontando corretamente precisa ver onde você cria a conexão e nesta verificar se o “Endpoint URL” é a mesma do WSDL correspondente:
// neste caso: https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRetRecepcao2.asmx
<wsdl:port name="NfeRetRecepcao2Soap12" binding="tns:NfeRetRecepcao2Soap12">  
   <soap12:address location="https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRetRecepcao2.asmx" />
</wsdl:port>