Webservices SOAP 1.2 Header[Resolvido]

Links importantes

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

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: portoinfo@sercomtel.com.br
Desde já agradeço!
Um abraço!

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

[quote=aix][quote=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.[/quote]

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

dilneicunha@gmail.com[/quote]

Por favor! Mande para mim tambem. Obrigado! email: portoinfo@sercomtel.com.br

Bom dia a todos.

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

Atenciosamente.

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?

[quote=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.

[code]
—[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>

43
2.00

</S:Header>
<S:Body>


2
43
STATUS


</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

43
2.00

</soap:Header>
soap:Body


2
RS20100210143458
107
Servico em Operacao
43
2010-05-20T19:31:27
1


</soap:Body>
</soap:Envelope>--------------------
[/code][/quote]

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

[quote]
2010-05-20T19:31:27 [/quote]

Desde já obrigado.

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

[code]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);

}

}
[/code]

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.

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

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

Olá pessoal,

Podem me enviar também?

jbacatalao@yahoo.com.br

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?

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

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.

[quote=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.

[/quote]

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.

[quote=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.
[/quote]

isso não tem firewall barrando?

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

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 danilo.silva@gmail.com

Obrigado

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.

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)