[RESOLVIDO] Como criar um cliente para acessar um webservice feito com XFire

Ola pessoal,

Eu criei um webservice com xfire e está funcionando perfeitamente. Já testei com SOAP e está ok.

http://localhost:8080/WebServiceXFire/services/Calculadora?wsdl

O problema que eu quero criar um client para acessar o mesmo, através de outra aplicação java, estou fazendo da seguinte forma abaixo:

package webservicexfirecliente;

import br.com.ws.calculadora.impl.CalculadoraImpl;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class Main {

    public static void main(String[] args) {

        try {

            System.out.println("passed1");
            Service serviceModel = new ObjectServiceFactory().create(CalculadoraImpl.class);

            System.out.println("passed2");
            CalculadoraImpl service = (CalculadoraImpl) new
            XFireProxyFactory().create(serviceModel, "http://localhost:8080/WebServiceXFire/services/Calculadora");
            System.out.println(service.dividir(10, 5));

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Mas ao executar dá o seguinte erro abaixo:

passed1
passed2
java.lang.IllegalStateException: Service class is not an interface. Please use an interface specify or specify one via a @WebService annotation.
        at org.codehaus.xfire.client.XFireProxyFactory.create(XFireProxyFactory.java:109)
        at org.codehaus.xfire.client.XFireProxyFactory.create(XFireProxyFactory.java:79)
        at webservicexfirecliente.Main.main(Main.java:32)

A minha classe CalculadoraImpl está definida assim:

package br.com.ws.calculadora.impl;

import br.com.ws.calculadora.Calculadora;

public class CalculadoraImpl implements Calculadora{

        @Override
	public double dividir(double numero1, double numero2) {
		return numero1/numero2;
	}

        @Override
	public double multiplicar(double numero1, double numero2) {
		return numero1*numero2;
	}

	@Override
	public double soma(double numero1, double numero2) {
		return numero1+numero2;
	}

	@Override
	public double subtrair(double numero1, double numero2) {
		return numero1-numero2;
	}

}

Alguém tem idéia de como resolver esse problema? Ou se tem uma outra forma de criar um client do xfire, algum comando que cria sozinho o mesmo?

Obrigado

A mensagem diz tudo… Deves usar a interface e não a implementação.

Service serviceModel = new ObjectServiceFactory().create(Calculadora.class);  
Calculadora service = (Calculadora) new XFireProxyFactory().create(serviceModel, "http://localhost:8080/WebServiceXFire/services/Calculadora");  

System.out.println(service.dividir(10, 5));  

Muito obrigado.

Ficou assim o código certo:

package webservicexfirecliente;

import br.com.ws.calculadora.Calculadora;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class Main {

    public static void main(String[] args) {

        try {

            System.out.println("passed1");
            Service serviceModel = new ObjectServiceFactory().create(Calculadora.class);

            System.out.println("passed2");
            Calculadora service = (Calculadora) new
            XFireProxyFactory().create(serviceModel, "http://localhost:8080/WebServiceXFire/services/Calculadora");
            System.out.println(service.soma(5, 10));

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Uma dúvida, toda vez que eu quiser criar um client do XFire, eu tenho que implementar a interface, para poder usar o mesmo?

Obrigado.

Para o cliente precisas somente da interface. A implementação estará somente no servidor.

Entendi.

Obrigado.