diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java index 47ad97e04..af3c81931 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventMessageUtils.java @@ -205,7 +205,8 @@ public final class CloudEventMessageUtils { public static OffsetDateTime getTime(Message message) { String prefix = determinePrefixToUse(message.getHeaders()); - return (OffsetDateTime) message.getHeaders().get(prefix + _TIME); + Object time = message.getHeaders().get(prefix + _TIME); + return time instanceof String ? OffsetDateTime.parse((String) time) : null; } @SuppressWarnings("unchecked") diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/cloudevent/CloudEventFunctionTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/cloudevent/CloudEventFunctionTests.java index 0ad602b4e..161b91c04 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/cloudevent/CloudEventFunctionTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/cloudevent/CloudEventFunctionTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.function.cloudevent; import java.net.URI; import java.text.SimpleDateFormat; +import java.time.OffsetDateTime; import java.util.UUID; import java.util.function.Function; @@ -58,7 +59,7 @@ public class CloudEventFunctionTests { .withData("{\"name\":\"Ricky\"}") .setId(id) .setSource("https://spring.io/") - .setType("org.springframework") + .setType("org.springframework.cloud.function.cloudevent.CloudEventFunctionTests$Person") .build(); assertThat(CloudEventMessageUtils.isCloudEvent(inputMessage)).isTrue(); @@ -73,7 +74,7 @@ public class CloudEventFunctionTests { */ assertThat(CloudEventMessageUtils.isCloudEvent(resultMessage)).isTrue(); assertThat(CloudEventMessageUtils.getType(resultMessage)).isEqualTo(Person.class.getName()); - assertThat(CloudEventMessageUtils.getSource(resultMessage)).isEqualTo(URI.create("http://spring.io/")); + assertThat(CloudEventMessageUtils.getSource(resultMessage)).isEqualTo(URI.create("https://spring.io/")); } /* @@ -204,7 +205,8 @@ public class CloudEventFunctionTests { .withData("{\"name\":\"Ricky\"}") .setHeader("ce_id", id) .setHeader("ce_source", "https://spring.io/") - .setHeader("ce_type", "org.springframework") + .setHeader("ce_type", "org.springframework.cloud.function.cloudevent.CloudEventFunctionTests$Person") + .setHeader("ce_time", "2024-03-22T03:56:24Z") .build(); Message resultMessage = (Message) function.apply(inputMessage); @@ -216,7 +218,8 @@ public class CloudEventFunctionTests { */ assertThat(CloudEventMessageUtils.isCloudEvent(resultMessage)).isTrue(); assertThat(CloudEventMessageUtils.getType(resultMessage)).isEqualTo(Person.class.getName()); - assertThat(CloudEventMessageUtils.getSource(resultMessage)).isEqualTo(URI.create("http://spring.io/")); + assertThat(CloudEventMessageUtils.getSource(resultMessage)).isEqualTo(URI.create("https://spring.io/")); + assertThat(CloudEventMessageUtils.getTime(resultMessage)).isEqualTo(OffsetDateTime.parse("2024-03-22T03:56:24Z")); } @SuppressWarnings("unchecked") @@ -341,7 +344,7 @@ public class CloudEventFunctionTests { @Configuration public static class TestConfiguration { @Bean - Function echo() { + Function, Message> echo() { return Function.identity(); }