Amad pessoa:
Eu recebo o seguinte erro ao converter um protobuf para JSON usando ObjectMapper de Jackson:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Direct self-reference leading to cycle (through reference chain:
MyObjectPb$MyObject["unknownFields"]->
com.google.protobuf.UnknownFieldSet["defaultInstanceForType"])
MyObjectPb tem o seguinte campo:
protected com.google.protobuf.UnknownFieldSet unknownFields
Como eu estou trabalhando em uma base de código existente, eu tenho as seguintes restrições:
- Não posso modificar o código-fonte para MyObjectPb, então não posso usar de Jackson ignorar anotações em MyObjectPb.
- Nem posso usar bibliotecas de Gson para converter o objeto, como a base de código já usa Jackson para serialização. Adicionando uma nova dependência não é recomendado.
Como eu digo Jackson ignorar (de) serialização do objeto UnknownFieldSet dentro MyObjectPb?
Eu tentei o seguinte, mas essas abordagens não parecem resolver o problema:
a) Configuração da ObjectMapper:
myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
b) Utilizando um Jackson Mixin:
@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}
myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)
Amad pessoa:
Eu usei a classe JsonFormat (com.googlecode.protobuf.format.JsonFormat) para converter o protobuf:
new JsonFormat().printToString(myObject)
Este fez o trabalho perfeitamente para mim.