Boa Tarde,
Comecei a desenvolver o serviço para efetuar o cancelamento da NFe e acabei me deparando com um problema na comunicação do cliente gerado com o serviço do Paraná. Recebendo a exceção abaixo:
javax.xml.ws.soap.SOAPFaultException: A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:155)
at com.sun.proxy.$Proxy75.nfeRecepcaoEvento(Unknown Source)
at br.com.devlogic.nfeapi.service.cancelamento.CancelamentoNfeServiceImpl.cancelar(CancelamentoNfeServiceImpl.java:113)
at br.com.devlogic.apinfe.envio.TestCancelamentoNfeService.consultar(TestCancelamentoNfeService.java:33)
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)
Tenho criado os clientes usando wsimport e todos tem funcionado normalmente (até agora).
Pelo que estive pesquisando sobre o motivo do erro, o web service parece atender somente requisições SOAP 1.1. Me corrigem se estiver errado.
Esse serviço do parana, parece ser um outra aplicação, diferente do que atende os outros serviços.
https://homologacao.nfe2.fazenda.pr.gov.br/nfe-evento/NFeRecepcaoEvento
Gostaria de saber o que tenho que fazer para atender esse serviço. Talvez gerar o cliente de outra forma, algo do tipo…
Tente gerar o cliente com o WSDL do PR mesmo, para ver se tem alguma diferença. Ou já fez isso?
Sim sim, todos os clientes tenho gerado com o wsdl do PR mesmo.
O que percebi, como comentei, esse serviço parece ser outra aplicação, diferente dos outros serviços.
E que esse serviço parece estar no padrao SOAP 1.1, pois o comando wsimport pode ser executado sem o parametro “-extension”, não gerando nenhum log de warning.
Ao contrario dos outros servicos, se rodado sem o parametro, gera o log:
Após um bom tempo, voltei a procura da solução desse problema. E comecei a ler a respeito sobre a definição no WSDL para atender SOAP 1.1 e 1.2.
Pela documentação, você define os binding conforme o protocolo. E configura as portas para atender ambas as versões.
No meu caso, o cliente web service foi gerado através do wsimport, q o padrão é SOAP 1.1, no comando nem era necessário adicionar o parâmetro -extension , dai saquei a causa, só pode ser problema no WSDL.
Verificando a definição de portas do WSDL, percebi que estava faltando a porta para SOAP 1.2. Conforme parte retirada:
<wsdl:service name='RecepcaoEvento'>
<wsdl:documentation xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>Servico destinado a recepcao de mensagens de evento de NF-e.</wsdl:documentation>
<wsdl:port binding='tns:RecepcaoEventoSoap' name='RecepcaoEventoSoap'>
<soap:address location='https://homologacao.nfe2.fazenda.pr.gov.br/nfe-evento/NFeRecepcaoEvento'/>
</wsdl:port>
</wsdl:service>
Para resolver, apenas adicionei a definicao da outra porta:
<wsdl:service name='RecepcaoEvento'>
<wsdl:documentation xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>Servico destinado a recepcao de mensagens de evento de NF-e.</wsdl:documentation>
<wsdl:port binding='tns:RecepcaoEventoSoap' name='RecepcaoEventoSoap'>
<soap:address location='https://homologacao.nfe2.fazenda.pr.gov.br/nfe-evento/NFeRecepcaoEvento'/>
</wsdl:port>
<wsdl:port binding='tns:RecepcaoEventoSoap12' name='RecepcaoEventoSoap12'>
<soap12:address location='https://homologacao.nfe2.fazenda.pr.gov.br/nfe-evento/NFeRecepcaoEvento'/>
</wsdl:port>
</wsdl:service>
Solução simples, mas que foi um pouco dificil de encontrar devido a falta de teoria para o uso de wsdl com soap 1.1 e 1.2 =/
O principal problema aí não foi você não saber soap 1.1 vs. 1.2 - como cliente de um WS, você não deveria ter que mexer no WSDL… 
Exatamente, concordo contigo.
Mas no wsdl tem a definição para SOAP 1.2, veja os bindings
<wsdl:binding name='RecepcaoEventoSoap' type='tns:RecepcaoEventoSoap'>
<soap:binding transport='http://schemas.xmlsoap.org/soap/http'/>
<wsdl:operation name='nfeRecepcaoEvento'>
<soap:operation soapAction='http://www.portalfiscal.inf.br/nfe/wsdl/RecepcaoEvento/nfeRecepcaoEvento' style='document'/>
<wsdl:input>
<soap:body use='literal'/>
<soap:header message='tns:nfeRecepcaoEventonfeCabecMsg' part='nfeCabecMsg' use='literal'></soap:header>
</wsdl:input>
<wsdl:output>
<soap:body use='literal'/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name='RecepcaoEventoSoap12' type='tns:RecepcaoEventoSoap'>
<soap12:binding transport='http://schemas.xmlsoap.org/soap/http'/>
<wsdl:operation name='nfeRecepcaoEvento'>
<soap12:operation soapAction='http://www.portalfiscal.inf.br/nfe/wsdl/RecepcaoEvento/nfeRecepcaoEvento' style='document'/>
<wsdl:input>
<soap12:body use='literal'/>
<soap12:header message='tns:nfeRecepcaoEventonfeCabecMsg' part='nfeCabecMsg' use='literal'></soap12:header>
</wsdl:input>
<wsdl:output>
<soap12:body use='literal'/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
Pela definição das portas estarem atendendo somente SOAP 1.1, então o problema pode ser no Web Service em si, certo ?
Sim, ou isso é um bug no WS, ou então mudaram a implementação e não atualizaram o WSDL.