Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

The constructor AlunoCodec(Codec<Document>) is undefined

Meu aluno repository não esta compilando, e exibindo a seguinte informação

The constructor AlunoCodec(Codec) is undefined minha classe aluno codec esta conforme abaixo , o que tem de errado?

package br.com.dlsistemas.servicesgeo.codecs;

import java.util.Date;

import org.bson.BsonReader;
import org.bson.BsonString;
import org.bson.BsonValue;
import org.bson.BsonWriter;
import org.bson.Document;
import org.bson.codecs.Codec;
import org.bson.codecs.CollectibleCodec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;
import org.bson.types.ObjectId;

import br.com.dlsistemas.servicesgeo.models.Aluno;
import br.com.dlsistemas.servicesgeo.models.Curso;

public class AlunoCodec implements CollectibleCodec<Aluno> {

    private Codec<Document> codec;

    public AlunoCodec(Codec<Document> codec) {
        this.codec = codec;
    }


    @Override
    public void encode(BsonWriter writer, Aluno aluno, EncoderContext encoder) {
        ObjectId id = aluno.getId();
        String nome = aluno.getNome();
        Date dataNascimento = aluno.getDataNascimento();
        Curso curso = aluno.getCurso();

        Document document = new Document();

        document.put("_id", id);
        document.put("nome", nome);
        document.put("data_nascimento", dataNascimento);
        document.put("curso", new Document("nome", curso.getNome()));

        codec.encode(writer, document, encoder);

    }

    @Override
    public Class<Aluno> getEncoderClass() {
        return Aluno.class;
    }

    @Override
    public Aluno decode(BsonReader reader, DecoderContext decoderContext) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Aluno generateIdIfAbsentFromDocument(Aluno aluno) {
        return documentHasId(aluno) ? aluno.criarId() : aluno;
    }

    @Override
    public boolean documentHasId(Aluno aluno) {
        return aluno.getId() == null;
    }

    @Override
    public BsonValue getDocumentId(Aluno aluno) {
        if (!documentHasId(aluno)) {
            throw new IllegalStateException("Esse Document não tem id");
        }
        return new BsonString(aluno.getId().toHexString());
    }

}
6 respostas

Tá vendo aqui

 public AlunoCodec(Codec<Document> codec) {
        this.codec = codec;
    }

Como você pode atribuir a propriedade como ela mesmo? Por isso dá undefined.

Imaginei q pudesse ser isso tbm, dai copiei o código do primeiro exercício os capitulo dois e colei conforme o professor disponibilizou, é este código ai, no exemplo dele na aula não da erro. Da uma conferida la na aula la para você ver.

Sugiro pegar o código do fim do curso e comparar com o seu pra ver onde está errando.

Eu já diz isso esse trecho esta idêntico.

Aqui

    private Codec<Document> codec;

troca

    public Codec<Document> codec;

E veja se roda.

solução!

Resolvi aqui, O problema era que a classe AlunoRepository estava importando

import javax.swing.text.Document;

No lugar de

import org.bson.Document;