Problema com WebServices AXIS2 Java e C#

Pessoal, bom dia!

Estou com um problema que já tentei de tudo ao meu alcance para tentar resolvê-lo e não achei nenhuma dica tanto na web quanto aqui no fórum. Pois bem, Desenvolvi um WebService AXIS2 em java. Desenvolvimento tranquilo e com o cliente em java ele funciona perfeitamente todos os métodos.

Só que este WebServices será consumido por um aplicativo feito e C# e ai é que começou a dar problema. Vou tentar descrever o problema e colocar aqui o stacktrace do WebServices…

Este WebServices tem dois métodos, um para consultar cliente, que recebe um string CPF e retorna um objeto cliente, este serviço funciona perfeitamente. E outro serviço que é cadastrarCliente que recebe um cobjeto cliente e retorna 1 se deu sucesso ou 0 se deu erro. Quando chamo o método cadastrarCliente do C# dá o erro abaixo…

O stacktrace do Tomcat:

[ERROR] Exception occurred while trying to invoke service method cadastrarCliente
org.apache.axis2.AxisFault: InvocationTargetException : java.lang.reflect.InvocationTargetException
at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:477)
at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:818)
at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:737)
at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:646)
at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:206)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

A wsdll do webServices está aqui http://fenixws.no-ip.org:8080/CassolWS/services/Servicos?wsdl

O interessante é o seguinte, no cliente em C# se crio o objeto cliente e depois seto os atributos dele, dá este erro. Caso eu faça uma consulta, que retorna um objeto cliente e chame o método cadastrarCliente passando este mesmo cliente o método funciona perfeitamente…

Alguém já se deparou com este problema? Infelizmente o cliente tem que ser em C# não pode ser em Java…

Obrigado,

Hugo

ws não está disponível.

Ao invés de receber um objeto, por que você não recebe parâmetros? tenta desse modo…

Não sei como funciona a integração do C# com Java.

Hebert,

Agora está disponível, tinha caído…

Pensei nesta sua solução, inclusive estou implementado-a, mas o objeto cliente é bem complexo, com muitos campos e outros campos que são lista de outros objetos, ou seja, estou com receio de fazer isso e por exemplo ter problema com outra classe que seria endereco por exemplo…

Abraços,

Hugo

Quem quiser testar o serviço pode usar o CPF 191…

Abraços,

Hugo

[quote=hsmorais]Quem quiser testar o serviço pode usar o CPF 191…

Abraços,

Hugo[/quote]Eu já estou testando! :twisted:

Tira os breakpoints aí!

É, a consulta retorna null.

O cadastro dá exception:

Servicos servico = new Servicos(); ServicosPortType port = servico.getPort(ServicosPortType.class); Cliente cliente = new Cliente(); ObjectFactory factory = new ObjectFactory(); cliente.nome = factory.createClienteNome("jose"); System.out.println(port.cadastrarCliente(cliente)); [quote]Exception in thread “main” javax.xml.ws.soap.SOAPFaultException: Exception occurred while trying to invoke service method cadastrarCliente
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(Unknown Source)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at $Proxy30.cadastrarCliente(Unknown Source)
at com.Main2.main(Main2.java:12)[/quote]Desculpe não saber ajudar. ^^

Ainda estou aprendendo isso.

Hebert,

Obrigado pela ajuda…

Vc está testando em java? Em java eu consigo fazer funcionar, o problema é quando o cliente é em C#, que é quando dá o erro do lado do servidor, entendeu? Só que o erro só acontece quando eu crio o objeto cliente, se eu utilizar o objeto cliente que foi retornado de uma consulta ele funciona. Acho que tem algo a ver com a serialização de objetos… Ou alguma configuração que precise ser feita no C#…

Abraços,

Hugo

Bem,

Descobri o problema…

O problema era que tinha feito tratamento de tamanho de campos nos métodos set de alguns atributos da classe cliente, este tratamento só fazia truncar o string antes de fazer o setting, mas isto era suficiente para que quando fizesse um cadastro via C# desse o erro… Se fizesse consulta funcionava, o problema era criar o objeto cliente no C# e depois enviar ele para o WebServices…

Arranquei fora os tratamentos e funcionou redondo… Outra coisa que percebi no C# é que para alguns atributos de tipo data e int ele gera um outro atributo que recebe um boolean, tem de setar este campo para true para poder pegar ele no lado do servidor…

Abraços,

Hugo