Eu estou começando a aprender a trabalhar com web services
e estou com uma dúvida que não estou conseguindo resolver,
eu estou seguindo o seguinte tutorial para fazer o meu web services utilizando o Axis2:
Porém toda a hora que executo o cliente aparece o Axis Fault e eu não sei porque
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at clienteaxis2.ClienteAxis.main(ClienteAxis.java:34)
O problema está nessa linha na hora que eu utilizo o método call.invoke()
Integer result = (Integer) call.invoke(new Object[]{op1, op2});
O que será que eu estou fazendo de errado? Será que alguém poderia me dar uma ajuda?
[]'s.
K
kdoigor
cara, eu prefiro trabalhar com metro.
coloca a stack do servidor pra gente ver o que acontece lá.
R
roger_rf
Creio que você não inclui o stack trace na íntegra, publique o stack trace completo para analisarmos.
R
ricardocomp
Ficou um pouco grande o stack trace
Exceptioninthread"main"AxisFaultfaultCode:{http://schemas.xmlsoap.org/soap/envelope/}ServerfaultSubcode:faultString:namespacemismatchrequirehttp://calc found nonefaultActor:faultNode:faultDetail:{http://xml.apache.org/axis/}stackTrace:namespace mismatch require http://calc found noneatorg.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)atorg.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)atorg.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)atcom.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:604)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)atcom.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)atcom.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)atcom.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)atcom.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)atcom.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)atcom.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)atjavax.xml.parsers.SAXParser.parse(SAXParser.java:392)atorg.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)atorg.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)atorg.apache.axis.Message.getSOAPEnvelope(Message.java:435)atorg.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)atorg.apache.axis.client.AxisClient.invoke(AxisClient.java:206)atorg.apache.axis.client.Call.invokeEngine(Call.java:2784)atorg.apache.axis.client.Call.invoke(Call.java:2767)atorg.apache.axis.client.Call.invoke(Call.java:2443)atorg.apache.axis.client.Call.invoke(Call.java:2366)atorg.apache.axis.client.Call.invoke(Call.java:1812)atClienteAxis.main(ClienteAxis.java:34){http://xml.apache.org/axis/}hostname:garapanamespacemismatchrequirehttp://calc found noneatorg.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)atorg.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)atorg.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)atcom.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:604)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)atcom.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)atcom.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)atcom.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)atcom.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)atcom.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)atcom.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)atcom.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)atjavax.xml.parsers.SAXParser.parse(SAXParser.java:392)atorg.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)atorg.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)atorg.apache.axis.Message.getSOAPEnvelope(Message.java:435)atorg.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)atorg.apache.axis.client.AxisClient.invoke(AxisClient.java:206)atorg.apache.axis.client.Call.invokeEngine(Call.java:2784)atorg.apache.axis.client.Call.invoke(Call.java:2767)atorg.apache.axis.client.Call.invoke(Call.java:2443)atorg.apache.axis.client.Call.invoke(Call.java:2366)atorg.apache.axis.client.Call.invoke(Call.java:1812)atClienteAxis.main(ClienteAxis.java:34)JavaResult:1CONSTRUÍDOCOMSUCESSO(tempototal:0segundos)
Será que vc roger_rf e kdoigor ou alguém poderia me dar uma ajuda?
[]'s.
R
ricardocomp
Pelo menos parece que está tudo OK com o arquivo WSDL
Olá pessoal alguém sabe o que pode estar acontecendo?
O que será que eu fiz de errado?
Será que alguém poderia me dar uma ajuda? :D.
[]'s.
K
kdoigor
cara, posta seu código todo:
pelo meu ver se ta usando a interface Provider pra ta chamando o metodo invoke, ou estou errado ?
R
ricardocomp
Olá kdoigor,
eu consigo sim abrir o arquivo WSDL no meu browser, porém não sei direito o que é pra que serve esse PORT
eu criei o meu arquivo wsdl (gerado automaticamente) e o meu serviço tudo pelo netbeans.
Mas eu não sei o que está acontecendo, será que você ou alguém poderia me dar uma ajuda?
[]'s.
R
ricardocomp
O meu código está identico ao do tutorial que eu estou seguindo kdoigor
importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.axis.encoding.XMLType;importjavax.xml.rpc.ParameterMode;publicclassClienteAxis{publicstaticvoidmain(String[]args)throwsException{Stringendpoint="http://garapa.intermidia.icmc.usp.br:8080/axis2/services/Calc";Integerop1=newInteger(100);Integerop2=newInteger(200);Serviceservice=newService();Callcall=(Call)service.createCall();// Establecemos la dirección en la que está activado el WebServicecall.setTargetEndpointAddress(newjava.net.URL(endpoint));// Establecemos el nombre del método a invocarcall.setOperationName("soma");// Establecemos los parámetros que necesita el método// Observe que se deben especidicar correctamente tanto el nómbre como el tipo de datos..// esta información se puede obtener viendo el WSDL del servicio Webcall.addParameter("in0",XMLType.XSD_INT,ParameterMode.IN);call.addParameter("in1",XMLType.XSD_INT,ParameterMode.IN);// Especificamos el tipo de datos que devuelve el método.call.setReturnType(XMLType.XSD_INT);// Invocamos el métodoIntegerresult=(Integer)call.invoke(newObject[]{op1,op2});// Imprimimos los resultadosSystem.out.println("El resultado de la multiplicación es: "+result);}}
Será que teria como vc kdoigor ou alguém me dar uma ajuda?
[]'s.
R
ricardocomp
Olá kdoigor,
que interface é essa interface Provider???
Acho que talvez deve ser esse o meu problema.
[]'s.
R
roger_rf
Não recomendo o uso do gerador de classes para consumo de WebServices do NetBeans, já tive vários problemas com ele. A forma com que trabalho atualmente é gerar os WebServices através de um arquivo BAT no prompt de comando. Segue o arquivo BAT:
Olá roger_rf, o problema do bat é q eu uso o linux ubuntu 11.04.
Muito Obrigado pela ajuda roger_rf.
R
ricardocomp
Olá pessoal será que alguém poderia me dar uma ajuda?
Não estou conseguindo resolver esse problema sozinho .
K
kdoigor
na verdade se tem q chamar sua classe webService e não a service generic .
se deveria ter algo como :
String targetNS = "<sua url do serviço - namespace>";
QName serviceName = new QName(targetNS, "<nome do serviço que ta no wsdl>");
QName portName = new QName(targetNS, "<nome do port que ta no wsdl>");
URL endpointAddress = new URL(<url do weu wsdl>);
Service service = Service.create(this.serviceName);
service.addPort(this.portName, SOAPBinding.SOAP11HTTP_BINDING,endpointAddress.toExternalForm());
Dispatch<Source> dispatch = service.createDispatch(this.portName, Source.class, Mode.PAYLOAD);
Source resposta = dispatch.invoke(<aqui vai seus parametros>);
K
kdoigor
cara, gerar pelo netbeans funfa sim, o lance é que no axis vc tem mais chances de erros que usar a implementação de referencia.
faz com o metro que vai ser bem mais facil.
B
balrog
eu nao recomendo usar axis, mas cada um cada dois …
se vc ler sua stack trace, vera que ele esta reclamando do namespace, creio que onde vc tem
// Establecemos el nombre del método a invocar
call.setOperationName("soma");
Não entendo tanto de Linux, mas acho que não deve ser muito complicado converter este arquivo BAT para uma sintaxe válida no Ubuntu. Façamos as seguintes suposições:
O arquivo executável do Java está em /usr/bin/java, e pode ser disparado através do comando “java” no Bash;
Sua distribuição do Axis 2 está na pasta /home/ricardo/axis2-1.5.3;
Você criou uma pasta chamada /home/ricardo/arquivos_wsdl, onde gravou as cópias dos arquivos WSDL cujos WebServices quer consumir.
Na pasta /home/ricardo/arquivos_wsdl, use o comando a seguir:
“br.com.nome_da_sua_empresa” é o nome do package sob o qual o código para consumo dos WebServices será gerado, e “Nome_do_WebService.wsdl” é o nome do arquivo WSDL com a definição dos WebServices. Se você tiver vários arquivos WSDL, será necessário executar o comando para cada um deles separadamente. Ao fim do processo, a pasta /home/ricardo/arquivos_wsdl/src conterá código Java que você poderá usar para consumir os WebServices.
A propósito, evite incluir comentários repetitivos no seu post. Isso não vai fazer com que mais pessoas se interessem em tentar resolver o seu problema; na verdade, o efeito vai ser exatamente o contrário.
M
maior_abandonado
em casa eu monto um exemplo e te passo… não faço isso agora por que agora não da.
faz um certo tempo que não trabalho com axis 2 mas lembro que o código ficava diferente… basicamente eu tinha um stub (que o eclipse gerava para mim usando o axis 2, acredito que o netbeans faça o mesmo), instanciava a classe principal do stub passando o endereço do wsdl no construtor, chamava os setters no stub e depois o método do serviço, recebendo um outro objeto como retorno…
se der em casa eu vejo isso ou amanhã no mais tardar…
R
ricardocomp
Olá pessoal MUITO OBRIGADO a todos: kdoigor, roger_rf e maior_abandonado pela ajuda
deu certo eu fiz exatamente o que o balrog falou e deu certo