Eu estou consumindo um serviço que construi utilizando o ECLIPSE e AXIS2.
Fiz testes com o SOAPUI funciona perfeitamente, convocou o serviço e trouxe a resposta.
No Eclipse, em outro projeto eu importei o WSDL: New > WebService Client e ele criou o WS Client.
Ao fazer a chamada, ele da um erro que não consigo resolver.
Debugando eu consigo pegar o xml de retorno mas da um erro na hora de fazer um parse.
Quem puder me ajudar eu agradeço muito.
Abaixo as informações:
ChamadaServicos.java - classe do webservice
ExecutaServicos.java - classe que executa o serviços
Classe que foi gerada o WSDL no AXIS2:
public class ChamadaServicos {
ExecutaServicos exec = new ExecutaServicos();
Respostas retorno = new Respostas();
public ChamadaServicos() throws Exception{
super();
}
public Respostas servicos (Transacao dto) throws Exception{
if(!"".equals(dto.getTransacao()) && !"".equals(dto.getParametros())){
try{
retorno = exec.executaServicos(dto);
if(retorno.getParametros().isEmpty()){
Parametros param = new Parametros();
param.setNome("Sem Dados!");
param.setValor("Sem Dados!");
retorno.parametros.add(param);
}
}catch (Exception e) {
e.printStackTrace();
retorno.setDescRetorno("Erro nos parametros enviados!" + e.getMessage().toString());
}
}else{
retorno.setDescRetorno("Erro nos parametros enviados!" + "TRANSACAO: " + dto.getTransacao() + "PARAMETROS: " + dto.getParametros());
}
return retorno;
}
Em anexo o WSDL gerado da classe acima.
Implementação da chamada ao WS:
ChamadaServicosStub.Servicos servicos = new ChamadaServicosStub.Servicos();
ChamadaServicosStub.ServicosResponse servicosResp = new ChamadaServicosStub.ServicosResponse();
ChamadaServicosStub.Transacao transacao = new ChamadaServicosStub.Transacao();
ChamadaServicosStub.Parametros param01 = new ChamadaServicosStub.Parametros();
ChamadaServicosStub.Parametros param02 = new ChamadaServicosStub.Parametros();
ChamadaServicosStub.Parametros param03 = new ChamadaServicosStub.Parametros();
transacao.setTransacao("PROGRAMA001");
transacao.setUsuario("USUARIO");
transacao.setSenha("SENHA");
param01.setNome("chaveCpf");
param01.setValor("9999");
transacao.addParametros(param01);
param02.setNome("chaveDDDTelefone");
param02.setValor("12345");
transacao.addParametros(param02);
param03.setNome("chaveTelefone");
param03.setValor("555555");
transacao.addParametros(param03);
servicos.setDto(transacao);
try {
ChamadaServicosStub stub = new ChamadaServicosStub("http://localhost:8080/projeto/services/ChamadaServicos?wsdl");
ChamadaServicosStub.ServicosResponse res = stub.servicos(servicos);
} catch (AxisFault e) {
System.out.println("erro ao conectar com o web service");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("erro ao chamar serviço remoto");
e.printStackTrace();
} catch (Throwable e) {
System.out.println("erro inesperado");
e.printStackTrace();
}
XML de retorno, capturado no debug do STUB:
XML DE RETORNO:
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:servicosResponse xmlns:ns="http://webService.sipcs.indra.com"><ns:return xmlns:ax29="http://login.sipcs.indra.com/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax23="http://bean.identificacaoPositiva.sipcs.indra.com/xsd" xmlns:ax21="http://webService.sipcs.indra.com/xsd" xmlns:ax24="http://identificacaoPositiva.sipcs.indra.com/xsd" xmlns:ax211="http://errores.comun.sipcs.indra.com/xsd" xmlns:ax26="http://service.identificacaoPositiva.sipcs.indra.com/xsd" xsi:type="ax21:Respostas">
<ax21:codRetorno>00</ax21:codRetorno>
<ax21:descRetorno>Operacao efetuada com sucesso!</ax21:descRetorno>
<ax21:parametros xsi:type="ax21:Parametros">
<ax21:nome>indRestritivo</ax21:nome>
<ax21:valor> </ax21:valor>
</ax21:parametros>
<ax21:parametros xsi:type="ax21:Parametros">
<ax21:nome>99</ax21:nome>
<ax21:valor>12345 555 0 000PROCESSAMENTO OK</ax21:valor>
</ax21:parametros>
</ns:return>
</ns:servicosResponse>
</soapenv:Body>
</soapenv:Envelope>
O ERRO:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://webService.sipcs.indra.com/xsd}parametros
O erro acontece neste ponto do STUB:
private java.lang.Object fromOM(
org.apache.axiom.om.OMElement param,
java.lang.Class type,
java.util.Map extraNamespaces) throws org.apache.axis2.AxisFault{
ERRO no parse:
if (com.indra.sipcs.webservice.ChamadaServicosStub.ServicosResponse.class.equals(type)){
return com.indra.sipcs.webservice.ChamadaServicosStub.ServicosResponse.Factory.parse(param.getXMLStreamReaderWithoutCaching());
}