Webservices SOAP 1.2 Header[Resolvido]

39 respostas
A

Ola pessoal, ja vim aqui por varias vezes com uma duvida sobre como passar o header no SOAP 1.2 usando o jax-ws, muitos aqui migraram pro Axis2 mas não é meu caso, preciso fazer com o jax-ws então vamos venho a perguntar aos feras do java como poso resolver isso:

meus métodos de conumo ao web service:

@WebServiceRef(wsdlLocation = "file:/.../NFeStatusServico2.wsdl")
   br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2 webServiceClient = null;

   @Override
   protected Object getResponse(String nfeDadosMsg) throws Problem {
        try {

            NfeStatusServicoNF2Result nfeStatusServicoNF2Result = null;
            webServiceClient = new br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2();
            System.out.println("Coletando a porta do servico: " + webServiceClient);

            // Tentei  reolver o problema colocando um handler que insere um header no soap mas não funcionou:
            //            webServiceClient.setHandlerResolver(new HandlerResolver() {
            //            @Override
            //            public List<Handler> getHandlerChain(PortInfo portInfo) {
            //                List<Handler> handlers = new ArrayList<Handler>();
            //                handlers.add(new NfeStatusServico2Handler());
            //                return handlers;
            //                }
            //            });

            br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2Soap12 port = webServiceClient.getNfeStatusServico2Soap12();
            System.out.println("Porta SOAP que esta sendo invocada: " + port);
            br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeCabecMsg nfeCabecMsg = new br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeCabecMsg();
            nfeCabecMsg.setCUF("43");
            nfeCabecMsg.setVersaoDados("2.00");

            //            WSBindingProvider bp = (WSBindingProvider) port;
            //            bp.setOutboundHeaders(Headers.create(new QName("http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"), "SOAPAction"));

            System.out.println("***");
            System.out.println("DadosCTE: " + nfeDadosMsg.toString());
            System.out.println("***");
   
            NfeDadosMsg nfeDadosMsg1 = new NfeDadosMsg();

//            // add nfeCabebc na nfeDadosMsg, isso faz o header ir para dentro do body o que não é o caso ja que um header fica dentro da tag <S:Envelope e tambem o //body
//            nfeDadosMsg1.getContent().add(new ObjectFactory().createNfeCabecMsg(nfeCabecMsg));

            nfeDadosMsg1.getContent().add(nfeDadosMsg);
  
          br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServicoNF2Result result = port.nfeStatusServicoNF2(nfeDadosMsg1);

            System.out.println("Resposta do servico: " + nfeStatusServicoNF2Result.getContent().toString());
            System.out.println("Result = " + result);
            System.out.println("Resposta = " + Arrays.toString(result.getContent().toArray()));
            return getBeanFromString(new RetConsStatServ(), nfeStatusServicoNF2Result.getContent().toString());

        } catch (SOAPException ex) {
            Logger.getLogger(WebServiceStatus.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MalformedURLException ex) {
            Logger.getLogger(WebServiceStatus.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

agora vou mostrar o log do meu SOAP:

INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/web] has already been started
Coletando a porta do servico: br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2@523df
Porta SOAP que esta sendo invocada: JAX-WS RI 2.1.1 in JDK 6: Stub for https://homologacao.nfe.sefaz.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx
***
DadosCTE: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><tpAmb>2</tpAmb><cUF>43</cUF><xServ>STATUS</xServ></consStatServ>
***
---[HTTP request]---
SOAPAction: ""
Accept: application/soap+xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Type: application/soap+xml; charset=utf-8;action="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2"
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
   <S:Body>
      <nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"&gt;&lt;tpAmb&gt;2&lt;/tpAmb&gt;&lt;cUF&gt;43&lt;/cUF&gt;&lt;xServ&gt;STATUS&lt;/xServ&gt;&lt;/consStatServ&gt;</nfeDadosMsg>
   </S:Body>
</S:Envelope>--------------------
---[HTTP response 500]---
null: HTTP/1.1 500 Internal Server Error
Cache-control: private
Content-type: application/soap+xml; charset=utf-8
Content-length: 618
X-powered-by: ASP.NET
Server: Microsoft-IIS/6.0
Date: Thu, 13 May 2010 18:45:56 GMT
X-aspnet-version: 2.0.50727
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
        <soap:Fault>
           <soap:Code>
               <soap:Value>soap:Sender</soap:Value>
           </soap:Code>
               <soap:Reason>
                   <soap:Text xml:lang="en">Server was unable to read request. ---&gt; There is an error in XML document (1, 483).
 ---&gt; The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type.
                   </soap:Text>
               </soap:Reason><soap:Detail />
        </soap:Fault>
   </soap:Body>
</soap:Envelope>--------------------

por favor alguem que tenha implementado com o jaxws me ajuda a resolver esse rolo ?
notem que o soapAcation est vazio SOAPAction: “”
se eu adicionar o nfeCabec dentro do body ele da não da essa menssagem de que os dados estão do tipo errado, ele reclama que falta o cabeçalho dando erro 242 que é referente a falta do cabeçalho, bem é isso, abraços.

39 Respostas

A

Pessoal após muito luta cosegui colocar o header no SOAP 1.2 usando JAX-WS e estou recebendo a resposta da sefaz, mas na resposta diz que meus dados estão de forma erra e eu acredito que é porque passo uma String no NfeDadosMsg pois la dentro do soap minha String se altera

era para ser assim: <tpAmb>2</tpAmb>

e fica assim: & lt;tpAmb& gt;2& lt;/tpAmb& gt

sera que é por isso que a menssagem no soap me retorna dizendo que os dados estão errados ? se for por causa do scape como faço pra passar esse xml la dentro pois no manual diz: tipod e dado xml mas para min passar um xml sera uma string em forma de xml ? estou errado em pensar assim ?

Log do meu soap o que stou enviando:

<?xml version=“1.0” ?>

<S:Envelope xmlns:S=“<a href="http://www.w3.org/2003/05/soap-envelope">http://www.w3.org/2003/05/soap-envelope</a>”>

<S:Header>

<nfeCabecMsg xmlns=“<a href="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2</a>”>

<cUF>43</cUF>

<versaoDados>2.00</versaoDados>

</nfeCabecMsg>

</S:Header>

<S:Body>

<nfeDadosMsg xmlns=“<a href="http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2">http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2</a>”>

& lt;?xml version=& quot;1.0& quot; encoding=& quot;UTF-8& quot; standalone=& quot;yes& quot;?

&g t;& lt;consSitNFe xmlns=& quot;<a href="http://www.portalfiscal.inf.br/nfe&">http://www.portalfiscal.inf.br/nfe&</a> quot; versao=& quot;2.00& quot;& gt;

& lt;tpAmb& gt;2& lt;/tpAmb& gt;

& lt;xServ& gt;CONSULTAR& lt;/xServ>

& lt;chNFe& gt;43100391250902000131550010001128780001128786& lt;/chNFe& gt;

& lt;/consSitNFe& gt;

</nfeDadosMsg>

</S:Body>

</S:Envelope>--------------------

Veja a resposta:

<?xml version=“1.0” encoding=“utf-8”?>
<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>soap:Sender</soap:Value>
</soap:Code>
<soap:Reason>
<soap:Text xml:lang=“en”>Server was unable to read request. —> There is an error in XML document (1, 676). —>
The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type.
</soap:Text>
</soap:Reason>
<soap:Detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>--------------------

Z

Eu tentei usar o Jax para os WS, mas tive o mesmo problema de não conseguir usar o cabeçalho

como vc vez?

a unica diferença do seu para o meu é a declaração dentro do xml dentro do soap

eu não tenho isso

A

zoren:
Eu tentei usar o Jax para os WS, mas tive o mesmo problema de não conseguir usar o cabeçalho

como vc vez?

a unica diferença do seu para o meu é a declaração dentro do xml dentro do soap

eu não tenho isso

Zorem não sei porque irmão mas de alguma forma quando se usa o wsgen ou o proprio netbeans para gerar os stubs com o JAX-WS ele não gera de forma correta
um exemplo disso é a classe do stub: NfeConsulta2Soap12.java, que só recebe um parametro nfeDadosMsg com vc pode notar, e se vc fizer isso como muitos fizeram:
nfeDadosMsg.getContente().add(new ObjectFacotry().getContent().add(nfeCabecMsg)) o cabeçalho vai parar dentro do body o que é errado, então acredito que a solução( ainda não testei) seria gerar os stubs com um ant

package br.inf.portalfiscal.nfe.wsdl.nfeconsulta2;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Holder;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.7-b01-
 * Generated source version: 2.1
 *
 */
@WebService(name = "NfeConsulta2Soap12", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
    ObjectFactory.class
})
public interface NfeConsulta2Soap12 {


    /**
     *
     * @param nfeDadosMsg
     * @return
     *     returns br.inf.portalfiscal.nfe.wsdl.nfeconsulta2.NfeConsultaNF2Result
     */
    @WebMethod(action = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2/nfeConsultaNF2")
    @WebResult(name = "nfeConsultaNF2Result", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2", partName = "nfeConsultaNF2Result")
    public NfeConsultaNF2Result nfeConsultaNF2(
        @WebParam(name = "nfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2", partName = "nfeDadosMsg")
        NfeDadosMsg nfeDadosMsg,        
}

então zorem coloquei o método que faltava na munheca, que não esta sendo gerado pelo netbeans e nem pelo wsgen via DOS ou SHELL, ai apenos contruo o jar não da pra usar clean and build porque el vai apagar o que vc fez, apenas construo e uso de forma normal, abaixo a modificação necessaria para passar o header como parametro junto na classe que consome o webservice:

package br.inf.portalfiscal.nfe.wsdl.nfeconsulta2;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Holder;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.7-b01-
 * Generated source version: 2.1
 *
 */
@WebService(name = "NfeConsulta2Soap12", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
    ObjectFactory.class
})
public interface NfeConsulta2Soap12 {


    /**
     *
     * @param nfeCabecMsg
     * @param nfeDadosMsg
     * @return
     *     returns br.inf.portalfiscal.nfe.wsdl.nfeconsulta2.NfeConsultaNF2Result
     */
    @WebMethod(action = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2/nfeConsultaNF2")
    @WebResult(name = "nfeConsultaNF2Result", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2", partName = "nfeConsultaNF2Result")
    public NfeConsultaNF2Result nfeConsultaNF2(
        @WebParam(name = "nfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2", partName = "nfeDadosMsg")
        NfeDadosMsg nfeDadosMsg,
        @WebParam(name = "nfeCabecMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2", header = true, mode = WebParam.Mode.INOUT, partName = "nfeCabecMsg")
        Holder<NfeCabecMsg> nfeCabecMsg);

}
Z

Não havia pensado em fazer isso,

eu testei muitas vezes pra tentar tirar o axis, pq tem muito jar e a aplicação fica muito grande, vo fazer um teste com essa sua solução

Vlw

Eu quase fiz uma classe para trabalhar com o SOAP, mas tive problemas em pegar o conteúdo do body

mas eu cheguei a enviar o SOAP na raça, pq eu n descobria o erro, ai eu fiquei modificando até achar onde o axis estava gerando diferente.

A

Ai gurizada consegui o Status de OK na NF-e 2.0 usando JAX-WS, SOAP 1.2 passando Header e Body dentro do envelope Soap se alguem quiser saber como é basta me mandar um email, abraços.

---[HTTP request]---
SOAPAction: ""
Accept: application/soap+xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Type: application/soap+xml; charset=utf-8;action="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2"
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
   <S:Header>
      <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <cUF>43</cUF>
         <versaoDados>2.00</versaoDados>
      </nfeCabecMsg>
   </S:Header>
   <S: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>43</cUF>
           <xServ>STATUS</xServ>
         </consStatServ>
      </nfeDadosMsg>
   </S:Body>
</S:Envelope>--------------------
---[HTTP response 200]---
null: HTTP/1.1 200 OK
Cache-control: private, max-age=0
Content-type: application/soap+xml; charset=utf-8
Content-length: 797
X-powered-by: ASP.NET
Server: Microsoft-IIS/6.0
Date: Thu, 20 May 2010 22:31:27 GMT
X-aspnet-version: 2.0.50727
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
      <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <cUF>43</cUF>
         <versaoDados>2.00</versaoDados>
      </nfeCabecMsg>
   </soap:Header>
   <soap:Body>
      <nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <retConsStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
            <tpAmb>2</tpAmb>
            <verAplic>RS20100210143458</verAplic>
            <cStat>107</cStat>
            <xMotivo>Servico em Operacao</xMotivo>
            <cUF>43</cUF>
            <dhRecbto>2010-05-20T19:31:27</dhRecbto>
            <tMed>1</tMed>
         </retConsStatServ>
      </nfeStatusServicoNF2Result>
   </soap:Body>
</soap:Envelope>--------------------
Z

Como você fez para colocar o xml no corpo do SOAP?

Eu também tentei passar o XML inteiro mas deu o mesmo erro que o seu, ai tentei usando um XMLReader do java e nada também.

A

zoren:
Como você fez para colocar o xml no corpo do SOAP?

Eu também tentei passar o XML inteiro mas deu o mesmo erro que o seu, ai tentei usando um XMLReader do java e nada também.

é simples Zorem, vc deve estar passando uma String no body do SOAP, e não é isso que pedi ele pedi um xml logo você precisa trabalhar com os nós do xml, abaixo tem o método que fiz pra isso, qualquer duvida só perguntar, abraços.

public class Main {

	private static NfeStatusServicoNF2Result nfeConsultaNF2;

	public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, IOException, CertificateException {

		System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");

		ajustaSslCertificadoA1();

		NfeStatusServico2Soap12 consulta = new NfeStatusServico2().getNfeStatusServico2Soap12();

		NfeDadosMsg nfeDadosMsg = createNfeDadosMsg();

		Holder<NfeCabecMsg> nfeCabecMsg = new Holder<NfeCabecMsg>(createNfeCabecMsg());

		nfeConsultaNF2 = consulta.nfeStatusServicoNF2(nfeDadosMsg, nfeCabecMsg);


	}

	private static NfeDadosMsg createNfeDadosMsg() {
		NfeDadosMsg dadosMsg = new NfeDadosMsg();

		ConsStatServ consStatServ = new ConsStatServ();
		consStatServ.setCUF(43);
		consStatServ.setTpAmb(2);
		consStatServ.setXServ("STATUS");

		dadosMsg.getContent().add(consStatServ);

		return dadosMsg;
	}

	private static NfeCabecMsg createNfeCabecMsg() {
		NfeCabecMsg cabecMsg = new NfeCabecMsg();

		cabecMsg.setCUF("43");
		cabecMsg.setVersaoDados("2.00");

		return cabecMsg;
	}

	public static void ajustaSslCertificadoA1() {
		System.setProperty("javax.net.ssl.trustStoreType", "JKS");
		System.setProperty("javax.net.ssl.trustStore", "homologacao_nfe_sefaz_rs_gov_br");

		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
		System.setProperty("javax.net.ssl.keyStore", "certificado.pfx");
		System.setProperty("javax.net.ssl.keyStorePassword", "senha_doCertificado");
	}

}

NO método ObjectFactory dos stubs tambem coloquei uma chamada para o ConsStatServ

/**
     * Create an instance of {@link ConsStatServ }
     * 
     */
    public ConsStatServ createConsStatServ() {
        return new ConsStatServ();
    }

e na Classe que faz a consulta do Status eu fiz testes com a classe gerada através do xjc não deu certo pois dava erro na estrutura do xml devido aos atributos
então eu fiz meus beans todos na mão usando anotations do JAXB, segue a classe:

package br.inf.portalfiscal.nfe.wsdl.nfestatusservico2;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author Dilnei Cunha
 * Consulta do status do servico
 */
@XmlRootElement(name = "consStatServ")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConsStatServ {

    /**
     * Versao do leiaute.
     */
    @XmlAttribute
    private String versao;
 
   /**
     * namespace
     */
    @XmlAttribute
    private String xmlns;

    /**
     * Identificacao do Ambiente:
     * 1 - Producao / 2 - Homologacao
     */
    @XmlElement(name = "tpAmb")
    private Integer tpAmb = 2;

    /**
     * Codigo da UF consultada.
     */
    @XmlElement(name = "cUF")
    private Integer cUF;

    /**
     * Servicos solicitado 'STATUS'.
     */
    @XmlElement(name = "xServ")
    private String xServ;

    public ConsStatServ() {
        versao = "2.00";
        xmlns = "http://www.portalfiscal.inf.br/nfe";
        xServ = "STATUS";
    }


    public Integer getCUF() {
        return cUF;
    }

    public void setCUF(Integer cUF) {
        this.cUF = cUF;
    }

    public Integer getTpAmb() {
        return tpAmb;
    }

    public void setTpAmb(Integer tpAmb) {
        this.tpAmb = tpAmb;
    }

    public String getXServ() {
        return xServ;
    }

    public void setXServ(String xServ) {
        this.xServ = xServ;
    }

    public String getVersao() {
        return versao;
    }

    public void setVersao(String versao) {
        this.versao = versao;
    }

}
Z

Você utilizou qual classe para trabalhar com o nós do XML?

Apenas passando o objeto TConsStatServ e colocando a chamada dele no ObjectFactory dos stubs, para de dar erro, mas a resposta vem null.

A

zoren:
Você utilizou qual classe para trabalhar com o nós do XML?

Apenas passando o objeto TConsStatServ e colocando a chamada dele no ObjectFactory dos stubs, para de dar erro, mas a resposta vem null.

me da seu email que te envio um projeto java fazendo a consulta ai vc vai entender melhor, para poder adaptar pro seu sistema, e se mesmo assim não der me mostra suas classes que tendo ajudar, abraços

[email removido]

L

manda pra mim também que estou perdidão nestes parte de web service …da nfe… [email removido]

M

Olá,

Também estou com problemas para conectar com o webservice 2.0 da NFe.
Por gentileza, pode também enviar o exemplo para que eu possa rodar em debug e compreender seu funcionamento ?

Email: [email removido]

Desde já agradeço !

Obrigado !

M

Amigo, não sei se ainda dá tempo, mas esta nfe 2.0 não funciona como esperava… vc também pode me enviar os exemplos de como fez para consumir os webservices? obrigado.
[email removido]

S

Amigo, tambem estou quebrando a cabeça com NFe 2.00 usando JAX-WS, vc poderia encaminhar no e-mail [email removido], um exemplo das classes que vc conseguiu resolver este problema.

Att, Claudio!

J

tb estou quebrando a cabeça com essa nfe 2.0, se puderes me mandar um exemplo de consultanfe2 emal: [email removido]

P

oi pessoal eu tambe mesto uquebrando a cabeça aqui, obrigado, [email removido]

D

Olá pessoal, também estou quebrando a cabeça… não estou conseguindo pedir a autorização da nfe. Podem me mandar um exemplo? [email removido]

Abs,

Daniel

F

Pessoal,

Estou com o mesmo problema. Aix, meu XML está sendo exibido da mesma forma que você passou, porem com o código:

System.out.println("Result = " + result);
            System.out.println("Resposta = " + Arrays.toString(result.getContent().toArray()));

ele me dá o seguinte retorno:

Result = br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.nlphd.NfeStatusServicoNF2Result@1f1680f
Resposta = [[retConsStatServ: null], ]

isso é normal?

Como vcs resolveram.

Obrigado.

P

pessoal estou com um problema, eu consigo transmitir a nota fiscal, mais a assinatura esta invalida, nao consigo achar o esso
esse é o xml
1000000000006203100241973VENDA DE MERCADORIA ADQUIRIDA OU RECEBIDA DE TERCEIROS QUE N05511442010-12-232010-12-2313106200111210INTEGRADOR GESTOR71421077000183SOMICRO SERVIDOR 1SOMICRO SERVIDOR 2RUA CATETE9998 andarBARROCA3106200BELO HORIZONTEMG302603901058BRASIL0629332510066133981937000144AGAFLORESCATETEBELO HORIZONTEBARROCA3106200BELO HORIZONTEMG1058BRASIL20PLACA DE VIDEO123456785102UN1.0000100.0000100.00UN1.0000100.0000104107070.000.000.000.00100.000.000.000.000.000.000.000.000.00100.000YB+PYdHHXZ5UxvNxxnYuBR1XwkQ=YHvNHfEhSw3IiuLd4479x82QRlXoboBS8NFlInIJsDCFZpQZMpRVMdjVcOr1yCU4DK3BSNtDxxRI
jpKtEpD0Sd9x673s37zTiL5RQdTN7PGqlfARnED3BmIeDrj++jcwb0lVaSjkGzkcTQJGtyucdkAm
WA5/ET5YiALJ2Rug+nU=MIIGJDCCBQygAwIBAgIIKYFH7VIS3nUwDQYJKoZIhvcNAQEFBQAwTDELMAkGA1UEBhMCQlIxEzAR
BgNVBAoTCklDUC1CcmFzaWwxKDAmBgNVBAMTH1NFUkFTQSBDZXJ0aWZpY2Fkb3JhIERpZ2l0YWwg
djEwHhcNMTAwMzI1MTEwMDAwWhcNMTMwMzI0MTEwMDAwWjCB4zELMAkGA1UEBhMCQlIxEzARBgNV
BAoTCklDUC1CcmFzaWwxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRgwFgYDVQQLEw8wMDAwMDEwMDA5
NjkzMTMxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNPKTEUMBIGA1UE
CxMLKEVNIEJSQU5DTykxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNP
KTEhMB8GA1UEAxMYU09NSUNSTyBJTkZPUk1BVElDQSBMVERBMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQCVRx9DKPxykWx8yYuWv7AMqv1YnZqUdQMKgqSvd1neXP+gnS0pkA3/lxNsIN6rSGIJ
RSSdfBc5VEq82Tt2Wpzcw2lBOtGSeIw3Jp45T3EfzrSHhIpUqD6OUkB2H4IjYk/517uGi/m8QkoW
7nH6ckTDINI6czABW8B5QcaNAXW22QIDAQABo4IC9DCCAvAwDgYDVR0PAQH/BAQDAgXgMB0GA1Ud
JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAfBgNVHSMEGDAWgBS3YKhb+bKmrgDtdOvVSsmWaGb1
XDCBtwYDVR0RBIGvMIGsgRdHRVJFTkNJQUBTT01JQ1JPLkNPTS5CUqA4BgVgTAEDBKAvEy0yMzA2
MTk2ODUxMzA5NzUwNjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgIwYFYEwBAwKgGhMYSkFR
VUVTIE1BUkNPTkUgREUgQVJBVUpPoBkGBWBMAQMDoBATDjcxNDIxMDc3MDAwMTgzoBcGBWBMAQMH
oA4TDDAwMDAwMDAwMDAwMDBXBgNVHSAEUDBOMEwGBmBMAQIDAzBCMEAGCCsGAQUFBwIBFjRodHRw
Oi8vd3d3LmNlcnRpZmljYWRvZGlnaXRhbC5jb20uYnIvcmVwb3NpdG9yaW8vZHBjMIHwBgNVHR8E
gegwgeUwSaBHoEWGQ2h0dHA6Ly93d3cuY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9yZXBvc2l0
b3Jpby9sY3Ivc2VyYXNhY2R2MS5jcmwwQ6BBoD+GPWh0dHA6Ly9sY3IuY2VydGlmaWNhZG9zLmNv
bS5ici9yZXBvc2l0b3Jpby9sY3Ivc2VyYXNhY2R2MS5jcmwwU6BRoE+GTWh0dHA6Ly9yZXBvc2l0
b3Jpby5pY3BicmFzaWwuZ292LmJyL2xjci9TZXJhc2EvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYWNk
djEuY3JsMIGXBggrBgEFBQcBAQSBijCBhzA8BggrBgEFBQcwAYYwaHR0cDovL29jc3AuY2VydGlm
aWNhZG9kaWdpdGFsLmNvbS5ici9zZXJhc2FjZHYxMEcGCCsGAQUFBzAChjtodHRwOi8vd3d3LmNl
cnRpZmljYWRvZGlnaXRhbC5jb20uYnIvY2FkZWlhcy9zZXJhc2FjZHYxLnA3YjANBgkqhkiG9w0B
AQUFAAOCAQEALsOHlJmf9s2yZVPLmW8O3nqBh0+jmxy0MNdkA0IpeadtSfWJ7dMcnYw6ak67eUnf
UHk8AsOg4p8RyYF5xEcTfWdt5IpcS4vkZlplqVChHuYeGgzsn/L6aVZme1Nu9331sfts6wZNSk33
HqBVJ8Fx2CGyWmfJcAWKxXA+JC4mSDiAbCQS4W2Y0YEk9p25ePNRhIIveuKXa+agCIJZwUMqXqyv
qxkVpp9HIRQlXT8uLsjrqJLlzl51O5e+xojRHLj3vOVmStRkVIHwcTrCQk2RmJZLmtHlbX6E4Y2Z
Q+sn5QrcJiNfBcRWB0ssZ+EENgEbc1SgeXk+vKdqRVwYtu1gAQ==

e essa é a minha msg SOAP

<?xml version="1.0" ?>312.001000000000006203100241973VENDA DE MERCADORIA ADQUIRIDA OU RECEBIDA DE TERCEIROS QUE N05511442010-12-232010-12-2313106200111210INTEGRADOR GESTOR71421077000183SOMICRO SERVIDOR 1SOMICRO SERVIDOR 2RUA CATETE9998 andarBARROCA3106200BELO HORIZONTEMG302603901058BRASIL0629332510066133981937000144AGAFLORESCATETEBELO HORIZONTEBARROCA3106200BELO HORIZONTEMG1058BRASIL20PLACA DE VIDEO123456785102UN1.0000100.0000100.00UN1.0000100.0000104107070.000.000.000.00100.000.000.000.000.000.000.000.000.00100.000YB+PYdHHXZ5UxvNxxnYuBR1XwkQ=YHvNHfEhSw3IiuLd4479x82QRlXoboBS8NFlInIJsDCFZpQZMpRVMdjVcOr1yCU4DK3BSNtDxxRI

jpKtEpD0Sd9x673s37zTiL5RQdTN7PGqlfARnED3BmIeDrj++jcwb0lVaSjkGzkcTQJGtyucdkAm
WA5/ET5YiALJ2Rug+nU=MIIGJDCCBQygAwIBAgIIKYFH7VIS3nUwDQYJKoZIhvcNAQEFBQAwTDELMAkGA1UEBhMCQlIxEzAR
BgNVBAoTCklDUC1CcmFzaWwxKDAmBgNVBAMTH1NFUkFTQSBDZXJ0aWZpY2Fkb3JhIERpZ2l0YWwg
djEwHhcNMTAwMzI1MTEwMDAwWhcNMTMwMzI0MTEwMDAwWjCB4zELMAkGA1UEBhMCQlIxEzARBgNV
BAoTCklDUC1CcmFzaWwxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRgwFgYDVQQLEw8wMDAwMDEwMDA5
NjkzMTMxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNPKTEUMBIGA1UE
CxMLKEVNIEJSQU5DTykxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNP
KTEhMB8GA1UEAxMYU09NSUNSTyBJTkZPUk1BVElDQSBMVERBMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQCVRx9DKPxykWx8yYuWv7AMqv1YnZqUdQMKgqSvd1neXP+gnS0pkA3/lxNsIN6rSGIJ
RSSdfBc5VEq82Tt2Wpzcw2lBOtGSeIw3Jp45T3EfzrSHhIpUqD6OUkB2H4IjYk/517uGi/m8QkoW
7nH6ckTDINI6czABW8B5QcaNAXW22QIDAQABo4IC9DCCAvAwDgYDVR0PAQH/BAQDAgXgMB0GA1Ud
JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAfBgNVHSMEGDAWgBS3YKhb+bKmrgDtdOvVSsmWaGb1
XDCBtwYDVR0RBIGvMIGsgRdHRVJFTkNJQUBTT01JQ1JPLkNPTS5CUqA4BgVgTAEDBKAvEy0yMzA2
MTk2ODUxMzA5NzUwNjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgIwYFYEwBAwKgGhMYSkFR
VUVTIE1BUkNPTkUgREUgQVJBVUpPoBkGBWBMAQMDoBATDjcxNDIxMDc3MDAwMTgzoBcGBWBMAQMH
oA4TDDAwMDAwMDAwMDAwMDBXBgNVHSAEUDBOMEwGBmBMAQIDAzBCMEAGCCsGAQUFBwIBFjRodHRw
Oi8vd3d3LmNlcnRpZmljYWRvZGlnaXRhbC5jb20uYnIvcmVwb3NpdG9yaW8vZHBjMIHwBgNVHR8E
gegwgeUwSaBHoEWGQ2h0dHA6Ly93d3cuY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9yZXBvc2l0
b3Jpby9sY3Ivc2VyYXNhY2R2MS5jcmwwQ6BBoD+GPWh0dHA6Ly9sY3IuY2VydGlmaWNhZG9zLmNv
bS5ici9yZXBvc2l0b3Jpby9sY3Ivc2VyYXNhY2R2MS5jcmwwU6BRoE+GTWh0dHA6Ly9yZXBvc2l0
b3Jpby5pY3BicmFzaWwuZ292LmJyL2xjci9TZXJhc2EvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYWNk
djEuY3JsMIGXBggrBgEFBQcBAQSBijCBhzA8BggrBgEFBQcwAYYwaHR0cDovL29jc3AuY2VydGlm
aWNhZG9kaWdpdGFsLmNvbS5ici9zZXJhc2FjZHYxMEcGCCsGAQUFBzAChjtodHRwOi8vd3d3LmNl
cnRpZmljYWRvZGlnaXRhbC5jb20uYnIvY2FkZWlhcy9zZXJhc2FjZHYxLnA3YjANBgkqhkiG9w0B
AQUFAAOCAQEALsOHlJmf9s2yZVPLmW8O3nqBh0+jmxy0MNdkA0IpeadtSfWJ7dMcnYw6ak67eUnf
UHk8AsOg4p8RyYF5xEcTfWdt5IpcS4vkZlplqVChHuYeGgzsn/L6aVZme1Nu9331sfts6wZNSk33
HqBVJ8Fx2CGyWmfJcAWKxXA+JC4mSDiAbCQS4W2Y0YEk9p25ePNRhIIveuKXa+agCIJZwUMqXqyv
qxkVpp9HIRQlXT8uLsjrqJLlzl51O5e+xojRHLj3vOVmStRkVIHwcTrCQk2RmJZLmtHlbX6E4Y2Z
Q+sn5QrcJiNfBcRWB0ssZ+EENgEbc1SgeXk+vKdqRVwYtu1gAQ==</S:Body></S:Envelope>

por favor, me ajudem,obrigado

W

Utilizando a ferramenta wsimport para gerar as classes Java à partir do WSDL, é possível gerar uma classe que receba o cabeçalho como argumento. Contudo, é necessário informar o parâmetro -XadditionalHeaders.

/**
 * NfeStatusServico2 (versão 2.00)
 */

// Sem -XadditionalHeaders
@WebMethod(action = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2")
@WebResult(name = "nfeStatusServicoNF2Result", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2", partName = "nfeStatusServicoNF2Result")
public NfeStatusServicoNF2Result nfeStatusServicoNF2(
	@WebParam(name = "nfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2", partName = "nfeDadosMsg")
        NfeDadosMsg nfeDadosMsg);

// Com -XadditionalHeaders
@WebMethod(action = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2")
@WebResult(name = "nfeStatusServicoNF2Result", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2", partName = "nfeStatusServicoNF2Result")
public NfeStatusServicoNF2Result nfeStatusServicoNF2(
	@WebParam(name = "nfeDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2", partName = "nfeDadosMsg")
        NfeDadosMsg nfeDadosMsg,
        @WebParam(name = "nfeCabecMsg", targetNamespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2", header = true, mode = WebParam.Mode.INOUT, partName = "nfeCabecMsg")
        Holder<NfeCabecMsg> nfeCabecMsg));

Perceba que no segundo trecho, é possível informar o cabeçalho como segundo parâmetro da chamada do serviço.

Para aqueles que configuraram a tarefa no Ant, segue um trecho de exemplo:

<wsimport wsdl="arquivo.wsdl" destdir="bin/" sourcedestdir="src/" package="br.com.nfe.servicos" extension="true" xadditionalHeaders="true" verbose="true" />

Para quem utiliza a linha de commando, utilize o wsimport com os comandos a seguir:

wsimport -d bin -extension -XadditionalHeaders -keep -s src -verbose arquivo.wsdl -p br.com.nfe.servicos

Importante: Utilize os métodos do ObjectFactory para criar os objetos de serviço e os JAXBElements. Esta classe tem várias configurações de namespace que são importantes.

W

Links importantes

No link do JAX-WS, veja informações sobre o wsimport, em Tools.

P

Boa noite!
Eu tambem já estou ficando maluco de tanto quebrar a cabeça tentando resolver o mesmo problema.
Agradeço se me enviar a classe completa onde voce resolveu esse problema.
Meu email: [email removido]
Desde já agradeço!
Um abraço!

F

aix, seria muito mais facil se você tivesse disponibilizado o projeto aqui no forum. Dessa forma não tinha tanta gente pedindo “manda para mim tb!!!”

Se puder forneça os fontes para pessoal.

Obrigado,

Fred

aix:
zoren:
Você utilizou qual classe para trabalhar com o nós do XML?

Apenas passando o objeto TConsStatServ e colocando a chamada dele no ObjectFactory dos stubs, para de dar erro, mas a resposta vem null.

me da seu email que te envio um projeto java fazendo a consulta ai vc vai entender melhor, para poder adaptar pro seu sistema, e se mesmo assim não der me mostra suas classes que tendo ajudar, abraços

[email removido]

P

Por favor! Mande para mim tambem. Obrigado! email: [email removido]

E

Bom dia a todos.

Estamos com um projeto da NFe versão 2 em desenvolvimento no svn.
Aos interessados, enviar um email para [email removido] para criarmos um login e senha pra terem acesso ao projeto.
Assim todos podem contribuir e se beneficiar.

Atenciosamente.

J

Alguém utiliza para emissão da NF-e: Tomcat ou Jboss + Axis2 + Eclipse?

Estou com uma aplicação onde apresenta um erro que não conseguir resolver o problema.

Tenho uma classe que quando executo através do Java Application ela funciona normal para enviar o lote da NFe para a SEFAZ, porém quando utilizo o Tomcat ou o Jboss ele apresenta problema.

Necessito fazer alguma configuração do Tomcat para para ele utilizar o AXIS2?

T
aix:
Ai gurizada consegui o Status de OK na NF-e 2.0 usando JAX-WS, SOAP 1.2 passando Header e Body dentro do envelope Soap se alguem quiser saber como é basta me mandar um email, abraços.
---[HTTP request]---
SOAPAction: ""
Accept: application/soap+xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Type: application/soap+xml; charset=utf-8;action="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2"
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
   <S:Header>
      <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <cUF>43</cUF>
         <versaoDados>2.00</versaoDados>
      </nfeCabecMsg>
   </S:Header>
   <S: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>43</cUF>
           <xServ>STATUS</xServ>
         </consStatServ>
      </nfeDadosMsg>
   </S:Body>
</S:Envelope>--------------------
---[HTTP response 200]---
null: HTTP/1.1 200 OK
Cache-control: private, max-age=0
Content-type: application/soap+xml; charset=utf-8
Content-length: 797
X-powered-by: ASP.NET
Server: Microsoft-IIS/6.0
Date: Thu, 20 May 2010 22:31:27 GMT
X-aspnet-version: 2.0.50727
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
      <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <cUF>43</cUF>
         <versaoDados>2.00</versaoDados>
      </nfeCabecMsg>
   </soap:Header>
   <soap:Body>
      <nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
         <retConsStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
            <tpAmb>2</tpAmb>
            <verAplic>RS20100210143458</verAplic>
            <cStat>107</cStat>
            <xMotivo>Servico em Operacao</xMotivo>
            <cUF>43</cUF>
            <dhRecbto>2010-05-20T19:31:27</dhRecbto>
            <tMed>1</tMed>
         </retConsStatServ>
      </nfeStatusServicoNF2Result>
   </soap:Body>
</soap:Envelope>--------------------

Como você conseguiu pegar a data / hora sem o -3:00 que fica no final...


2010-05-20T19:31:27

Desde já obrigado.

A

acredito que na época eu tenha utilizado os adapter do JAXB, se foi isto ficaria + ou - assim:

package sefaz.xml;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

/**
 * Adapter para o JAXB que converte uma String no formato yyyy-MM-dd para um objeto
 * Date e vice-versa.
 * @author Dilnei Cunha
 *
 */
public class XmlAdapterToDate extends XmlAdapter<String, Date> {

    @Override
    public String marshal(Date date) throws Exception {
        if (date == null) {
            return null;
        }
        return new SimpleDateFormat("yyyy-MM-dd").format(date);
    }

    @Override
    public Date unmarshal(String date) throws Exception {

        if (date == null || date.isEmpty() || date.trim().isEmpty()) {
            return null;
        }

        return new SimpleDateFormat("yyyy-MM-dd").parse(date);

    }
}

e usava assim:

@XmlJavaTypeAdapter(value = XmlAdapterToDate.class)
 private Date data;

obs: abandonei o uso de lib como Axis e JAX-WS na NF-e e preferi usar SOAP, foi muito melhor, no fórum do javaC tem tudo que vc precisa, abraços.

R

http://www.teses.usp.br/teses/disponiveis/55/55134/tde-24072012-164751/pt-br.php

D

Estava com tantos topicos abertos que acabei postando no errado. Onde eu apago?

J

Olá pessoal,

Podem me enviar também?

[email removido]

D

Cara você roda isso no Weblogic?

Estou utilizando esse método no weblogic, e ele não funciona da erro, dá connection reset.

public static void ajustaSslCertificadoA1() {  
    System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
    System.setProperty("javax.net.ssl.trustStore", "homologacao_nfe_sefaz_rs_gov_br");  

    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());  
    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");  
    System.setProperty("javax.net.ssl.keyStore", "certificado.pfx");  
    System.setProperty("javax.net.ssl.keyStorePassword", "senha_doCertificado");  
}

Alguém sabe o que fazer pra funcionar no Weblogic?

A

não rodei no weblogic manu, mas onde o erro acontece aqui new com.sun.net.ssl.internal.ssl.Provider() ?

D

Não ele passa por isso, mas na hora de chamar o serviço dá erro, dá connection reset.
Na IDE Funciona perfeito, é só quando eu subo pro Weblogic que da erro.

Esse weblogic é uma tristeza.

A

DANTONIO:
Não ele passa por isso, mas na hora de chamar o serviço dá erro, dá connection reset.
Na IDE Funciona perfeito, é só quando eu subo pro Weblogic que da erro.

Esse weblogic é uma tristeza.

brother mas vc tem suporte da Oracle, weblogic é pago e não é nada barato, ainda bem que no sistema que estou construindo instrui a colocarem Jboss wild-fly, vou dar uma olha na documentação desse server, e te respondo assim que possivel, se você conseguir antes me avisa, abraços.

A

DANTONIO:
Não ele passa por isso, mas na hora de chamar o serviço dá erro, dá connection reset.
Na IDE Funciona perfeito, é só quando eu subo pro Weblogic que da erro.
Esse weblogic é uma tristeza.

isso não tem firewall barrando?

D

Não tem, parece que o Weblogic reseta a conexão, acho que tem que fazer alguma coisa nele.
Pq ele cai por time out e retorna exception de connection reset

D

Oi Aix tudo bem…?
Consegui matar o problema do Weblogic, joguei a segurança na inicialização do weblogic

Agora me ajuda numa parada, estou tentando consumir a sefaz com JAX-WS, vc tem o exemplo de como vc fez aparte do cabeçalho e dos dados da mensagem…

Já tentei de tudo e só estou recebendo erro.

Poderia por favor postar ou me mandar [email removido]

Obrigado

A

com JAX-WS foi bem complicado naquela época, era pouca informação, mas os problemas com jax-ws eram, que no parse o JAXB modificava o xml de envio, adicionando na request uns prefixos nas namespaces ex:ns:1, ns:2 etc…
a NF-e é bem rígida com o xml, eles não permitem prefixo nas namespaces, na época tive que implementar uma Interface (NamespacePrefixMapper) ex:http://hwellmann.blogspot.com.br/2011/03/jaxb-marshalling-with-custom-namespace.html
O erro geralmente é gerado ao assinar a NF-e, pois, nesse momento ou após, se faz parse no xml, a tranformação de Object/XML e XML/Object faz gerar os prefixos das namespaces, outra forma é colocando os frefixos no momento do envio.
Outra coisa, com JAX-WS se vc esta gerando os esqueletons, é preciso configurar a geração, pois tem que especificar que tem header -XadditionalHeaders, depois precisa usar aquele Holder.
Eu não tenho exemplos, posso apenas te ajudar a fazer, porém se quiser ganhar tempo,e que seja uma simples implementação, neste caso, somente neste!, indico o Axis2, com Axis2 o comportamento é como falou, cabeçalho e dados.
posta o erro, abraços.

D

Cara Segue o meu código, não sei se estou fazendo alguma coisa anormal.

System.setProperty("weblogic.security.SSL.ignoreHostnameVerification",
                           "true");
        System.setProperty("sun.security.ssl.allowUnsafeRenegotiation",
                           "true");
        System.clearProperty("javax.net.ssl.keyStore");
        System.clearProperty("javax.net.ssl.keyStorePassword");
        System.clearProperty("javax.net.ssl.trustStore");
        System.setProperty("java.protocol.handler.pkgs",
                           "com.sun.net.ssl.internal.www.protocol");
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
        System.setProperty("javax.net.ssl.keyStore",
                          keyStore);
        System.setProperty("javax.net.ssl.keyStorePassword",keyStorePass);
        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore",
                           trustStore);
        System.setProperty("javax.net.ssl.trustStorePassword",trustStorePass);

        nfeStatusServico2 = new NfeStatusServico2();
        NfeStatusServico2Soap12 myPort =
            nfeStatusServico2.getNfeStatusServico2Soap12();
        // Add your code to call the desired methods.


        StringBuffer xml = new StringBuffer();
        xml.append("<consStatServ versao=\"2.00\" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
        xml.append("<tpAmb>2</tpAmb>");
        xml.append("<cUF>31</cUF>)");
        xml.append("<xServ>STATUS</xServ>");
        xml.append("</consStatServ>");
        
        try {
            DocumentBuilderFactory builderFactory =
                DocumentBuilderFactory.newInstance();
            ByteArrayInputStream stream =
                new ByteArrayInputStream(xml.toString().getBytes());
            Document doc = builderFactory.newDocumentBuilder().parse(stream);


            /** Create SoapMessage  **/
            MessageFactory msgFactory = MessageFactory.newInstance();
            SOAPMessage message = msgFactory.createMessage();
            SOAPBody soapBody = message.getSOAPBody();
            SOAPElement payLoad = (SOAPElement)soapBody.addDocument(doc);

            /** Call webservice **/
            NfeDadosMsg nfeDadosMsg = new NfeDadosMsg();
            nfeDadosMsg.getContent().add(0, payLoad);
            NfeCabecMsg nfeCabecMsg = new NfeCabecMsg();
            nfeCabecMsg.setCUF("35");
            nfeCabecMsg.setVersaoDados("3.10");
            Holder<NfeCabecMsg> nfeHolder =
                new Holder<NfeCabecMsg>(nfeCabecMsg);

            NfeStatusServicoNF2Result nfeResult =
                myPort.nfeStatusServicoNF2(nfeDadosMsg, nfeHolder);
            SOAPElement result = (SOAPElement)nfeResult.getContent().get(0);

        } catch (Exception e) {
            e.printStackTrace();
        }

O Erro é esse:

javax.xml.ws.WebServiceException: No Content-type in the header!
	at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:268)
	at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:124)
	at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:121)
	at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:866)
	at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:815)
	at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:778)
	at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:680)
	at com.sun.xml.ws.client.Stub.process(Stub.java:272)
	at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:153)
	at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:115)
	at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:95)
	at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:136)
	at $Proxy31.nfeStatusServicoNF2(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at weblogic.wsee.jaxws.spi.ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:84)
	at $Proxy32.nfeStatusServicoNF2(Unknown Source)
	at oracle.e1.bssv.proxy.NfeStatusServico2Soap12Client.main(NfeStatusServico2Soap12Client.java:92)
Process exited with exit code 0

Na criação do NfeStatusServico2Soap12 ele criou o parametro do cabeçalho conforme vc disse.
(Estou utilizando o JDeveloper)

Criado 13 de maio de 2010
Ultima resposta 21 de mar. de 2014
Respostas 39
Participantes 21