Merge pull request #754 from KyleAure/spec-record-virtual-attributes
feat: add support for virtual attributes on records
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index e39f36e..c627cdf 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -43,7 +43,7 @@
with:
fetch-depth: 0
- name: Set up compile JDK
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
+ uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
with: #Compile java needs to be the highest to ensure proper compilation of the multi-release jar
distribution: 'temurin'
java-version: 17
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml
index 7977c1f..ec7b4fe 100644
--- a/.github/workflows/performance.yml
+++ b/.github/workflows/performance.yml
@@ -33,7 +33,7 @@
with:
fetch-depth: 0
- name: Set up compile JDK
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
+ uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
with: #Compile java needs to be the highest to ensure proper compilation of the multi-release jar
distribution: 'temurin'
java-version: 17
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index fb7b194..829508c 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -33,7 +33,7 @@
with:
fetch-depth: 0
- name: Set up compile JDK
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
+ uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
with: #Compile java needs to be the highest to ensure proper compilation of the multi-release jar
distribution: 'temurin'
java-version: 17
diff --git a/pom.xml b/pom.xml
index 752bbf0..e07d71e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,11 +62,11 @@
<!--Plugins-->
<build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
<buildnumber-maven-plugin.version>3.3.0</buildnumber-maven-plugin.version>
- <spotbugs-maven-plugin.version>4.10.3.0</spotbugs-maven-plugin.version>
+ <spotbugs-maven-plugin.version>4.10.4.0</spotbugs-maven-plugin.version>
<glassfish-copyright-maven-plugin.version>2.4</glassfish-copyright-maven-plugin.version>
<maven-bundle-plugin.version>5.1.9</maven-bundle-plugin.version>
<maven-checkstyle-plugin.version>3.3.1</maven-checkstyle-plugin.version>
- <maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
+ <maven-compiler-plugin.version>3.16.0</maven-compiler-plugin.version>
<maven-enforcer-plugin.version>3.4.1</maven-enforcer-plugin.version>
<maven-jar-plugin.version>3.4.1</maven-jar-plugin.version>
<maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/types/SqlDateSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/types/SqlDateSerializer.java
index aad680f..684511d 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/types/SqlDateSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/types/SqlDateSerializer.java
@@ -28,7 +28,7 @@
@Override
protected Instant toInstant(Date value) {
- if (value instanceof java.sql.Date) {
+ if (value instanceof java.sql.Date || value instanceof java.sql.Time) {
// java.sql.Date doesn't have a time component, so do our best if TIME_IN_MILLIS is requested
// In the future (at a breaking change boundary) we should probably reject this code path
return Instant.ofEpochMilli(value.getTime());
diff --git a/src/main/resources/yasson-messages.properties b/src/main/resources/yasson-messages.properties
index a059313..244df20 100644
--- a/src/main/resources/yasson-messages.properties
+++ b/src/main/resources/yasson-messages.properties
@@ -82,7 +82,7 @@
nonParametrizedType=Type: {0} is not a parametrized type.
propertyNameClash=Property {0} clashes with property {1} by read or write name in class {2}.
sqlDateIJsonError=java.sql.Date is not supported in STRICT_IJSON mode.
-recursiveReference=Recursive reference has been found in class {0}.
+recursiveReference=Recursive reference has been found in {0}.
datatypeFactoryCreationFailed=An error occurred while DatatypeFactory creation.
multipleConstructorPropertiesCreators=More than one constructor annotated with @ConstructorProperties declared in class {0}.
annotationNotAvailable=Annotation {0} is not visible in modules or classpath. Annotation will be ignored.
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/specific/RecursiveReferenceTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/specific/RecursiveReferenceTest.java
index b70ae39..67872ab 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/specific/RecursiveReferenceTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/specific/RecursiveReferenceTest.java
@@ -52,7 +52,7 @@
"Unable to serialize property 'linksTo' from org.eclipse.yasson.adapters.model.Chain",
e.getMessage());
assertEquals(
- "Recursive reference has been found in class class org.eclipse.yasson.adapters.model.Chain.",
+ "Recursive reference has been found in class org.eclipse.yasson.adapters.model.Chain.",
e.getCause().getMessage());
}
}
@@ -79,7 +79,7 @@
userSerializerJsonb.toJson(recursive);
fail("Exception should be caught");
} catch (JsonbException e) {
- assertEquals("Recursive reference has been found in class class org.eclipse.yasson.adapters.model.Chain.",
+ assertEquals("Recursive reference has been found in class org.eclipse.yasson.adapters.model.Chain.",
e.getMessage());
}
}
diff --git a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
index 21da05b..8214b88 100644
--- a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
@@ -71,6 +71,7 @@
import org.eclipse.yasson.serializers.model.RecursiveSerializer;
import org.eclipse.yasson.serializers.model.SimpleAnnotatedSerializedArrayContainer;
import org.eclipse.yasson.serializers.model.SimpleContainer;
+import org.eclipse.yasson.serializers.model.SqlTimeBean;
import org.eclipse.yasson.serializers.model.StringWrapper;
import org.eclipse.yasson.serializers.model.SupertypeSerializerPojo;
import org.junit.jupiter.api.Test;
@@ -205,6 +206,19 @@
}
@Test
+ public void testSerializerSerializationOfSqlTime() {
+ JsonbConfig config = new JsonbConfig().withSerializers(new CrateSerializer());
+ Jsonb jsonb = JsonbBuilder.create(config);
+ String expected = "{\"time\":\"1970-01-01T11:00:00Z[UTC]\"}";
+
+ SqlTimeBean value = new SqlTimeBean();
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ value.setTime(java.sql.Time.valueOf("11:00:00"));
+
+ assertEquals(expected, jsonb.toJson(value));
+ }
+
+ @Test
public void testSerializerSerializationOfTypeWithExplicitType() {
JsonbConfig config = new JsonbConfig().withSerializers(new CrateSerializer());
Jsonb jsonb = JsonbBuilder.create(config);
diff --git a/src/test/java/org/eclipse/yasson/serializers/model/SqlTimeBean.java b/src/test/java/org/eclipse/yasson/serializers/model/SqlTimeBean.java
new file mode 100644
index 0000000..4ff2ac6
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/serializers/model/SqlTimeBean.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2025 Red Hat, Inc. and/or its affiliates.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.serializers.model;
+
+import java.sql.Time;
+
+public class SqlTimeBean {
+
+ private java.sql.Time time;
+
+ public Time getTime() {
+ return time;
+ }
+
+ public void setTime(Time time) {
+ this.time = time;
+ }
+}