NF-e 4.00 - SOAPAction Error (Java - SOAP) - RESOLVIDO

Bom dia,

Estou trabalhando em um projeto de NF-e 4.00 e depois de sofrer bastante já estou conseguindo gerar uma nota válida para o estado do PR. Porém, ao mudar o estado para RS obtenho o seguinte erro:
java.lang.RuntimeException: Unable to handle request without a valid action parameter. Please supply a valid soap action.

As duas notas que fiz foi com dados consistentes, funcionam na versão 3.10.
A única diferença que notei entre os dois estados é o link, aonde um termina com .asmx e o outro com ?WSDL. Um rapaz experiente de outro forum me falou que não precisa fazer nenhum tratamento especial nos links, então fiquei sem ideias. Alguém ai já passou por isso ou pode me ajudar?

https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx
https://homologacao.nfe.sefa.pr.gov.br/nfe/NFeAutorizacao4?wsdl

O client que você está utilizando não identificou uma action válida. Como se não houvesse uma ação, um método, um serviço a ser executado. Entendeu?
Tem certeza que o WSDL é o mesmo ou é coerente com o que usava para o PR?

Aquele que passei antes era o link do WS. Pelo que vi, o link do SOAPAction fica igual para todos os estados… (Link abaixo)
http://www.portalfiscal.inf.br/nfe/wsdl/NFeConsultaProtocolo4/nfeConsultaNF (Nesse caso o de Consulta)

Esse link ai eu vi também acessesando o WS direto pelo navegador.

Para teste, passei fixo o de consulta, que é o primeiro que ele executa e da erro:
header.addHeader(“SOAPAction”, ““http://www.portalfiscal.inf.br/nfe/wsdl/NFeConsultaProtocolo4/nfeConsultaNF””);

E qual o wsdl dele? Afinal, se você está usando um client, o mesmo deve ter sido construído a partir de um contrato, não?

Quando você diz “wsdl”, quer dizer esse anexo que estou mandando?

NfeConsulta4.xml (3,3 KB)

Não, me refiro a um WSDL mesmo e não a um XML.
O WSDL (web service definition language) ou contrato é uma estrutura fundamental para web services baseados em SOAP.
Sem eles, não existe como um client comunicar-se com o serviço, pois é nele que estão definidos todos os detalhes deste acesso.
A action em questão, neste caso, é a SOAPAction, que, em um modo grosseiro, é o método a ser executado pelo serviço que está exposto.

Então, pelo que entendi é o conteúdo que tem dentro desse XML que passei (salvei como XML), aonde tem wsdl:definitions, wsdl:types…
Eu tenho acesso a isso acessando a URL do estado com o ?WSDL no final.

EDIT: Eu fiz uns testes usando o estado do PR (que estava gerando um XML válido). Coloquei fixo a URL de consulta do Paraná, e não deu erro (não gerou o XML por usar só a URL de consulta). Depois coloquei fixo a URL do RS, e deu o erro do SOAPAction.
E ao usar a URL do PR no RS, ele não deu o erro do SOAPAction.
Também coloquei um SOAPAction inválido, e não deu erro (então imagino que ele não é necessário para SOAP 1.2).

Ai pensei no que você escreveu sobre o WSDL. Quando acesso a URL do PR pelo navegador, abre as definições do WSDL. Se eu abrir o do RS abre uma outra página.

Só para deixar o registro, conclui os testes com a NF-e 4.00. O problema relatado por mim acima, foi resolvido. Eu estava tentando mandar o nome do serviço como “NFeAutorizacao”. Mudei para o código abaixo e resolveu meu problema.

public Autorizacao(URL url, JAXBContext context, AssinadorDeXML keyStoreManager, Configuracao configuracao) {
super(“4.00”, url, keyStoreManager, context, “NFeAutorizacao4”, getParameterName(configuracao));
}

@leosemnardo o você tem um exemplo do Header que enviou? Eu estou testando entender o que aconteceu no header da requisição, removi e etc, mas mesmo assim apresenta erro.

Não tenho agora, mas teria como mandar o seu ou o erro que está ocorrendo?

1 curtida

Consegui resolver, removi o Header e no body passei a Action com CamelCase