Have you set a value for the Id field?
If you do not always anticipate the field having a value then maybe you
need to make it a Union field type which accepts null and String but which
default to a value of null.
hth
Lewis

On Mon, Nov 3, 2014 at 10:55 AM, Nick Beenham <[email protected]>
wrote:

> Hi all,
>
> I'm running into a problem with optional fields from an xsd that don't
> always get initialized in the java pojo.
>
> I have a specific issue with Avro serialization of Java Objects. I have
> POJO's generated from xsd schemas which I am then trying to serialize using
> avro to place on a kafka topic. Some of the xmlElements are optional
>
> A test message looks like this:
>
> @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 +
>         '}';
>   }}
>
> And the method to serialize and place on the topic is:
>
> 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);
> }
>
> When I send both fields all works as expected. If I null one of the fields
> or leave it out I get NPE's from the write.
>
> 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)
>
> Any ideas? or point me in the right direction
>
> Thanks!
>
>
> cross posted here -
> http://stackoverflow.com/questions/26720257/nullpointerexception-in-avro-reflectdatumwriter
>



-- 
*Lewis*

Reply via email to