Я использовал avro-tools для генерации java-классов из avsc файлов, используя:
java.exe -jar avro-tools-1.7.7.jar compile -string schema myfile.avsc
Затем я попытался сериализовать такие объекты в json от ObjectMapper, но всегда получал исключение JsonMappingException, говорящее "не перечисление" или "не объединение". В моем тесте я создаю сгенерированный объект, используя его конструктор или конструктор. У меня есть такие исключения для объектов разных классов...
Образец кода:
ObjectMapper serializer = new ObjectMapper(); // com.fasterxml.jackson.databind
serializer.register(new JtsModule()); // com.bedatadriven.jackson.datatype.jts
...
return serializer.writeValueAsBytes(avroConvertedObject); // => JsonMappingException
Я также пробовал много конфигураций, используя: serializer.configure(...), но все еще не удалось. Версии: Java 1.8, jackson-datatype-jts 2.3, jackson-core 2.6.5, jackson-databind 2.6.5, джексон-аннотации 2.6.5
Какие-либо предложения? Благодарю!
Если член SCHEMA
действительно имеет место (мы не видим полного сообщения об ошибке), вы можете его отключить. Я использую mixin для этого, например:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.avro.Schema;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
public class AvroGenerTests
{
abstract class IgnoreSchemaProperty
{
// You have to use the correct package for JsonIgnore,
// fasterxml or codehaus
@JsonIgnore abstract void getSchema();
}
@Test
public void writeJson() throws IOException {
BookAvro b = BookAvro.newBuilder()
.setTitle("Wilk stepowy")
.setAuthor("Herman Hesse")
.build();
ObjectMapper om = new ObjectMapper();
om.enable(SerializationFeature.INDENT_OUTPUT);
om.addMixIn(BookAvro.class, IgnoreSchemaProperty.class);
om.writeValue(new File("plik_z_gen.json"), b);
}
}