Web Services Axis 2 [RESOLVIDO]

Olá pessoal, bom dia a todos :smiley: .

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 :frowning:

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)

Será que alguém poderia me dar uma ajuda?

[]'s.

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.

cara, eu prefiro trabalhar com metro.

coloca a stack do servidor pra gente ver o que acontece lá.

Creio que você não inclui o stack trace na íntegra, publique o stack trace completo para analisarmos.

Ficou um pouco grande o stack trace

Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
 faultSubcode: 
 faultString: namespace mismatch require http://calc found none
 faultActor: 
 faultNode: 
 faultDetail: 
        {http://xml.apache.org/axis/}stackTrace:namespace mismatch require http://calc found none
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:604)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        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 ClienteAxis.main(ClienteAxis.java:34)

        {http://xml.apache.org/axis/}hostname:garapa

namespace mismatch require http://calc found none
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:604)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        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 ClienteAxis.main(ClienteAxis.java:34)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Será que vc roger_rf e kdoigor ou alguém poderia me dar uma ajuda?

[]'s.

Pelo menos parece que está tudo OK com o arquivo WSDL

http://garapa.intermidia.icmc.usp.br:8080/axis2/services/Calc?wsdl

Só não consigo entender pq não está funcionando :frowning: .

[]'s.

verifica isso antes:

  1. vc consegeu abrri seu wsdl via browser ?
  2. na hora de criar o seu service e o port, os nomes estão certos ?
  3. vc mandou gerar seu wsdl ou vc que fez ? se vc mandou gerar, eu no sue lugar trocaria de implementação.

http://metro.java.net/getting-started/

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.

cara, posta seu código todo:

pelo meu ver se ta usando a interface Provider pra ta chamando o metodo invoke, ou estou errado ?

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.

O meu código está identico ao do tutorial que eu estou seguindo kdoigor

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;

public class ClienteAxis {

    public static void main(String[] args) throws Exception {

        String endpoint = "http://garapa.intermidia.icmc.usp.br:8080/axis2/services/Calc";
        Integer op1 = new Integer(100);
        Integer op2 = new Integer(200);
        Service service = new Service();
        Call call = (Call) service.createCall();

        // Establecemos la dirección en la que está activado el WebService
        call.setTargetEndpointAddress(new java.net.URL(endpoint));

        // Establecemos el nombre del método a invocar
        call.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 Web
        call.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étodo
        Integer result = (Integer) call.invoke(new Object[]{op1, op2});

        // Imprimimos los resultados
        System.out.println("El resultado de la multiplicación es: " + result);
    }
}

Será que teria como vc kdoigor ou alguém me dar uma ajuda?

[]'s.

Olá kdoigor,

que interface é essa interface Provider???
Acho que talvez deve ser esse o meu problema.

[]'s.

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:

[code]@ECHO OFF
ECHO Gerando codigo Java para Webservices…
ECHO.

set JAVA_HOME=C:\Arquivos de programas\Java\jdk1.6.0_26
set AXIS2_HOME=C:\Java\Libs\axis2-1.5.3
set COMANDO_AXIS2=C:\Java\Libs\axis2-1.5.3\bin\wsdl2java.bat

set BINDING_AXIS2=adb
set PKG_DESTINO=br.com.nome_da_sua_empresa
set DIR_DESTINO_FONTES=.\src
set DIR_DESTINO_RECURSOS=.\resources
set OPCOES_AXIS2=-d %BINDING_AXIS2% -p %PKG_DESTINO% -S %DIR_DESTINO_FONTES% -R %DIR_DESTINO_RECURSOS%

ECHO Processando Nome_do_WebService.wsdl…
CALL %COMANDO_AXIS2% %OPCOES_AXIS2% -uri .\Nome_do_WebService.wsdl

ECHO.
ECHO Geracao concluida.
ECHO.
[/code]

Olá roger_rf, o problema do bat é q eu uso o linux ubuntu 11.04.

Muito Obrigado pela ajuda roger_rf.

Olá pessoal será que alguém poderia me dar uma ajuda?

Não estou conseguindo resolver esse problema sozinho :frowning: .

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>);

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.

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");

basta fazer algo do tipo

call.setOperationName(new QName("http://calc"", 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:

/home/ricardo/axis2-1.5.3/bin/wsdl2java.sh -d adb -p br.com.nome_da_sua_empresa -S ./src -R ./resources -uri ./Nome_do_WebService.wsdl

“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.

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…