public byte[] getBytes() throws IOException { final KuraPayloadProto.KuraPayload.Builder protoMsg = KuraPayloadProto.KuraPayload.newBuilder(); if (this.m_kuraPayload.getTimestamp() != null) { protoMsg.setTimestamp(this.m_kuraPayload.getTimestamp().getTime()); } if (this.m_kuraPayload.getPosition() != null) { protoMsg.setPosition(this.buildPositionProtoBuf()); } for (final String name : this.m_kuraPayload.metricNames()) { final Object value = this.m_kuraPayload.getMetric(name); try { final KuraPayloadProto.KuraPayload.KuraMetric.Builder metricB = KuraPayloadProto.KuraPayload.KuraMetric.newBuilder(); metricB.setName(name); setProtoKuraMetricValue(metricB, value); metricB.build(); protoMsg.addMetric(metricB); } catch (final Exception eihte) { try { s_logger.error( "During serialization, ignoring metric named: {}. Unrecognized value type: {}.", name, value.getClass().getName()); } catch (final NullPointerException npe) { s_logger.error( "During serialization, ignoring metric named: {}. The value is null.", name); } throw new RuntimeException(eihte); } } if (this.m_kuraPayload.getBody() != null) { protoMsg.setBody(ByteString.copyFrom(this.m_kuraPayload.getBody())); } return protoMsg.build().toByteArray(); }