Consumir WebServices com servlet

12 respostas
S

fala galera. To tentando acessar um webservice, fiz um programa em java que tá acessando ele, o webservice tá no ar, funcionando e retornando o resultado esperado. Precisei criar um servlet pra acessar esse mesmo webservice. Usei o mesmo stub mas obtive o seguinte erro:

AxisFault

faultCode: {<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>}Server.userException

faultSubcode:

faultString: java.lang.NullPointerException

faultActor:

faultNode:

faultDetail:

{<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}stackTrace: java.lang.NullPointerException

at java.util.Hashtable.put(Unknown Source)

at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.setProperty(Unknown Source)

at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:246)

at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)

at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)

at org.apache.axis.client.Call.invokeEngine(Call.java:2583)

at org.apache.axis.client.Call.invoke(Call.java:2553)

at org.apache.axis.client.Call.invoke(Call.java:2248)

at org.apache.axis.client.Call.invoke(Call.java:2171)

at org.apache.axis.client.Call.invoke(Call.java:1691)

at WrapperClient.WrapperFGVSoapBindingStub.execute(WrapperFGVSoapBindingStub.java:97)

at WrapperFGV.doGet(WrapperFGV.java:47)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

at java.lang.Thread.run(Unknown Source)

a linha em negrito é:
java.lang.Object _resp = _call.invoke(new java.lang.Object[] {xmlQuery});

xmlQuery e _call [b]não são nulos![/b]  mandei imprimir no console...

Alguém tem alguma idéia?

12 Respostas

danieldestro

Já que tá usando Axis, pq não cria uma classe cliente de acesso com o próprio Axis, ao invés de trabalhar com essas mais mais “baixo nível”?

S

como eu faco isso?

danieldestro

http://java.danieldestro.com.br/WebServicesComAxis.zip

S

Fiz o que me disse, mas continuo tendo o mesmo erro…

“e agora josé?”

danieldestro

Tá tentando mandar algum valor null?

S

Tá tentando mandar algum valor null?

pow, nem sei como testar isso…

danieldestro

public class MinhaClasseQueÉUmProxyWebService { //... }

MinhaClasseQueÉUmProxyWebService a = new MinhaClasseQueÉUmProxyWebService(); a.executarUmMetodoDoWS( null );

Isso está ocorrendo?

S

pequena confusão… disse que tinha acessado o webservice com um programa java, naum foi o que fiz, rodei O webservice como um programa comum (antes de convertelo), e ele faz o serviço… fiz um programinha java pra acessar o WS e deu pau! o erro foi o seguinte…

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname: bob_esponja

java.lang.reflect.InvocationTargetException

at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:260)

at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:169)

at org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:1015)

at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)

at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)

at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)

at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

at javax.xml.parsers.SAXParser.parse(Unknown Source)

at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:242)

at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)

at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)

at org.apache.axis.client.Call.invokeEngine(Call.java:2583)

at org.apache.axis.client.Call.invoke(Call.java:2553)

at org.apache.axis.client.Call.invoke(Call.java:2248)

at org.apache.axis.client.Call.invoke(Call.java:2171)

at org.apache.axis.client.Call.invoke(Call.java:1691)

at lorisclient.LORISSoapBindingStub.getLOs(LORISSoapBindingStub.java:97)

at teste.main(teste.java:55)

PS.: O webservice instancia classes por reflexão… algum problema??

danieldestro

Não sei os passos que você executou, mas se seguir o tutorial que te passei, funciona!

alf_f2

Cara tive um problema parecido quando executava o cliente de um WS …
dava:

AxisFault … java.lang.reflect.InvocationTargetException …

Precisei alterar algumas coisas no servidor que roda o WS.

Consegui rodar, porém a solução não é das mais belas.(Porém funcionou)

O meu webservice utilizava jars (driver de bd e outras coisas)

  • pra cada jar que ele executava, abri o jar com um programa ZIP

  • dei um extrair(ou Extract depende do programa ZIP), pasta destino:

C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\axis\WEB-INF\classes

  • Acrescentei a pasta ‘C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\axis\WEB-INF\classes’ no classpath do Tomcat.
    Se vc utiliza Windows clica com o direito no icone do tomcat que fica do lado do relogio… configure … Aba ‘Java’ … Java ClassPath… e adiciona este caminho de pasta

  • Restarta o Tomcat

  • Rodei o cliente e Funcionou

danieldestro

Mano do céu, que “solução” é esta, cara?
Afff Maria…

alf_f2

Eu sei que parece estranho mas funcionou.
Eu fiz isso por causa de uma coisa que uma pessoa falou nesta URL:
http://marc2.theaimsgroup.com/?l=axis-user&m=108315965124306&w=2

Espero que meu post te ajude…
se funcionar posta.
e se vc conseguir fazer funcionar de alguma outra maneira posta a solução tb por favor.

Flw

Criado 20 de maio de 2005
Ultima resposta 14 de fev. de 2007
Respostas 12
Participantes 3