[JAX-WS|RESOLVIDO] - java.lang.ClassCastException: com.sun.xml.rpc.client.dii.ConfiguredService

Bom dia pessoal,

Por gentileza, eu crio uma aplicação simples Java, crio um Web Services Client, crio uma classe main para testes e tudo funciona normalmente:

O link do WSDL: http://sisam.cptec.inpe.br/sisam_webservice/services/MesAnoWebService?wsdl

Classe de testes, que funciona:

[code]package control;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;

import br.inpe.cptec.sisam.sisam_webservice.services.MesAnoWebService.MesAnoWebServiceSoapBindingStub;

public class TesteWS {
public static void main(String[] args) throws ServiceException,
MalformedURLException, RemoteException {

	List<String> meses = new ArrayList<String>();
	List<String> anos = new ArrayList<String>();

	ServiceFactory serviceFactory = ServiceFactory.newInstance();

	URL helloWsdlUrl = new URL(
			"http://sisam.cptec.inpe.br/sisam_webservice/services/MesAnoWebService?wsdl");

	Service helloService = serviceFactory
			.createService(
					helloWsdlUrl,
					new QName(
							"http://sisam.cptec.inpe.br/sisam_webservice/services/MesAnoWebService",
							"MesAnoServiceService"));
	MesAnoWebServiceSoapBindingStub obj = new MesAnoWebServiceSoapBindingStub(
			helloWsdlUrl, helloService);
	meses = Arrays.asList(obj.getMeses());
	anos = Arrays.asList(obj.getAnos());

	System.out.println(anos);

	int count = 0;
	for (String mes : meses) {
		System.out.println(mes);
		count++;
	}
	System.out.println(count);
}

}
[/code]

… porém, quando eu crio o client no meu projeto Web, ele lança a seguinte excessão: [quote]Caused by: java.lang.ClassCastException: com.sun.xml.rpc.client.dii.ConfiguredService cannot be cast to org.apache.axis.client.Service[/quote]

estou utilizando Glassfish, JSF2. Alguem jah passou por esse tipo de problema que poderia dar um força? Pelo que andei pesquisando tem a ver com o proxy do servidor (não sei)…

Desde jah, muito obrigado!

[]'s

Eu não utilizei o glassfish ainda, porém já tive problemas de compatibilidade entre o axis e as bibliotecas de webservices que vinham com os servidores jboss e weblogic. Eu me lembro que eu tive que empacotar os jars doa axis junto com a aplicação web (WEB-INF/lib) e configurar o deploy para o seridor procurar primeiro nas libs da aplicação web e depois nas do servidor, ou seja, era uma configuração do classloader da aplicação que devia ser modificada para que o servidor utilizasse as classes da aplicação ao invés das que ele utiliza como padrão. Se for esse o problema tenta procurar como configurar essa opção no glassfish.
Espero que ajude.

[]'s

Eu achei no site do apache cxf a configuração que deve ser feita para modificar o classloader no glassfish:

http://cxf.apache.org/docs/application-server-specific-configuration-guide.html#ApplicationServerSpecificConfigurationGuide-Glassfish

Se o problema for o classloader do servidor, essa configuração resolverá o problema.

[]'s

Obrigado pela atenção Rogerio,

Eh rapaz, o ponto do sun-web não funcionou, to chegando ao ponto de tentar encontrar essa ConfiguredService e arrancar fora, rs…

[]'s

Sabe aquela tentativa aos 45 do segundo tempo? =D

Pois bem, conforme o WSDL, algumas classes foram criadas utilizando a classe: javax.xml.rpc.Service service, bastou substituir por: com.sun.xml.rpc.client.dii.ConfiguredService.

Algo muito trivial que, inclusive, eu jah havia pensado em fazer, não o fiz com medo de comprometer outro ponto. Conclusão, não sei quais serão as consequencias, mas por hora vai ficar assim.

Para ilustar para o pessoal que passar pelo mesmo problema, a classe de controle ficou assim:

[code]package br.com.sisgappe.view;

import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;

import org.apache.axis.AxisFault;

import com.sun.xml.rpc.client.dii.ConfiguredService;

import br.inpe.cptec.sisam.sisam_webservice.services.MesAnoWebService.MesAnoWebServiceSoapBindingStub;

@ManagedBean
@ViewScoped
public class MesesMB implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<String> meses;
private List<String> anos;

public MesesMB() throws MalformedURLException, RemoteException,
		ServiceException {
	atualizarTela();
}

public List&lt;String&gt; getMeses() {
	return this.meses;
}

public void setMeses(List&lt;String&gt; meses) {
	this.meses = meses;
}

public List&lt;String&gt; getAnos() {
	return anos;
}

public void setAnos(List&lt;String&gt; anos) {
	this.anos = anos;
}

public void atualizarTela() throws ServiceException, MalformedURLException,
		RemoteException {
	meses = new ArrayList&lt;String&gt;();
	anos = new ArrayList&lt;String&gt;();

	ServiceFactory serviceFactory = ServiceFactory.newInstance();

	URL helloWsdlUrl = new URL(
			"http://sisam.cptec.inpe.br/sisam_webservice/services/MesAnoWebService?wsdl");

	ConfiguredService helloService = (ConfiguredService) serviceFactory
			.createService(
					helloWsdlUrl,
					new QName(
							"http://sisam.cptec.inpe.br/sisam_webservice/services/MesAnoWebService",
							"MesAnoServiceService"));
	MesAnoWebServiceSoapBindingStub obj = new MesAnoWebServiceSoapBindingStub(
			helloWsdlUrl, helloService);
	meses = Arrays.asList(obj.getMeses());
	anos = Arrays.asList(obj.getAnos());

	System.out.println(anos);
	System.out.println(meses);
}

}
[/code]

Obrigado Rogerio e um bom descanso!

[]'s