Avro ReflectDatumWriter中的NullPointerException

超级蜜蜂

我对Java对象的Avro序列化有一个特定的问题。我有从xsd模式生成的POJO,然后尝试使用av​​ro进行序列化以放置在kafka主题上。一些xmlElement是可选的

测试消息如下所示:

@XmlRootElement(name = "message")
public class Testmessage {

  @XmlElement
  public String id;


  @XmlElement
  public String name;

  public Testmessage(String id, String name) {
    this.id = id;
    this.name = name;
  }

  public Testmessage() { }

  @Override
  public String toString() {
    return "Message{" +
        "id='" + id + '\'' +
        ", name=" + name +
        '}';
  }
}

序列化和放置在主题上的方法是:

public void sendMessage(Testmessage msg) throws Exception{

    DatumWriter<Testmessage> writer = new ReflectDatumWriter<Testmessage>(Testmessage.class); 
    ByteArrayOutputStream os = new ByteArrayOutputStream();

    Encoder encoder = EncoderFactory.get().binaryEncoder(os, null);
    writer.write(msg, encoder);
    encoder.flush();
    os.close();
    KeyedMessage<String, byte[]> data = new KeyedMessage<String, byte[]>(TOPIC_NAME, os.toByteArray());

    producer.send(data);

}

当我同时发送两个字段时,所有工作均按预期进行。如果我将其中一个字段设为空或将其遗漏,则会从写入中获得NPE。

java.lang.NullPointerException: in Testmessage in string null of string in field id of    Testmessage
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:145)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)

有任何想法吗?或指出正确的方向

谢谢!

超级蜜蜂

看来发布后我已经设法自己解决了,几天后阅读了互联网

    ReflectData reflectData = ReflectData.AllowNull.get();
    Schema schema = reflectData.getSchema(Testmessage.class);

    DatumWriter<Testmessage> writer = new ReflectDatumWriter<Testmessage>(schema); 

似乎很高兴允许使用null。

继续我的下一个错误!这是

org.apache.avro.UnresolvedUnionException: Not in union ["null",{"type":"record","name":"XMLGregorianCalendar","namespace":"javax.xml.datatype","fields":[]}]: 2014-10-22
at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:604)
at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:151)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:71)
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:143)
at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AVRO中的数据验证

来自分类Dev

在Apache Avro中定义常量

来自分类Dev

在18.04 LTS中安装Avro

来自分类Dev

在 HDFS 中存储 Avro 文件

来自分类Dev

如何在PySpark中读取Avro文件

来自分类Dev

Avro模式中的多态和继承

来自分类Dev

Avro协议中的Flume SSL问题

来自分类Dev

在Azure HDI4.0中阅读Avro

来自分类Dev

从Databricks中的Azure Datalake读取AVRO

来自分类Dev

在Dataflow Python中从PubSub读取AVRO消息

来自分类Dev

Google Cloud Storage中的Concat Avro文件

来自分类Dev

Avro协议中的Flume SSL问题

来自分类Dev

在 Spring Cloud Dataflow 中实现 Avro

来自分类Dev

org.apache.avro.UnresolvedUnionException:不在联合中[[long],“ null”]

来自分类Dev

在Spark中过滤数据帧并另存为Avro

来自分类Dev

如何在Avro模式中定义byte []和LocalDateTime?

来自分类常见问题

为什么此数据不是python中avro模式的示例?

来自分类Dev

如何从Java中的Avro-Parquet文件读取特定字段?

来自分类Dev

当JSON中的字段数不总是相同时的Avro模式

来自分类Dev

访问AVRO GenericRecord(Java / Scala)中的嵌套字段

来自分类Dev

avro Idl中的联合的默认值是多少?

来自分类Dev

代码生成在Avro中是什么意思-hadoop

来自分类Dev

为什么此数据不是python中avro模式的示例?

来自分类Dev

Avro模式中的多态性和继承

来自分类Dev

如何在hadoop map reduce中写avro输出?

来自分类Dev

在Avro模式中为简单的json创建嵌套记录

来自分类Dev

如何在Ubuntu 20.04中安装Avro键盘

来自分类Dev

在Spark中读取Avro文件并提取列值

来自分类Dev

在Spark中过滤数据帧并另存为Avro