Problemas ao criar um pojo para web service com Enum

5 respostas
F

Pessoal tenho um pojo que é usado para retornar um resultado de um web service meu. Dentro deste pojo tenho um Enum.
Acontece que no cliente este enum não é recriado corretamente, ele não possui os atributos que eu coloquei, fica parecendo um enum “basico”

public enum Carro{
    GM(0), Volks(100);

    private Integer cod;

    Carro(Integer cod){
        this.cod = cod;
    }

    public Integer getCod() {
        return cod;
    }

    public void setCod(Integer cod) {
        this.cod = cod;
    }
}

O enum gerado no cliente fica assim:

public enum Carro{
    GM, Volks;

}

É algum tipo de limitação da tecnologia ou tem como usar um enum com atributos?

Obrigado

5 Respostas

sergiotaborda

fausto:
Pessoal tenho um pojo que é usado para retornar um resultado de um web service meu. Dentro deste pojo tenho um Enum.
Acontece que no cliente este enum não é recriado corretamente, ele não possui os atributos que eu coloquei, fica parecendo um enum “basico”

public enum Carro{
    GM(0), Volks(100);

    private Integer cod;

    Carro(Integer cod){
        this.cod = cod;
    }

    public Integer getCod() {
        return cod;
    }

    public void setCod(Integer cod) {
        this.cod = cod;
    }
}

O enum gerado no cliente fica assim:

public enum Carro{
    GM, Volks;

}

É algum tipo de limitação da tecnologia ou tem como usar um enum com atributos?

Obrigado

Não use enums em web services. não use nada que seja dependente da plataforma ou da linguagem.
Limite-se a Strings, arrays e tipos primitivos. Isso lhe dará mais capacidade cross-platform.

Se o seu sistema usa entidades com mais capacidades , crie uma camada de objetos apenas para o webservice. Mais simplificados que a entidade interna do sistema

F

Então, mas do lado java da história fica mais organizado usando enum, dá para criar uma classe com atributos fixos e tal, mas o enum seria melhor…

josemanzoli

Você pode utilizar o método getValue que é exportado normalmente para ambientes Java. Foi o que eu testei. Mas lembrando que se você for disponibilizar isso publicamente pode ser que você tenha problemas com outras linguagens como disse o sergiotaborda.

public enum IndTot {
    NAO_COMPOE_VALOR("12") {

        @Override
        public String toString() {
            return "texto exemplo 2";
        }
    },
    COMPOE_VALOR("67") {

        @Override
        public String toString() {
            return "Texto exemplo 1";
        }
    };
    private String value;

    private IndTot(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

}
quando você utilizar o wsimport ele irá ser gerado no seu aplicativo da seguinte forma:
public enum IndTot {

    NAO_COMPOE_VALOR,
    COMPOE_VALOR;

    public String value() {
        return name();
    }

    public static IndTot fromValue(String v) {
        return valueOf(v);
    }

}
F

Olá josemanzoli,

Nossa resgatou meu tópico hem :lol: Então eu resolvi da seguinte forma na época:

@XmlType
@XmlEnum(String.class)
public enum TipoPessoaEnum {

	@XmlEnumValue("PESSOA_FISICA") 		PESSOA_FISICA(1),
    @XmlEnumValue("PESSOA_JURIDICA") 	PESSOA_JURIDICA(2);
    
	TipoPessoaEnum(Integer i){
		valor=i;
	}
    private Integer valor;
    
    public Integer getValor(){
    	return valor;
    }
}

Na verdade faz muito tempo que não mexo com isso, mas na época estava tudo ok.

josemanzoli

Ehehehehehe eu vi que tava sem resposta e aberto já mandei a resposta porque esses dias passei pelo mesmo problema!

Mas tá valendo.

No final nós resolvemos praticamente da mesma forma.

então já era, está resolvido.

Criado 26 de janeiro de 2010
Ultima resposta 3 de set. de 2010
Respostas 5
Participantes 3