/** * Serialize the payload of given {@code message} to the given {@code expectedRepresentation}. * * @param message The message containing the payload to serialize * @param expectedRepresentation The representation of the serialized data * @param <T> The representation of the serialized data * @return A serialized object containing the serialized representation of the message's payload */ public <T> SerializedObject<T> serializePayload(Message<?> message, Class<T> expectedRepresentation) { return serializePayload(message, serializer, expectedRepresentation); }
@SuppressWarnings("unchecked") @Override public <T> SerializedObject<T> serializePayload(Serializer serializer, Class<T> expectedRepresentation) { synchronized (payloadGuard) { SerializedObject existingForm = serializedPayload.get(serializer); if (existingForm == null) { SerializedObject<T> serialized = MessageSerializer.serializePayload(message, serializer, expectedRepresentation); serializedPayload.put(serializer, serialized); return serialized; } else { return serializer.getConverter().convert(existingForm, expectedRepresentation); } } }
@Override public ProducerRecord<String, byte[]> createKafkaMessage(EventMessage<?> eventMessage, String topic) { SerializedObject<byte[]> serializedObject = serializePayload(eventMessage, serializer, byte[].class); byte[] payload = serializedObject.getData(); return new ProducerRecord<>(topic, null, null, key(eventMessage), payload, toHeaders(eventMessage, serializedObject, headerValueMapper)); }
public static ProducerRecord<String, byte[]> toRecord(final EventMessage<?> message, final Serializer serializer, final String eventStorage) { final SerializedObject<byte[]> serializedObject = serializePayload(message, serializer, byte[].class); final Map<String, Object> headers = new HashMap<>(); message.getMetaData().forEach((k, v) -> headers.put("axon-metadata-" + k, v)); headers.put("axon-message-id", message.getIdentifier()); headers.put("axon-message-type", serializedObject.getType().getName()); headers.put("axon-message-revision", serializedObject.getType().getRevision()); headers.put("axon-message-timestamp", message.getTimestamp().toString()); if (message instanceof DomainEventMessage<?>) { headers.put("axon-message-aggregate-id", ((DomainEventMessage<?>) message).getAggregateIdentifier()); headers.put("axon-message-aggregate-seq", ((DomainEventMessage<?>) message).getSequenceNumber()); headers.put("axon-message-aggregate-type", ((DomainEventMessage<?>) message).getType()); } final KafkaPayload payload = new KafkaPayload(headers, serializedObject.getData()); final SerializedObject<byte[]> serializedKafkaPayload = serializer.serialize(payload, byte[].class); return new ProducerRecord<>(eventStorage, serializedKafkaPayload.getData()); }
@SuppressWarnings("rawtypes") public static KafkaMessage createKafkaMessage(final Serializer serializer, final EventMessage<?> eventMessage) { final SerializedObject<byte[]> serializedObject = serializePayload(eventMessage, serializer, byte[].class); final Map<String, Object> headers = new HashMap<>(); eventMessage.getMetaData().forEach((k, v) -> headers.put("axon-metadata-" + k, v)); headers.put("axon-message-id", eventMessage.getIdentifier()); headers.put("axon-message-type", serializedObject.getType().getName()); headers.put("axon-message-revision", serializedObject.getType().getRevision()); headers.put("axon-message-timestamp", eventMessage.getTimestamp().toString()); if (eventMessage instanceof DomainEventMessage) { headers.put("axon-message-aggregate-id", ((DomainEventMessage) eventMessage).getAggregateIdentifier()); headers.put("axon-message-aggregate-seq", ((DomainEventMessage) eventMessage).getSequenceNumber()); headers.put("axon-message-aggregate-type", ((DomainEventMessage) eventMessage).getType()); } final KafkaPayload payload = new KafkaPayload(headers, serializedObject.getData()); final SerializedObject<byte[]> serializedKafkaPayload = serializer.serialize(payload, byte[].class); return new KafkaMessage(eventMessage.getTimestamp().toString(), serializedKafkaPayload.getData()); }
@Override public AMQPMessage createAMQPMessage(EventMessage<?> eventMessage) { SerializedObject<byte[]> serializedObject = serializePayload(eventMessage, serializer, byte[].class); String routingKey = routingKeyResolver.resolveRoutingKey(eventMessage); AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder(); Map<String, Object> headers = new HashMap<>(); eventMessage.getMetaData().forEach((k, v) -> headers.put(Headers.MESSAGE_METADATA + "-" + k, v)); Headers.defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> { if (k.equals(MESSAGE_TIMESTAMP)) { headers.put(k, formatInstant(eventMessage.getTimestamp())); } else { headers.put(k, v); } }); properties.headers(headers); if (durable) { properties.deliveryMode(2); } return new AMQPMessage(serializedObject.getData(), routingKey, properties.build(), false, false); }
out.writeLong(domainEventMessage.getSequenceNumber()); SerializedObject<byte[]> serializedPayload = serializer.serializePayload(eventMessage, byte[].class); SerializedObject<byte[]> serializedMetaData = serializer.serializeMetaData(eventMessage, byte[].class);
SerializedObject<?> payload = serializePayload(snapshot, serializer, dataType); SerializedObject<?> metaData = serializeMetaData(snapshot, serializer, dataType); final String sql = "INSERT INTO " + schema.snapshotTable() + " (" +
SerializedObject<?> payload = serializePayload(event, serializer, dataType); SerializedObject<?> metaData = serializeMetaData(event, serializer, dataType); preparedStatement.setString(1, event.getIdentifier());
/** * Initialized a DispatchMessage for the given {@code commandMessage}, which uses the given * {@code serializer} to deserialize its contents. * {@code expectReply} indicates whether the sender will be expecting a reply. * * @param commandMessage The message to send to the remote segment * @param serializer The serialize to serialize the message payload and metadata with * @param expectReply whether or not the sender is waiting for a reply. */ protected DispatchMessage(CommandMessage<?> commandMessage, Serializer serializer, boolean expectReply) { this.commandIdentifier = commandMessage.getIdentifier(); SerializedObject<byte[]> metaData = serializeMetaData(commandMessage, serializer, byte[].class); this.serializedMetaData = metaData.getData(); SerializedObject<byte[]> payload = serializePayload(commandMessage, serializer, byte[].class); this.payloadType = payload.getType().getName(); this.payloadRevision = payload.getType().getRevision(); this.serializedPayload = payload.getData(); this.commandName = commandMessage.getCommandName(); this.expectReply = expectReply; }
/** * Construct a new event entry from a published event message to enable storing the event or sending it to a remote * location. * <p> * The given {@code serializer} will be used to serialize the payload and metadata in the given {@code eventMessage}. * The type of the serialized data will be the same as the given {@code contentType}. * * @param eventMessage The event message to convert to a serialized event entry * @param serializer The serializer to convert the event * @param contentType The data type of the payload and metadata after serialization */ public AbstractEventEntry(EventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { SerializedObject<T> payload = serializePayload(eventMessage, serializer, contentType); SerializedObject<T> metaData = serializeMetaData(eventMessage, serializer, contentType); this.eventIdentifier = eventMessage.getIdentifier(); this.payloadType = payload.getType().getName(); this.payloadRevision = payload.getType().getRevision(); this.payload = payload.getData(); this.metaData = metaData.getData(); this.timeStamp = formatInstant(eventMessage.getTimestamp()); }
/** * Constructor used to create a new event entry to store in Mongo. * * @param event The actual DomainEvent to store * @param serializer Serializer to use for the event to store */ public EventEntry(DomainEventMessage<?> event, Serializer serializer) { aggregateIdentifier = event.getAggregateIdentifier(); aggregateType = event.getType(); sequenceNumber = event.getSequenceNumber(); eventIdentifier = event.getIdentifier(); Class<?> serializationTarget = String.class; if (serializer.canSerializeTo(DBObject.class)) { serializationTarget = DBObject.class; } SerializedObject<?> serializedPayloadObject = serializePayload(event, serializer, serializationTarget); SerializedObject<?> serializedMetaDataObject = serializeMetaData(event, serializer, serializationTarget); serializedPayload = serializedPayloadObject.getData(); payloadType = serializedPayloadObject.getType().getName(); payloadRevision = serializedPayloadObject.getType().getRevision(); serializedMetaData = serializedMetaDataObject.getData(); timestamp = formatInstant(event.getTimestamp()); }