Serializar include list => doesn't exists in interface java.util.list

opa.
seguinte imagina a classe abaixo

public class PesquisarResultado {
	
	private List entities;
	
	private String[] camposVisiveis; 

	private String nomeAmigavelEntity; 
/*setters gettes*/
}

ai a lista acima pode ser uma lista da classe abaixo SetoresHierarquia

public class SetoresHierarquia implements BaseEntity, BaseEntityPesquisar {

	private Long id;

	private String nomeHierarquia;

	private List<SetoresHierarquia> hierarquia;

	private Setores setores;
}

entao List entities é uma lista de SetoresHierarquia
ai mando serializar por

result.use(Results.json()).withoutRoot().from( pesquisarResultado ).include( "entitites","entitites.setores" ).serialize();  

entao vou serializar o objeto pesquisarResultado, a lista dentro dele, e da lista dele que no caso é de pessoa vou incluir somente o objeto setores
porem da erro field “setores” doesn’t exists in interface java.util.list

teria alguma outra forma de fazer isso ou devo estar fazendo algo errado.

tentei tambem usar a interface que eu tenho que é para todos os @Entity é BaseEntity, assim LIst entities,
ai o erro muda field setores doesn’t exists in interface BaseEntity, mas acaba sendo a mesma coisa.

tentei recursive não deu erro, porem ele não inclui a ligacao do atributo hierarquia que é uma ligacao da propria classe

a ideia e ter uma lista que pode ser de qualquer objeto, e os Atributo que iram estar no include são dinamico.

se não vou ter que codificar pra cada tipo de classe.

Hmmm…

Essa list não pode ser específica?

Debugue o código para saber se é o recursive que não está funcionando ou se a lista de hierarquia não está vindo vazia… Pois o Hibernate pode estar fazendo o LAZY loading…

Com recursive() deveria funcionar.

e que o recursive ta dando erro com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException:
porem faz sentido eles serem circular.
essa hierarquia representa o Tree.

a minha ideia é montar uma pesquisar de consulta a tela padrão, de classe que implemente BaseEntity, codificar genericamente o que igual a todas, e tratar comente as particularidades.

eu vou mandando bala aqui, se eu não conseguir imaginar nada vou mudar a ideia da estrutura.

Você precisa dessa hierarquia?

Se não, crie uma classe que representa esse modelo sem a hierarquia e você usa essa classe para serializar…

Se eles implementam uma interface, essa classe pode ser única para essa interface…

acho que vou ter que adaptar minha ideia,
eu achei que o vraptor iria reconhecer a classe certa na hora do include e de serializar.
mas é estranho porque é o polimorfismo devia pegar a classe em execução.

mas agradeço a sua ajuda…fica em aberto topico se alguem tiver ideias ou quem sabe uma melhora para o vraptor que ja muito bom.

usei a imaginacao e a gambiarra…peguei esta classe

[code]public class PesquisarResultado {

private List entities;  
  
private String[] camposVisiveis;   

private String nomeAmigavelEntity;   

/setters gettes/
}
[/code]

e troquei List para List, apesar de vim apenas List faço o cast e funciona.
fico assim

[code]
public class PesquisarResultado {

List<SetoresHierarquia> setoresHierarquias;	

} [/code]
o cast faço aqui

	public void setEntities(List entities){
		if ((entities != null) && (entities.size() > 0)){

			if (SetoresHierarquia.class.equals( entities.get(0).getClass() )){
				this.setSetoresHierarquias(entities);
				this.entityDisponivel = "setoresHierarquias";
			}
		}
			
	}

ai funciona certinho.

o problema do e que se eu quiser listar pesquisa de cliente, vou ter que alterar essa classe PesquisarResultado, que deveria ser generica.

mas fmza… valeu pela ajuda, se tiver algo acrescentar fico agradecido.

Porque que você não transforma essa classe em interface e cria várias implementações que definem cada tipo de lista?

Assim você consegue passar um parametro e saber qual implementação deve usar…

Se a lista não tem tipos, não tem como o VRaptor saber qual é o tipo dos elementos da lista (sem percorrer a lista e fazer um monte de inferencias)

o que vc pode fazer é algo do tipo:

public class PesquisarResultado<T> {    
        
    private List<T> entities; 
}

isso dá uma chance do VRaptor descobrir o tipo… daí vc pode fazer:

new PesquisaResultado<SetoresHierarquia>(....);

se ainda assim não funcionar vc pode tentar fazer um truque, adicionando chaves ao final do new:

new PesquisaResultado<SetoresHierarquia>(....) {};

(assim ele cria uma subclasse com o tipo fixo)

testa aí e dá um toque se funcionou =)

obrigado pela atencao vou testar aqui, e dou o retorno com codigo.