Skip to content

Commit b0b5a3a

Browse files
jungmVerdent
authored andcommitted
Specify default mapping for java.util.UUID
1 parent ee43b92 commit b0b5a3a

File tree

4 files changed

+77
-4
lines changed

4 files changed

+77
-4
lines changed

spec/src/main/asciidoc/jsonb.adoc

+5
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ Implementations MUST support binding of the following standard Java SE classes:
177177
* java.util.OptionalInt
178178
* java.util.OptionalLong
179179
* java.util.OptionalDouble
180+
* java.util.UUID
180181

181182
==== java.math.BigInteger, BigDecimal
182183

@@ -198,6 +199,10 @@ Instances of type `java.util.Optional<T>` are serialized to a JSON value as JSON
198199

199200
Deserialization of a JSON value into `java.util.Optional<T>` MUST be supported if deserialization of a JSON value into instance of T is supported.
200201

202+
==== java.util.UUID
203+
204+
Serialization of type `java.util.UUID` to a JSON String MUST follow the conversion process defined in the javadoc specification for the `toString()` method. Deserialization of a JSON value into a `java.util.UUID` instance MUST follow the conversion process defined in the javadoc specification for the static `fromString(String)` method.
205+
201206
=== Dates
202207

203208
Implementations MUST support binding of the following standard Java date/time classes:

tck-docs/assertions/JSONBSpecAssertions.html

+14-3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ <h2> Jakarta JSON Binding - 3.0<br>
3333
<tr>
3434
<TD align="center" valign="center"><font size="2PT">
3535
# of Assertions
36-
</font></TD><TD align="center" valign="center"><font size="2PT">169</font></TD><TD align="center" valign="center"><font size="2PT">168</font></TD><TD align="center" valign="center"><font size="2PT">0</font></TD><TD align="center" valign="center"><font size="2PT">1</font></TD>
36+
</font></TD><TD align="center" valign="center"><font size="2PT">171</font></TD><TD align="center" valign="center"><font size="2PT">170</font></TD><TD align="center" valign="center"><font size="2PT">0</font></TD><TD align="center" valign="center"><font size="2PT">1</font></TD>
3737
</tr>
3838
<tr>
3939
<TD align="center" valign="center"><font size="2PT">
4040
# of Required Assertions
41-
</font></TD><TD align="center" valign="center"><font size="2PT">162</font></TD><TD align="center" valign="center"><font size="2PT">161</font></TD><TD align="center" valign="center"><font size="2PT">0</font></TD><TD align="center" valign="center"><font size="2PT">1</font></TD>
41+
</font></TD><TD align="center" valign="center"><font size="2PT">164</font></TD><TD align="center" valign="center"><font size="2PT">163</font></TD><TD align="center" valign="center"><font size="2PT">0</font></TD><TD align="center" valign="center"><font size="2PT">1</font></TD>
4242
</tr>
4343
<tr>
4444
<TD align="center" valign="center"><font size="2PT">
@@ -147,7 +147,8 @@ <h2> Jakarta JSON Binding - 3.0<br>
147147
java.util.Optional
148148
java.util.OptionalInt
149149
java.util.OptionalLong
150-
java.util.OptionalDouble </font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD><TD align="center" valign="center"><font size="1PT"><a></a>
150+
java.util.OptionalDouble
151+
java.util.UUID </font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD><TD align="center" valign="center"><font size="1PT"><a></a>
151152
<br>
152153
</font></TD><TD align="center" valign="center"><font size="1PT">false</font></TD><TD align="center" valign="center"><font size="1PT">technology</font></TD><TD align="center" valign="center"><font size="1PT">active</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD>
153154
</TR>
@@ -207,6 +208,16 @@ <h2> Jakarta JSON Binding - 3.0<br>
207208
</font></TD><TD align="center" valign="center"><font size="1PT">false</font></TD><TD align="center" valign="center"><font size="1PT">technology</font></TD><TD align="center" valign="center"><font size="1PT">active</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD>
208209
</TR>
209210
<TR>
211+
<TD align="center" valign="center"><a name="JSONB:SPEC:JSB-3.4.4-1"></a><font size="1PT">JSONB:SPEC:JSB-3.4.4-1</font></TD><TD align="center" valign="center"><font size="1PT">3</font></TD><TD align="center" valign="center"><font size="1PT">3.4.4</font></TD><TD align="left" valign="center"><font size="1PT">Serialization of type java.util.UUID, UUID to a JSON String value MUST follow the conversion process defined in specification for their toString method</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD><TD align="center" valign="center"><font size="1PT"><a></a>
212+
<br>
213+
</font></TD><TD align="center" valign="center"><font size="1PT">false</font></TD><TD align="center" valign="center"><font size="1PT">technology</font></TD><TD align="center" valign="center"><font size="1PT">active</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD>
214+
</TR>
215+
<TR>
216+
<TD align="center" valign="center"><a name="JSONB:SPEC:JSB-3.4.4-2"></a><font size="1PT">JSONB:SPEC:JSB-3.4.4-2</font></TD><TD align="center" valign="center"><font size="1PT">3</font></TD><TD align="center" valign="center"><font size="1PT">3.4.4</font></TD><TD align="left" valign="center"><font size="1PT">Deserialization of a JSON value into java.util.UUID, UUID instance MUST follow the conversion process as defined in the specification for the static method java.util.UUID#fromString with java.lang.String input.</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD><TD align="center" valign="center"><font size="1PT"><a></a>
217+
<br>
218+
</font></TD><TD align="center" valign="center"><font size="1PT">false</font></TD><TD align="center" valign="center"><font size="1PT">technology</font></TD><TD align="center" valign="center"><font size="1PT">active</font></TD><TD align="center" valign="center"><font size="1PT">true</font></TD>
219+
</TR>
220+
<TR>
210221
<TD align="center" valign="center"><a name="JSONB:SPEC:JSB-3.5-1"></a><font size="1PT">JSONB:SPEC:JSB-3.5-1</font></TD><TD align="center" valign="center"><font size="1PT">3</font></TD><TD align="center" valign="center"><font size="1PT">3.5</font></TD><TD align="left" valign="center"><font size="1PT">Implementations MUST support binding of the following standard Java date/time classes: java.util.Date
211222
java.util.Calendar
212223
java.util.GregorianCalendar

tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/specifictypes/SpecificTypesMappingTest.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,6 +29,7 @@
2929
import java.util.OptionalDouble;
3030
import java.util.OptionalInt;
3131
import java.util.OptionalLong;
32+
import java.util.UUID;
3233

3334
import ee.jakarta.tck.json.bind.MappingTester;
3435
import ee.jakarta.tck.json.bind.SimpleMappingTester;
@@ -44,6 +45,7 @@
4445
import ee.jakarta.tck.json.bind.defaultmapping.specifictypes.model.SimpleContainer;
4546
import ee.jakarta.tck.json.bind.defaultmapping.specifictypes.model.URIContainer;
4647
import ee.jakarta.tck.json.bind.defaultmapping.specifictypes.model.URLContainer;
48+
import ee.jakarta.tck.json.bind.defaultmapping.specifictypes.model.UUIDContainer;
4749
import org.junit.jupiter.api.Test;
4850

4951
/**
@@ -297,4 +299,20 @@ public void testEmptyOptionalDoubleMapping() {
297299
"{ \"instance\" : null }",
298300
optionalContainer);
299301
}
302+
303+
/*
304+
* @testName: testUUIDMapping
305+
*
306+
* @assertion_ids: JSONB:SPEC:JSB-3.4-1; JSONB:SPEC:JSB-3.4.4-1;
307+
* JSONB:SPEC:JSB-3.4.4-2
308+
*
309+
* @test_Strategy: Assert that marshalling and unmarshalling of java.util.UUID
310+
* type are performed according to the toString method and applicable UUID#fromString(String) methods
311+
*/
312+
@Test
313+
public void testUUIDMapping() {
314+
new MappingTester<>(UUIDContainer.class).test(
315+
UUID.fromString("e3a3a246-7314-4964-a4dc-807550d83e14"),
316+
"\"e3a3a246-7314-4964-a4dc-807550d83e14\"");
317+
}
300318
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0, which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* This Source Code may also be made available under the following Secondary
9+
* Licenses when the conditions for such availability set forth in the
10+
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
11+
* version 2 with the GNU Classpath Exception, which is available at
12+
* https://www.gnu.org/software/classpath/license.html.
13+
*
14+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15+
*/
16+
17+
/*
18+
* $Id$
19+
*/
20+
21+
package ee.jakarta.tck.json.bind.defaultmapping.specifictypes.model;
22+
23+
import ee.jakarta.tck.json.bind.TypeContainer;
24+
25+
import java.util.UUID;
26+
27+
public class UUIDContainer implements TypeContainer<UUID> {
28+
private UUID instance;
29+
30+
@Override
31+
public UUID getInstance() {
32+
return instance;
33+
}
34+
35+
@Override
36+
public void setInstance(UUID instance) {
37+
this.instance = instance;
38+
}
39+
}

0 commit comments

Comments
 (0)