/** * Finds the association property value by looking up the association property name in the event message's * {@link org.axonframework.messaging.MetaData}. */ @Override public <T> Object resolve(String associationPropertyName, EventMessage<?> message, MessageHandlingMember<T> handler) { return message.getMetaData().get(associationPropertyName); } }
@Override public ResultValidator<T> expectEvents(EventMessage... expectedEvents) { this.expectEvents(Stream.of(expectedEvents).map(Message::getPayload).toArray()); Iterator<EventMessage<?>> iterator = publishedEvents.iterator(); for (EventMessage expectedEvent : expectedEvents) { EventMessage actualEvent = iterator.next(); if (!verifyMetaDataEquality(expectedEvent.getPayloadType(), expectedEvent.getMetaData(), actualEvent.getMetaData())) { reporter.reportWrongEvent(publishedEvents, Arrays.asList(expectedEvents), actualException); } } return this; }
@Override public <T> Message<T> convertToOutboundMessage(EventMessage<T> event) { Map<String, Object> headers = new HashMap<>(); event.getMetaData().forEach(headers::put); headers.put(MESSAGE_ID, event.getIdentifier()); if (event instanceof DomainEventMessage) { headers.put(AGGREGATE_ID, ((DomainEventMessage) event).getAggregateIdentifier()); headers.put(AGGREGATE_SEQ, ((DomainEventMessage) event).getSequenceNumber()); headers.put(AGGREGATE_TYPE, ((DomainEventMessage) event).getType()); } return new GenericMessage<>(event.getPayload(), new SettableTimestampMessageHeaders(headers, event.getTimestamp().toEpochMilli())); }
@Override public JobDataMap toJobData(Object event) { JobDataMap jobData = new JobDataMap(); EventMessage eventMessage = (EventMessage) event; jobData.put(MESSAGE_ID, eventMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, eventMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedPayload = serializer.serialize(eventMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedPayload.getData()); jobData.put(MESSAGE_TYPE, serializedPayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedPayload.getType().getRevision()); SerializedObject<byte[]> serializedMetaData = serializer.serialize(eventMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedMetaData.getData()); return jobData; }
/** * Creates a new message for the scheduled event. This ensures that a new identifier and timestamp will always * be generated, so that the timestamp will reflect the actual moment the trigger occurred. * * @param event The actual event (either a payload or an entire message) to create the message from * @return the message to publish */ private EventMessage<?> createMessage(Object event) { EventMessage<?> eventMessage; if (event instanceof EventMessage) { eventMessage = new GenericEventMessage<>(((EventMessage) event).getPayload(), ((EventMessage) event).getMetaData()); } else { eventMessage = new GenericEventMessage<>(event, MetaData.emptyInstance()); } return eventMessage; } }
/** * Creates a new message for the scheduled event. This ensures that a new identifier and timestamp will always * be generated, so that the timestamp will reflect the actual moment the trigger occurred. * * @return the message to publish */ private EventMessage<?> createMessage() { EventMessage<?> eventMessage; if (event instanceof EventMessage) { eventMessage = new GenericEventMessage<>(((EventMessage) event).getPayload(), ((EventMessage) event).getMetaData()); } else { eventMessage = new GenericEventMessage<>(event, MetaData.emptyInstance()); } return eventMessage; } }
private EventMessage<Object> timeCorrectedEventMessage(Object event) { EventMessage<?> msg = GenericEventMessage.asEventMessage(event); return new GenericEventMessage<>(msg.getIdentifier(), msg.getPayload(), msg.getMetaData(), currentTime()); }
@Test public void testStoreAndLoadApplicationEvent() { testSubject.appendEvents(new GenericEventMessage<>("application event", MetaData.with("key", "value"))); assertEquals(1, testSubject.readEvents(null, false).count()); EventMessage<?> message = testSubject.readEvents(null, false).findFirst().get(); assertEquals("application event", message.getPayload()); assertEquals(MetaData.with("key", "value"), message.getMetaData()); }
public Event map(EventMessage<?> eventMessage, Serializer serializer) { Event.Builder builder = Event.newBuilder(); if (eventMessage instanceof GenericDomainEventMessage) { builder.setAggregateIdentifier(((GenericDomainEventMessage) eventMessage).getAggregateIdentifier()) .setAggregateSequenceNumber(((GenericDomainEventMessage) eventMessage).getSequenceNumber()) .setAggregateType(((GenericDomainEventMessage) eventMessage).getType()); } SerializedObject<byte[]> serializedPayload = eventMessage.serializePayload(serializer, byte[].class); builder.setMessageIdentifier(eventMessage.getIdentifier()).setPayload( io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault( serializedPayload.getType().getRevision(), "" )) .setData(ByteString.copyFrom(serializedPayload.getData())) ).setTimestamp(eventMessage.getTimestamp().toEpochMilli()); eventMessage.getMetaData().forEach((k, v) -> builder.putMetaData(k, converter.convertToMetaDataValue(v))); return builder.build(); }
/** * Finds the association property value by looking up the association property name in the event message's * {@link org.axonframework.messaging.MetaData}. */ @Override public <T> Object resolve(String associationPropertyName, EventMessage<?> message, MessageHandlingMember<T> handler) { return message.getMetaData().get(associationPropertyName); } }
/** * Finds the association property value by looking up the association property name in the event message's * {@link org.axonframework.messaging.MetaData}. */ @Override public <T> Object resolve(String associationPropertyName, EventMessage<?> message, MessageHandlingMember<T> handler) { return message.getMetaData().get(associationPropertyName); } }
private static void addAxonHeaders(Headers target, EventMessage<?> eventMessage, SerializedObject<byte[]> serializedObject, BiFunction<String, Object, RecordHeader> headerValueMapper) { eventMessage.getMetaData() .forEach((k, v) -> target.add(headerValueMapper.apply(generateMetadataKey(k), v))); defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> addHeader(target, k, v)); }
private static void addAxonHeaders(Headers target, EventMessage<?> eventMessage, SerializedObject<byte[]> serializedObject, BiFunction<String, Object, RecordHeader> headerValueMapper) { eventMessage.getMetaData() .forEach((k, v) -> target.add(headerValueMapper.apply(generateMetadataKey(k), v))); defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> addHeader(target, k, v)); }
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()); }
@Override public JobDataMap toJobData(Object event) { JobDataMap jobData = new JobDataMap(); EventMessage eventMessage = (EventMessage) event; jobData.put(MESSAGE_ID, eventMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, eventMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedPayload = serializer.serialize(eventMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedPayload.getData()); jobData.put(MESSAGE_TYPE, serializedPayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedPayload.getType().getRevision()); SerializedObject<byte[]> serializedMetaData = serializer.serialize(eventMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedMetaData.getData()); return jobData; }
@Override public JobDataMap toJobData(Object event) { JobDataMap jobData = new JobDataMap(); EventMessage eventMessage = (EventMessage) event; jobData.put(MESSAGE_ID, eventMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, eventMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedPayload = serializer.serialize(eventMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedPayload.getData()); jobData.put(MESSAGE_TYPE, serializedPayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedPayload.getType().getRevision()); SerializedObject<byte[]> serializedMetaData = serializer.serialize(eventMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedMetaData.getData()); return jobData; }
@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()); }
/** * Creates a new message for the scheduled event. This ensures that a new identifier and timestamp will always * be generated, so that the timestamp will reflect the actual moment the trigger occurred. * * @return the message to publish */ private EventMessage<?> createMessage() { EventMessage<?> eventMessage; if (event instanceof EventMessage) { eventMessage = new GenericEventMessage<>(((EventMessage) event).getPayload(), ((EventMessage) event).getMetaData()); } else { eventMessage = new GenericEventMessage<>(event, MetaData.emptyInstance()); } return eventMessage; } }
/** * Creates a new message for the scheduled event. This ensures that a new identifier and timestamp will always * be generated, so that the timestamp will reflect the actual moment the trigger occurred. * * @return the message to publish */ private EventMessage<?> createMessage() { EventMessage<?> eventMessage; if (event instanceof EventMessage) { eventMessage = new GenericEventMessage<>(((EventMessage) event).getPayload(), ((EventMessage) event).getMetaData()); } else { eventMessage = new GenericEventMessage<>(event, MetaData.emptyInstance()); } return eventMessage; } }
/** * Creates a new message for the scheduled event. This ensures that a new identifier and timestamp will always * be generated, so that the timestamp will reflect the actual moment the trigger occurred. * * @param event The actual event (either a payload or an entire message) to create the message from * @return the message to publish */ private EventMessage<?> createMessage(Object event) { EventMessage<?> eventMessage; if (event instanceof EventMessage) { eventMessage = new GenericEventMessage<>(((EventMessage) event).getPayload(), ((EventMessage) event).getMetaData()); } else { eventMessage = new GenericEventMessage<>(event, MetaData.emptyInstance()); } return eventMessage; } }