1
resposta

Erro ao Retornar LocalDate no lugar de Date no objeto InfoFault

Na definição do objeto InfoFault troquei o tipo do atributo dataErro de Date para LocalDate no código abaixo e quando faço isso o retorno deste atributo no XML de Response vem vazio. Qual seria o motivo?

package br.com.caelum.estoque.modelo.usuario;

import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD) public class InfoFault {

private Date dataErro; private String mensagem;

public InfoFault(Date dataErro, String mensagem) {

System.out.println(dataErro);

this.dataErro = dataErro; this.mensagem = mensagem; }

public InfoFault() { } }

1 resposta

Oi Fabio,

Se não me engano o JAX-WS não suporta as novas classes de data do Java 8.

Você precisará criar um Adapter então. Algo como:

@XmlTransient
public class LocalDateAdapter extends XmlAdapter<Date, LocalDate> {

    @Override
    public LocalDate unmarshal(Date date) throws Exception {
        return LocalDate.from(date.toInstant().atZone(ZoneId.systemDefault()));
    }

    @Override
    public Date marshal(LocalDate localDate) throws Exception {
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
}
@XmlJavaTypeAdapter(LocalDateAdapter.class)
private LocalDate dataErro;