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

4 respostas
G

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:

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

... porém, quando eu crio o client no meu projeto Web, ele lança a seguinte excessão:

Caused by: java.lang.ClassCastException: com.sun.xml.rpc.client.dii.ConfiguredService cannot be cast to org.apache.axis.client.Service

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

4 Respostas

R

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

R

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

G

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

G

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:
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<String> getMeses() {
		return this.meses;
	}

	public void setMeses(List<String> meses) {
		this.meses = meses;
	}

	public List<String> getAnos() {
		return anos;
	}

	public void setAnos(List<String> anos) {
		this.anos = anos;
	}

	public void atualizarTela() throws ServiceException, MalformedURLException,
			RemoteException {
		meses = new ArrayList<String>();
		anos = new ArrayList<String>();

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

Obrigado Rogerio e um bom descanso!

[]'s

Criado 20 de fevereiro de 2012
Ultima resposta 20 de fev. de 2012
Respostas 4
Participantes 2