diff --git a/pom.xml b/pom.xml index fa3254a2..1c485d04 100644 --- a/pom.xml +++ b/pom.xml @@ -128,6 +128,7 @@ 9.4.12.1 + 9.10 2.1.3 2.0.1 5.0.0 @@ -179,6 +180,11 @@ sigtest-maven-plugin ${sigtest.maven.version} + + org.ow2.asm + asm + ${asm.version} + diff --git a/tck-dist/pom.xml b/tck-dist/pom.xml index 4e5728ab..23045678 100644 --- a/tck-dist/pom.xml +++ b/tck-dist/pom.xml @@ -2,6 +2,7 @@ @@ -51,7 +46,6 @@ jakarta.json.bind jakarta.json.bind-api ${project.version} - jar @@ -60,12 +54,11 @@ ${project.version} pom - + jakarta.json.bind jakarta.json.bind-tck ${project.version} - jar @@ -75,10 +68,59 @@ sources true + + + org.ow2.asm + asm + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.apache.maven.plugins + maven-dependency-plugin + + + + resolve-tck-jar-path + initialize + + properties + + + + + + + + org.codehaus.mojo + exec-maven-plugin + + + generate-asciidoc + prepare-package + + java + + + + + ee.jakarta.tck.json.bind.metadata.CollectMetaData + + false + ${jakarta.json.bind:jakarta.json.bind-tck:jar} + ${project.basedir}/src/main/asciidoc/generated + + + + org.apache.maven.plugins diff --git a/tck-dist/src/main/asciidoc/generated/.gitignore b/tck-dist/src/main/asciidoc/generated/.gitignore new file mode 100644 index 00000000..fff16a14 --- /dev/null +++ b/tck-dist/src/main/asciidoc/generated/.gitignore @@ -0,0 +1,5 @@ +runtime-tests.adoc +successful-challenges.adoc +expected-sig-output.adoc +expected-output.adoc +packages.adoc diff --git a/tck-dist/src/main/asciidoc/includes/javadocAssertions.adoc b/tck-dist/src/main/asciidoc/includes/javadocAssertions.adoc deleted file mode 100644 index 7aa6b0d0..00000000 --- a/tck-dist/src/main/asciidoc/includes/javadocAssertions.adoc +++ /dev/null @@ -1,829 +0,0 @@ -.Summary -[cols="5*", options="header"] -|================================================================== -| Type | Total | Active | Deprecated | Removed -| # of Assertions | 108 | 100 | 1 | 7 -| # of Required Assertions | 108 | 100 | 1 | 7 -| # of Optional Assertions | 0 | 0 | 0 | 0 -|================================================================== - -.Detail -[%collapsible] -============== - -[cols="7*", options="header"] -|============================================================================ -| ID | Return | Method/Field | Description | Required | Deprecated | Testable - -| JSONB:JAVADOC:1 -| Object -| jakarta.json.bind.Jsonb.fromJson(String, Class) -| Reads in a JSON data from the specified string and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:2 -| Object -| jakarta.json.bind.Jsonb.fromJson(String, Class) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:3 -| Object -| jakarta.json.bind.Jsonb.fromJson(String, Type) -| Reads in a JSON data from the specified string and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:4 -| Object -| jakarta.json.bind.Jsonb.fromJson(String, Type) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:5 -| Object -| jakarta.json.bind.Jsonb.fromJson(Reader, Class) -| Reads in a JSON data from the specified Reader and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:6 -| Object -| jakarta.json.bind.Jsonb.fromJson(Reader, Class) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:7 -| Object -| jakarta.json.bind.Jsonb.fromJson(Reader, Type) -| Reads in a JSON data from the specified Reader and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:8 -| Object -| jakarta.json.bind.Jsonb.fromJson(Reader, Type) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:9 -| Object -| jakarta.json.bind.Jsonb.fromJson(InputStream, Class) -| Reads in a JSON data from the specified InputStream and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:10 -| Object -| jakarta.json.bind.Jsonb.fromJson(InputStream, Class) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:11 -| Object -| jakarta.json.bind.Jsonb.fromJson(InputStream, Type) -| Reads in a JSON data from the specified InputStream and return the resulting content tree. -| true -| -| true - -| JSONB:JAVADOC:12 -| Object -| jakarta.json.bind.Jsonb.fromJson(InputStream, Type) throws JsonbException -| If any unexpected error(s) occur(s) during deserialization. -| true -| -| false - -| JSONB:JAVADOC:13 -| String -| jakarta.json.bind.Jsonb.toJson(Object) -| Writes the Java object tree with root object object to a String instance as JSON. -| true -| -| true - -| JSONB:JAVADOC:14 -| String -| jakarta.json.bind.Jsonb.toJson(Object) throws JsonbException -| If any unexpected problem occurs during the serialization, such as I/O error. -| true -| -| false - -| JSONB:JAVADOC:15 -| String -| jakarta.json.bind.Jsonb.toJson(Object, Type) -| Writes the Java object tree with root object object to a String instance as JSON. -| true -| -| true - -| JSONB:JAVADOC:16 -| String -| jakarta.json.bind.Jsonb.toJson(Object, Type) throws JsonbException -| If any unexpected problem occurs during the serialization, such as I/O error. -| true -| -| false - - -| JSONB:JAVADOC:17 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Writer) -| Writes the object content tree into a Writer character stream. -| true -| -| true - -| JSONB:JAVADOC:18 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Writer) throws JsonbException -| If any unexpected problem occurs during the serialization. -| true -| -| false - -| JSONB:JAVADOC:19 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Type, Writer) -| Writes the object content tree into a Writer character stream. -| true -| -| true - -| JSONB:JAVADOC:20 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Type, Writer) throws JsonbException -| If any unexpected problem occurs during the serialization. -| true -| -| false - -| JSONB:JAVADOC:21 -| void -| jakarta.json.bind.Jsonb.toJson(Object, OutputStream) -| Writes the object content tree into output stream. -| true -| -| true - -| JSONB:JAVADOC:22 -| void -| jakarta.json.bind.Jsonb.toJson(Object, OutputStream) throws JsonbException -| If any unexpected problem occurs during the serialization. -| true -| -| false - -| JSONB:JAVADOC:23 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Type, OutputStream) -| Writes the object content tree into output stream. -| true -| -| true - -| JSONB:JAVADOC:24 -| void -| jakarta.json.bind.Jsonb.toJson(Object, Type, OutputStream) throws JsonbException -| If any unexpected problem occurs during the serialization. -| true -| -| false - -| JSONB:JAVADOC:25 -| Jsonb -| jakarta.json.bind.JsonbBuilder.build -| Returns a new instance of jakarta.json.bind.Jsonb Jsonb based on the parameters and configuration specified previously in this builder. -| true -| -| true - -| JSONB:JAVADOC:26 -| Jsonb -| jakarta.json.bind.JsonbBuilder.create -| Create a new jakarta.json.bind.Jsonb instance using the default JsonbBuilder implementation provided as returned from jakarta.json.bind.spi.JsonbProvider#provider() method. -| true -| -| true - -| JSONB:JAVADOC:27 -| Jsonb -| jakarta.json.bind.JsonbBuilder.create(JsonbConfig) -| Create a new jakarta.json.bind.Jsonb instance using the default JsonbBuilder implementation provided as returned from jakarta.json.bind.spi.JsonbProvider#provider() method, configured with provided configuration. -| true -| -| true - - -| JSONB:JAVADOC:28 -| JsonbBuilder -| jakarta.json.bind.JsonbBuilder.newBuilder -| Create a new JsonbBuilder instance as returned by the default jakarta.json.bind.spi.JsonbProvider#provider() method. -| true -| -| true - -| JSONB:JAVADOC:29 -| JsonbBuilder -| jakarta.json.bind.JsonbBuilder.newBuilder(String) -| Create a new JsonbBuilder instance as returned by jakarta.json.bind.spi.JsonbProvider#provider(String) method. -| true -| -| true - -| JSONB:JAVADOC:30 -| JsonbBuilder -| jakarta.json.bind.JsonbBuilder.newBuilder(JsonbProvider) -| Create a new JsonbBuilder instance as returned by provider#create call. -| true -| -| true - -| JSONB:JAVADOC:31 -| JsonbBuilder -| jakarta.json.bind.JsonbBuilder.withConfig(JsonbConfig) -| Set configuration which will be set to the newly created jakarta.json.bind.Jsonb Jsonb instance. -| true -| -| true - -| JSONB:JAVADOC:33 -| Map -| jakarta.json.bind.JsonbConfig.getAsMap -| Return all configuration properties as an unmodifiable map. -| true -| -| true - -| JSONB:JAVADOC:34 -| Optional -| jakarta.json.bind.JsonbConfig.getProperty(String) -| Return value of particular configuration property. The method can only be used to retrieve one of the standard JSON Binding properties defined in this class or a provider specific property. Attempting to get an undefined property will result in an empty Optional value. See Supported Properties. -| true -| -| true - -| JSONB:JAVADOC:35 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.JsonbConfig -| -| true -| -| true - -| JSONB:JAVADOC:36 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.setProperty(String, Object) -| Set the particular configuration property to a new value. The method can only be used to set one of the standard JSON Binding properties defined in this class or a provider specific property. -| true -| -| true - -| JSONB:JAVADOC:51 -| JsonbException -| jakarta.json.bind.JsonbException.JsonbException(String) -| Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to #initCause. -| true -| -| true - -| JSONB:JAVADOC:52 -| JsonbException -| jakarta.json.bind.JsonbException.JsonbException(String, Throwable) -| Constructs a new runtime exception with the specified detail message and cause. Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message. -| true -| -| true - -| JSONB:JAVADOC:53 -| Object -| jakarta.json.bind.adapter.JsonbAdapter.adaptFromJson(Object) -| This method is used on deserialization only. It contains a conversion logic from type Adapted to type Original. -| true -| -| true - -| JSONB:JAVADOC:54 -| Object -| jakarta.json.bind.adapter.JsonbAdapter.adaptFromJson(Object) throws Exception -| if there is an error during the conversion. -| true -| -| false - -| JSONB:JAVADOC:55 -| Object -| jakarta.json.bind.adapter.JsonbAdapter.adaptToJson(Object) -| This method is used on serialization only. It contains a conversion logic from type Original to type Adapted. After conversion Adapted type will be mapped to JSON the standard way. -| true -| -| true - -| JSONB:JAVADOC:56 -| Object -| jakarta.json.bind.adapter.JsonbAdapter.adaptToJson(Object) throws Exception -| if there is an error during the conversion. -| true -| -| false - -| JSONB:JAVADOC:57 -| String -| jakarta.json.bind.annotation.JsonbDateFormat.locale -| Custom java.util.Locale to use. -| true -| -| true - -| JSONB:JAVADOC:58 -| String -| jakarta.json.bind.annotation.JsonbDateFormat.value -| Specifies the date pattern to use. -| true -| -| true - -| JSONB:JAVADOC:60 -| String -| jakarta.json.bind.annotation.JsonbNumberFormat.locale -| Custom java.util.Locale to use. -| true -| -| true - -| JSONB:JAVADOC:61 -| String -| jakarta.json.bind.annotation.JsonbNumberFormat.value -| Specifies the number pattern to use. -| true -| -| true - -| JSONB:JAVADOC:63 -| String -| jakarta.json.bind.annotation.JsonbProperty.value -| Customized name of the field (or JavaBean property). -| true -| -| true - -| JSONB:JAVADOC:64 -| String[] -| jakarta.json.bind.annotation.JsonbPropertyOrder.value -| Order in which properties are serialized. Names must correspond to original names defined in Java class before any customization applied. -| true -| -| true - -| JSONB:JAVADOC:65 -| Class -| jakarta.json.bind.annotation.JsonbTypeAdapter.value -| Custom JsonbAdapter which provides custom mapping for given field or JavaBean property. -| true -| -| true - -| JSONB:JAVADOC:66 -| Class -| jakarta.json.bind.annotation.JsonbTypeDeserializer.value -| Custom JsonbDeserializer which provides custom mapping for given field or JavaBean property. -| true -| -| true - -| JSONB:JAVADOC:67 -| Class -| jakarta.json.bind.annotation.JsonbTypeSerializer.value -| Custom JsonbSerializer which provides custom mapping for given field or JavaBean property. -| true -| -| true - -| JSONB:JAVADOC:68 -| Class -| jakarta.json.bind.annotation.JsonbVisibility.value -| Custom property visibility strategy used to resolve visibility of the members. -| true -| -| true - -| JSONB:JAVADOC:69 -| String -| jakarta.json.bind.config.PropertyNamingStrategy.translateName(String) -| Translates the property name into its JSON field name representation. -| true -| -| true - -| JSONB:JAVADOC:70 -| boolean -| jakarta.json.bind.config.PropertyVisibilityStrategy.isVisible(Field) -| Responds whether the given field should be considered as the JsonbProperty. -| true -| -| true - -| JSONB:JAVADOC:71 -| boolean -| jakarta.json.bind.config.PropertyVisibilityStrategy.isVisible(Method) -| Responds whether the given method should be considered as the JsonbProperty. -| true -| -| true - -| JSONB:JAVADOC:78 -| JsonbBuilder -| jakarta.json.bind.spi.JsonbProvider.create -| Returns a new instance of jakarta.json.bind.JsonbBuilder JsonbBuilder class. jakarta.json.bind.JsonbBuilder JsonbBuilder provides necessary getter methods to access required parameters. -| true -| -| true - -| JSONB:JAVADOC:80 -| JsonbProvider -| jakarta.json.bind.spi.JsonbProvider.provider -| Creates a JSON Binding provider object by using the java.util.ServiceLoader#load(Class) method. The first provider of JsonbProvider class from list of providers returned by ServiceLoader.load call is returned. If there are no available service providers, this method tries to load the default service provider using Class#forName(String) method. -| true -| -| true - -| JSONB:JAVADOC:81 -| JsonbProvider -| jakarta.json.bind.spi.JsonbProvider.provider(String) -| Creates a JSON Binding provider object by using the java.util.ServiceLoader#load(Class) method, matching providerName. The first provider of JsonbProvider class from list of providers returned by ServiceLoader.load call, matching providerName is returned. If no such provider is found, JsonbException is thrown. -| true -| -| true - -| JSONB:JAVADOC:37__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withAdapters(JsonbAdapter[]) -| Property used to specify custom mapping adapters. Configures value of ADAPTERS property. Calling withAdapters more than once will merge the adapters with previous value. -| true -| -| true - -| JSONB:JAVADOC:37 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withAdapters(JsonbAdapter[]) -| Property used to specify custom mapping adapters. Configures value of #ADAPTERS property. Calling withAdapters more than once will merge the adapters with previous value. -| true -| -| true - -| JSONB:JAVADOC:38__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withBinaryDataStrategy(String) -| Property used to specify custom binary data strategy. Configures value of BINARY_DATA_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:38 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withBinaryDataStrategy(String) -| Property used to specify custom binary data strategy. Configures value of #BINARY_DATA_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:39__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withDateFormat(String, Locale) -| Property used to specify custom date format. This format will be used by default for all date classes serialization and deserialization. -| true -| -| true - -| JSONB:JAVADOC:39 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withDateFormat(String, Locale) -| Property used to specify custom date format. This format will be used by default for all date classes serialization and deserialization. Configures values of #DATE_FORMAT and #LOCALE properties. -| true -| -| true - -| JSONB:JAVADOC:40__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withDeserializers(JsonbDeserializer[]) -| Property used to specify custom deserializers. Configures value of DESERIALIZERS property. Calling withDeserializers more than once will merge the deserializers with previous value. -| true -| -| true - -| JSONB:JAVADOC:40 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withDeserializers(JsonbDeserializer[]) -| Property used to specify custom deserializers. Configures value of #DESERIALIZERS property. Calling withDeserializers more than once will merge the deserializers with previous value. -| true -| -| true - -| JSONB:JAVADOC:41__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withEncoding(String) -| The binding operations will default to this property for encoding of JSON data. For input data (fromJson), selected encoding is used if the encoding cannot be detected automatically. Default value is 'UTF-8'. Configures value of ENCODING property. -| true -| -| true - -| JSONB:JAVADOC:41 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withEncoding(String) -| The binding operations will default to this property for encoding of JSON data. For input data (fromJson), selected encoding is used if the encoding cannot be detected automatically. Default value is 'UTF-8'. Configures value of #ENCODING property. -| true -| -| true - -| JSONB:JAVADOC:42__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withFormatting(Boolean) -| Property used to specify whether or not the serialized JSON data is formatted with linefeeds and indentation. Configures value of FORMATTING property. -| true -| -| true - -| JSONB:JAVADOC:42 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withFormatting(Boolean) -| Property used to specify whether or not the serialized JSON data is formatted with linefeeds and indentation. Configures value of #FORMATTING property. -| true -| -| true - -| JSONB:JAVADOC:43__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withLocale(Locale) -| Property used to specify custom locale. -| true -| -| true - -| JSONB:JAVADOC:43 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withLocale(Locale) -| Property used to specify custom locale. Configures value of #LOCALE property. -| true -| -| true - -| JSONB:JAVADOC:44__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withNullValues(Boolean) -| Property used to specify whether null values should be serialized to JSON document or skipped. Configures value of NULL_VALUES property. -| true -| -| true - -| JSONB:JAVADOC:44 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withNullValues(Boolean) -| Property used to specify whether null values should be serialized to JSON document or skipped. Configures value of #NULL_VALUES property. -| true -| -| true - -| JSONB:JAVADOC:45__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyNamingStrategy(PropertyNamingStrategy) -| Property used to specify custom naming strategy. Configures value of JSONB_PROPERTY_NAMING_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:45 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyNamingStrategy(PropertyNamingStrategy) -| Property used to specify custom naming strategy. Configures value of #PROPERTY_NAMING_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:46__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyNamingStrategy(String) -| Property used to specify custom naming strategy. Configures value of JSONB_PROPERTY_NAMING_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:46 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyNamingStrategy(String) -| Property used to specify custom naming strategy. Configures value of #PROPERTY_NAMING_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:47__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyOrderStrategy(String) -| Property used to specify property order strategy. Configures values of JSONB_PROPERTY_ORDER_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:47 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyOrderStrategy(String) -| Property used to specify property order strategy. Configures values of #PROPERTY_ORDER_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:48__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyVisibilityStrategy(PropertyVisibilityStrategy) -| Property used to specify custom property visibility strategy. Configures value of PROPERTY_VISIBILITY_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:48 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withPropertyVisibilityStrategy(PropertyVisibilityStrategy) -| Property used to specify custom property visibility strategy. Configures value of #PROPERTY_VISIBILITY_STRATEGY property. -| true -| -| true - -| JSONB:JAVADOC:49__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withSerializers(JsonbSerializer[]) -| Property used to specify custom serializers. Configures value of SERIALIZERS property. Calling withSerializers more than once will merge the serializers with previous value. -| true -| -| true - -| JSONB:JAVADOC:49 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withSerializers(JsonbSerializer[]) -| Property used to specify custom serializers. Configures value of #SERIALIZERS property. Calling withSerializers more than once will merge the serializers with previous value. -| true -| -| true - -| JSONB:JAVADOC:50__OLD -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withStrictIJSON(Boolean) -| Property used to specify whether strict I-JSON serialization compliance should be enforced. Configures value of STRICT_IJSON property. -| true -| -| true - -| JSONB:JAVADOC:50 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withStrictIJSON(Boolean) -| Property used to specify whether strict I-JSON serialization compliance should be enforced. Configures value of #STRICT_IJSON property. -| true -| -| true - -| JSONB:JAVADOC:59__OLD -| boolean -| jakarta.json.bind.annotation.JsonbNillable.value -| True if field with null value should be serialized as key/value pair into JSON with null value. -| true -| -| true - -| JSONB:JAVADOC:59 -| boolean -| jakarta.json.bind.annotation.JsonbNillable.value -| Switches on/off serialization of properties with null value. -| true -| -| true - -| JSONB:JAVADOC:62__OLD -| boolean -| jakarta.json.bind.annotation.JsonbProperty.nillable -| True if field with null value should be serialized as key/value pair into JSON with null value. -| true -| -| true - -| JSONB:JAVADOC:62 -| boolean -| jakarta.json.bind.annotation.JsonbProperty.nillable -| Switches on/off serialization of null values. -| true -| true -| true - -| JSONB:JAVADOC:82 -| JsonbBuilder -| jakarta.json.bind.JsonbBuilder.withProvider(JsonProvider) -| Provides a JSON-P provider to be used for all JSON-P related operations. -| true -| -| true - -| JSONB:JAVADOC:83 -| JsonbConfig -| jakarta.json.bind.JsonbConfig.withCreatorParametersRequired(boolean) -| Property used to specify whether all creator parameters should be treated as required. Default value is false. -| true -| -| true - -| JSONB:JAVADOC:84 -| String -| jakarta.json.bind.annotation.JsonbSubtype.alias -| Type alias which is used instead of a class name. -| true -| -| true - -| JSONB:JAVADOC:85 -| Class -| jakarta.json.bind.annotation.JsonbSubtype.type -| An actual type bound to the alias. -| true -| -| true - -| JSONB:JAVADOC:86 -| String -| jakarta.json.bind.annotation.JsonbTypeInfo.key -| Key used for keeping the type information (alias). Default value is @type. -| true -| -| true - -| JSONB:JAVADOC:87 -| JsonbSubtype[] -| jakarta.json.bind.annotation.JsonbTypeInfo.value -| Allowed aliases of the handled type. -| true -| -| true - -| JSONB:JAVADOC:88 -| Object -| jakarta.json.bind.serializer.DeserializationContext.deserialize(Class, JsonParser) -| Deserialize JSON stream into instance of provided class using jakarta.json.stream.JsonParser. JsonParser cursor have to be at KEY_NAME before START_OBJECT / START_ARRAY, or at START_OBJECT / START_ARRAY to call this method. After deserialization is complete JsonParser will be at END_OBJECT / END_ARRAY for deserialized JSON structure. If method is called for the same type, which is deserializer bound to, deserializer recursion is suppressed. Otherwise deserializers are reentrant during deserialization process started by this method. JsonParser instance of JSONB runtime is shared with custom deserializer. -| true -| -| true - -| JSONB:JAVADOC:89 -| Object -| jakarta.json.bind.serializer.DeserializationContext.deserialize(Type, JsonParser) -| Deserialize JSON stream into instance of provided class using jakarta.json.stream.JsonParser. JsonParser cursor have to be at KEY_NAME before START_OBJECT / START_ARRAY, or at START_OBJECT / START_ARRAY to call this method. After deserialization is complete JsonParser will be at END_OBJECT / END_ARRAY for deserialized JSON structure. If method is called for the same type, which is deserializer bound to, deserializer recursion is suppressed. Otherwise deserializers are reentrant during deserialization process started by this method. JsonParser instance of JSONB runtime is shared with custom deserializer. -| true -| -| true - -| JSONB:JAVADOC:90 -| Object -| jakarta.json.bind.serializer.JsonbDeserializer.deserialize(JsonParser, DeserializationContext, Type) -| Deserialize JSON stream into object. -| true -| -| true - -| JSONB:JAVADOC:91 -| void -| jakarta.json.bind.serializer.JsonbSerializer.serialize(Object, JsonGenerator, SerializationContext) -| Serializes object into JSON stream. -| true -| -| true - -| JSONB:JAVADOC:92 -| void -| jakarta.json.bind.serializer.SerializationContext.serialize(String, Object, JsonGenerator) -| Serializes arbitrary object to JSON, using current jakarta.json.stream.JsonGenerator instance. Serialization is ran as serialization of a root type from user JsonbSerializer. JsonGenerator instance is shared with JSONB and user serializer. -| true -| -| true - -| JSONB:JAVADOC:93 -| void -| jakarta.json.bind.serializer.SerializationContext.serialize(Object, JsonGenerator) -| Serializes arbitrary object to JSON, using current jakarta.json.stream.JsonGenerator instance. Serialization is ran as serialization of a root type from user JsonbSerializer. JsonGenerator instance is shared with JSONB and user serializer. Method without key parameter is intended to serialize inside JSON_ARRAYs. -| true -| -| true -|============================================================================ - -============== \ No newline at end of file diff --git a/tck-dist/src/main/asciidoc/includes/packages.adoc b/tck-dist/src/main/asciidoc/includes/packages.adoc deleted file mode 100644 index b2710a8f..00000000 --- a/tck-dist/src/main/asciidoc/includes/packages.adoc +++ /dev/null @@ -1,6 +0,0 @@ -** `jakarta.json.bind` -** `jakarta.json.bind.adapter` -** `jakarta.json.bind.annotation` -** `jakarta.json.bind.config` -** `jakarta.json.bind.serializer` -** `jakarta.json.bind.spi` \ No newline at end of file diff --git a/tck-dist/src/main/asciidoc/includes/specificationAssertions.adoc b/tck-dist/src/main/asciidoc/includes/specificationAssertions.adoc deleted file mode 100644 index da90c969..00000000 --- a/tck-dist/src/main/asciidoc/includes/specificationAssertions.adoc +++ /dev/null @@ -1,2017 +0,0 @@ -.Summary -[cols="5*", options="header"] -|=== -| Type | Total | Active | Deprecated | Removed -| # of Assertions | 171 | 170 | 0 | 1 -| # of Required Assertions | 164 | 163 | 0 | 1 -| # of Optional Assertions | 7 | 7 | 0 | 0 -|=== - -.Detail -[%collapsible] -============== - -[cols="10*", options="header"] -|======================================================================================================================== -| ID | Chapter | Section | Description | Required | Dependency | Implementation Specific | Defined by | Status | Testable - -| JSONB:SPEC:JSB-3.1-1 -| 3 -| 3.1 -| JSON Binding implementations MUST support binding of JSON documents as defined in RFC 7159 JSON Grammar. Serialized JSON output MUST conform to the RFC 7159 JSON Grammar and be encoded in UTF-8 encoding as defined in Section 8.1 (Character Encoding) of RFC 7159 -| true -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.1-2 -| 3 -| 3.1 -| Implementations MUST support deserialization of documents conforming to RFC 7159 JSON Grammar -| true -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.1-3 -| 3 -| 3.1 -| In addition, implementations SHOULD NOT allow deserialization of RFC 7159 non-conforming text (e.g. unsupported encoding, ...) and report error in such case -| false -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.1-4 -| 3 -| 3.1 -| Detection of UTF encoding of deserialized document is done as defined in the Section 3 (Encoding) of RFC 4627 -| true -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.1-5 -| 3 -| 3.1 -| Implementations SHOULD ignore presence of UTF byte order mark (BOM) and not treat it as an error. -| false -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.2-1 -| 3 -| 3.2 -| Implementations SHOULD NOT allow unmarshalling of RFC 7159 non-conforming text (e.g. unsupported encoding) and report error in such case. -| false -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.2-2 -| 3 -| 3.2 -| Implementation SHOULD also report error also during unmarshalling operation, if it is not possible to represent JSON document value in the expected Java type -| false -| -| false -| technology -| active -| false - -| JSONB:SPEC:JSB-3.3-1 -| 3 -| 3.3 -a| -Implementation MUST report binding of the following basic java classes and their corresponding primitive types - -* java.lang.String -* java.lang.Character -* java.lang.Byte -* java.lang.Short -* java.lang.Integer -* java.lang.Long -* java.lang.Float -* java.lang.Double -* java.lang.Boolean -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.1-1 -| 3 -| 3.3.1 -| Instances of type java.lang.String and java.lang.Character are marshalled to JSON String values as defined within RFC 7159 Section 7 (Strings) in UTF-8 encoding without byte order mark. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.1-2 -| 3 -| 3.3.1 -| Implementations SHOULD support deserialization of JSON text in other (than UTF-8) UTF encodings into java.lang.String instances -| false -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.2-1 -| 3 -| 3.3.2 -| Serialization of type java.lang.Byte, Short, Integer, Long, Float, Double and their corresponding primitive types to JSON Number MUST follow the conversion process defined in javadoc specification for the corresponding toString method -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.2-2 -| 3 -| 3.3.2 -| Deserialization of a JSON value into java.lang.Byte, Short, Integer, Long, Float, Double instance or corresponding primitive type MUST follow the conversion process as defined in the specification for their corresponding parse$Type method, such as java.lang.Byte.parseByte for Byte. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.3-1 -| 3 -| 3.3.3 -| Serialization of type java.lang.Boolean and its corresponding boolean primitive type to JSON value MUST follow conversion process defined in specification for java.lang.Boolean.toString method -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.3-2 -| 3 -| 3.3.3 -| Deserialization of a JSON value into java.lang.Boolean instance or boolean primitive type MUST follow the conversion process as defined in specification for java.lang.Boolean.parseBoolean method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.4-1 -| 3 -| 3.3.4 -| Serialization of type java.lang.Number (if their more concrete type is not defined elsewhere in this chapter) to JSON string MUST retrieve double value returned from java.lang.Number.doubleValue() method and converting the value to JSON Number as defined in subsection 3.3.2 -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.3.4-2 -| 3 -| 3.3.4 -| Deserialization of a JSON value into Java type java.lang.Number should return instance of java.math.BigDecimal by using conversion as defined in the specification for constructor of java.math.BigDecimal with java.lang.String. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4-1 -| 3 -| 3.4 -a| -Implementations MUST support binding of the following standard Java SE classes: - -* java.math.BigInteger -* java.math.BigDecimal -* java.net.URL -* java.net.URI -* java.util.Optional -* java.util.OptionalInt -* java.util.OptionalLong -* java.util.OptionalDouble -* java.util.UUID -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.1-1 -| 3 -| 3.4.1 -| Serialization of type java.math.BigInteger, BigDecimal to s JSON Number MUST follow the conversion process defined in specification for their toString method -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.1-2 -| 3 -| 3.4.1 -| Deserialization of JSON value into java.math.BigInteger, BigDecimal instance MUST follow the conversion process as defined in the specification for constructor of java.math.BigInteger, BigDecimal with java.lang.String. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.2-1 -| 3 -| 3.4.2 -| Serialization of type java.net.URL, URI to a JSON String value MUST follow the conversion process defined in specification for their toString method -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.2-2 -| 3 -| 3.4.2 -| Deserialization of a JSON value into java.net.URL, URI instance MUST follow the conversion process as defined in the specification for constructor of java.net.URL, URI with java.lang.String input. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-1 -| 3 -| 3.4.3 -| Non-empty instances of type java.util.Optional, OptionalInt, OptionalLong, OptionalDouble are serialized to a JSON value by retrieving their contained instance and converting it to JSON value based on its type and corresponding mapping definitions within this chapter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-2 -| 3 -| 3.4.3 -| Class fields containing empty optional instances are treated as having a null value and serialized based on 3.14.1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-3 -| 3 -| 3.4.3 -| Empty optional instances in array items are serialized as null. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-4 -| 3 -| 3.4.3 -| Deserializing into Optional, OptionalInt, OptionalLong, OptionalDouble return empty optional value for properties containing a null value. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-5 -| 3 -| 3.4.3 -| Otherwise any non-empty Optional, OptionalInt, OptionalLong, OptionalDouble value is constructed of type unmarshalled based on mappings defined in this chapter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-6 -| 3 -| 3.4.3 -| Instances of type java.util.Optional T are serialized to a JSON value as JSON objects when T alone would be serialized as JSON object. When T would be serialized as a JSON value (e.g. java.lang.String, java.lang.Integer), an instance of java.util.Optional T is serialized as a JSON value (without curly brackets). -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.3-7 -| 3 -| 3.4.3 -| 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. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.4-1 -| 3 -| 3.4.4 -| Serialization of type java.util.UUID, UUID to a JSON String value MUST follow the conversion process defined in specification for their toString method -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.4.4-2 -| 3 -| 3.4.4 -| 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. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5-1 -| 3 -| 3.5 -a| -Implementations MUST support binding of the following standard Java date/time classes: - -* java.util.Date -* java.util.Calendar -* java.util.GregorianCalendar -* java.util.TimeZone -* java.util.SimpleTimeZone -* java.time.Instant -* java.time.Duration -* java.time.Period -* java.time.LocalDate -* java.time.LocalTime -* java.time.LocalDateTime -* java.time.ZonedDateTime -* java.time.ZoneId -* java.time.ZoneOffset -* java.time.OffsetDateTime -* java.time.OffsetTime -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5-2 -| 3 -| 3.5 -| If not specified otherwise in this section, GMT standard time zone and offset specified from UTC Greenwich is used. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5-3 -| 3 -| 3.5 -| If not specified otherwise, date time format for marshalling and unmarshalling is ISO 8601 without offset, as specified in java.time.format.DateTimeFormatter.ISO_DATE. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5-4 -| 3 -| 3.5 -| Implementations MUST report error if the date/time string in JSON document does not correspond to the expected datetime format. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5-5 -| 3 -| 3.5 -| If in strict I-JSON compliance mode, default date format is changed as it's described in 4.4.1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.1-1 -| 3 -| 3.5.1 -| The serialization format of java.util.Date, Calendar, GregorianCalendar instances with no time information is ISO_DATE. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.1-2 -| 3 -| 3.5.1 -| If time information is present, the format is ISO_DATE_TIME -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.1-3 -| 3 -| 3.5.1 -| Implementations MUST support deserialization of both ISO_DATE and ISO_DATE_TIME into java.util.Date, Calendar and GregorianCalendar instances. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.2-1 -| 3 -| 3.5.2 -| Implementations MUST support deserialization of any time zone format specified in java.util.TimeZone into a field or property of type java.util.TimeZone and SimpleTimeZone. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.2-2 -| 3 -| 3.5.2 -| Implementations MUST report an error for deprecated three-letter time zone IDs as specified in java.util.Timezone. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.2-3 -| 3 -| 3.5.2 -| The serialization format of java.util.TimeZone and SimpleTimeZone is NormalizedCustomID as specified in java.util.TimeZone. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-1 -| 3 -| 3.5.3 -| The serialization output for a java.time.Instant instance MUST be in a ISO_INSTANT format, as specified in java.time.format.DateTimeFormatter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-2 -| 3 -| 3.5.3 -| Implementations MUST support the deserialization of an ISO_INSTANT formatted JSON string to a java.time.Instant instance. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-3 -| 3 -| 3.5.3 -a| -Analogically, for other java.time.* classes, following mapping table matches Java types and corresponding formats: - -* java.time.Instant ISO_INSTANT -* java.time.LocalDate ISO_LOCAL_DATE -* java.time.LocalTime ISO_LOCAL_TIME -* java.time.LocalDateTime ISO_LOCAL_DATE_TIME -* java.time.ZonedDateTime ISO_ZONED_DATE_TIME -* java.time.OffsetDateTime ISO_OFFSET_DATE_TIME -* java.time.OffsetTime ISO_OFFSET_TIME -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-4 -| 3 -| 3.5.3 -| Implementations MUST support the deserialization of any time zone ID format specified in java.time.ZoneId into a field or property of type java.time.ZoneId. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-5 -| 3 -| 3.5.3 -| The serialization format of java.time.ZoneId is the normalized zone ID as specified in java.time.ZoneId. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-6 -| 3 -| 3.5.3 -| Implementations MUST support the deserialization of any time zone ID format specified in java.time.ZoneOffset into a field or property of type java.time.ZoneOffset. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-7 -| 3 -| 3.5.3 -| The serialization format of java.time.ZoneOffset is the normalized zone ID as specified in java.time.ZoneOffset. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-8 -| 3 -| 3.5.3 -| Implementations MUST support the deserialization of any duration format specified in java.time.Duration into a field or property of type java.time.Duration. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-9 -| 3 -| 3.5.3 -| This is super-set of ISO 8601 duration format. The serialization format of java.time.Duration is the ISO 8601 seconds based representation, such as PT8H6M12.345S. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-10 -| 3 -| 3.5.3 -| Implementations MUST support the deserialization of any period format specified in java.time.Period into a field or property of type java.time.Period. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-11 -| 3 -| 3.5.3 -| This is a super-set of ISO 8601 period format. The serialization format of java.time.Period is ISO 8601 period representation. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.5.3-12 -| 3 -| 3.5.3 -| A zero-length period is represented as zero days 'P0D'. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.6-1 -| 3 -| 3.6 -a| -For an unspecified output type of a deserialization operation, as well as where output type is specified as Object.class, implementations MUST deserialize a JSON document using Java runtime types specified in table below: - -* object java.util.Map -* array java.util.List -* string java.lang.String -* number java.math.BigDecimal -* true/false java.lang.Boolean -* null null -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.6-2 -| 3 -| 3.6 -| JSON object values are deserialized into an implementation of java.util.Map(String, Object) with a predictable iteration order. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7-1 -| 3 -| 3.7 -| Any instance passed to a deserialization operation must have a public or protected no-argument constructor. Implementations SHOULD throw an error if this condition is not met. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7-2 -| 3 -| 3.7 -| This limitation does not apply to serialization operations, as well as to classes which specify explicit instantiation methods as described in section 4.5. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-1 -| 3 -| 3.7.1 -| For a deserialization operation of a Java property, if a matching public setter method exists, the method is called to set the value of the property. If a matching setter method with private, protected, or defaulted to package-only access exists, then this field is ignored. If no matching setter method exists and the field is public, then direct field assignment is used. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-2 -| 3 -| 3.7.1 -| For a serialization operation, if a matching public getter method exists, the method is called to obtain the value of the property. If a matching getter method with private, protected, or defaulted to package-only access exists, then this field is ignored. If no matching getter method exists and the field is public, then the value is obtained directly from the field. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-3 -| 3 -| 3.7.1 -| JSON Binding implementations MUST NOT deserialize into transient, final or static fields and MUST ignore name/value pairs corresponding to such fields. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-4 -| 3 -| 3.7.1 -| Implementations MUST support serialization of final fields. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-5 -| 3 -| 3.7.1 -| Transient and static fields MUST be ignored during serialization operation. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-6 -| 3 -| 3.7.1 -| If a JSON document contains a name/value pair not corresponding to field or setter method, then this name/value pair MUST be ignored. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.1-7 -| 3 -| 3.7.1 -| Public getter/setter methods without a corresponding field MUST be supported. When only public getter/setter method without corresponding field is present in the class, the getter method is called to obtain the value to serialize, and the setter method is called during deserialization operation. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.2-1 -| 3 -| 3.7.2 -| Implementations MUST support the binding of public and protected nested classes. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.2-2 -| 3 -| 3.7.2 -| For deserialization operations, both nested and encapsulating classes MUST fulfill the same instantiation requirements as specified in 3.7.1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.3-1 -| 3 -| 3.7.3 -| Implementations MUST support the binding of public and protected static nested classes. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.3-2 -| 3 -| 3.7.3 -| For deserialization operations, the nested class MUST fulfill the same instantiation requirements as specified in 3.7.1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.7.4-1 -| 3 -| 3.7.4 -| Deserialization into anonymous classes is not supported. Serialization of anonymous classes is supported by default object mapping. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-1 -| 3 -| 3.8 -| Polymorphic type handling is supported for deserialization and serialization. Polymorphic handling is ensured by annotation JsonbTypeInfo and @JsonbSubtype. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-2 -| 3 -| 3.8 -| JsonbTypeInfo defines key name of the property to store type information in it and defines all the supported aliases using @JsonbSubtype annotations. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-3 -| 3 -| 3.8 -| @JsonbSubtype ensures proper and safe mapping between class alias and type. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-4 -| 3 -| 3.8 -| Implementation must validate mapped types if they are assignable from the annotated type. If not, an exception must be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-5 -| 3 -| 3.8 -| Type information is obtained from @JsonbSubtype annotation as a type alias mapped to the type. If no matching class is found for obtained alias during deserialization, an exception must be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-6 -| 3 -| 3.8 -| New property with type information is added to the serialized object. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-7 -| 3 -| 3.8 -| The property key name is taken from the key property of the annotation JsonbTypeInfo. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-8 -| 3 -| 3.8 -| This type information property key name has to be unique in the resulting JSON document. If any naming collision with class or any other JsonbTypeInfo properties occurs, an exception must be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-9 -| 3 -| 3.8 -| It is required for all polymorphism fields to be serialized as the first properties in the JSON and any actual object properties are serialized after. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-10 -| 3 -| 3.8 -| If no JsonbTypeInfo is used on handled class or its predecessors, it is not possible to ensure proper polymorphic type handling and in such cases deserialization is not supported. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-11 -| 3 -| 3.8 -| If there are multiple different type polymorphic customizations that need to be merged, an exception must be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.8-12 -| 3 -| 3.8 -| The order of the type information properties must be the same in which they appear in the -polymorphic type chain. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.9-1 -| 3 -| 3.9 -| Serialization of an Enum instance to a JSON String value MUST follow the conversion process defined in javadoc specification for their name(). -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.9-2 -| 3 -| 3.9 -| Deserialization of a JSON value into an enum instance MUST be done by calling the enum's valueOf(String) method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.10-1 -| 3 -| 3.10 -| Implementations MUST support the deserialization of specific interfaces defined in 3.11 and 3.3.4. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.10-2 -| 3 -| 3.10 -| Deserialization to other interfaces is not supported and implementations SHOULD report error in such case. -| false -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.10-3 -| 3 -| 3.10 -| If a class property is defined with an interface and not concrete type, then the mapping for a serialized property is resolved based on its runtime type. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.11-1 -| 3 -| 3.11 -a| -Implementations MUST support binding of the following collection interfaces, classes and their implementations. - -* java.util.Collection -* java.util.Map -* java.util.Set -* java.util.HashSet -* java.util.NavigableSet -* java.util.SortedSet -* java.util.TreeSet -* java.util.LinkedHashSet -* java.util.TreeHashSet -* java.util.HashMap -* java.util.NavigableMap -* java.util.SortedMap -* java.util.TreeMap -* java.util.LinkedHashMap -* java.util.TreeHashMap -* java.util.List -* java.util.ArrayList -* java.util.LinkedList -* java.util.Deque -* java.util.ArrayDeque -* java.util.Queue -* java.util.PriorityQueue -* java.util.EnumSet -* java.util.EnumMap -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.11-2 -| 3 -| 3.11 -| Implementations of interfaces below must provide accessible default constructor. JSON Binding implementations MUST report unmarshalling error if default constructor is not present or is not in accessible scope. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.12-1 -| 3 -| 3.12 -| JSON Binding implementations MUST support binding of Java arrays of all supported Java types from this chapter into/from JSON array structures as defined in Section 5 of RFC 7159 -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.12-2 -| 3 -| 3.12 -| Arrays of primitive types and multi-dimensional arrays MUST be supported. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.13-1 -| 3 -| 3.13 -| Declared fields MUST be serialized in lexicographical order into the resulting JSON document. In case of inheritance, declared fields of super class MUST be serialized before declared fields of child class. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.13-2 -| 3 -| 3.13 -| When deserializing a JSON document, declared fields MUST be set in the order of attributes present in the JSON document. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.1-1 -| 3 -| 3.14.1 -| The result of serializing a java field with a null value is the absence of the property in the resulting JSON document. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.1-2 -| 3 -| 3.14.1 -| The deserialization operation of a property absent in JSON document MUST not set the value of the field, the setter (if available) MUST not be called, and thus original value of the field MUST be preserved. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.1-3 -| 3 -| 3.14.1 -| The deserialization operation of a property with a null value in a JSON document MUST set the value of the field to null value (or call setter with null value if setter is present). The exception is java.util.Optional, OptionalInt, OptionalLong, OptionalDouble instances. In this case the value of the field is set to an empty optional value. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.2-1 -| 3 -| 3.14.2 -| The result of deserialization n-ary array represented in JSON document is n-ary Java array. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.2-2 -| 3 -| 3.14.2 -| Null value in JSON array is represented by null value in Java array. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.14.2-3 -| 3 -| 3.14.2 -| Serialization operation on Java array with null value at index i MUST output null value at index i of the array in resulting JSON document. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.15-1 -| 3 -| 3.15 -| According to RFC 7159 Section 7 , every Java identifier name can be transformed using identity function into a valid JSON String. Identity function MUST be used for transforming Java identifier names into name Strings in JSON document. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.15-2 -| 3 -| 3.15 -| For deserialization operations defined in 3.6 section, identity function is used to transform JSON name strings into Java String instances in the resulting map Map(String, Object). -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.15-3 -| 3 -| 3.15 -| Identity function is used also for other deseralization operations. -| true -| -| false -| technology -| removed -| true - -| JSONB:SPEC:JSB-3.15-4 -| 3 -| 3.15 -| If a Java identifier with corresponding name does not exist or is not accessible, the implementations MUST report error. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.16-1 -| 3 -| 3.16 -| JSON Binding implementation MUST serialize numbers that express greater magnitude or precision than an IEEE 754 double precision number as strings. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17-1 -| 3 -| 3.17 -| JSON Binding implementations MUST support binding of generic types. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17-2 -| 3 -| 3.17 -| Due to type erasure, there are situations when it is not possible to obtain generic type information. There are two ways for JSON Binding implementations to obtain generic type information. If there is a class file available (in the following text referred as static type information), it is possible to obtain generic type information (effectively generic type declaration) from Signature attribute (if this information is present). -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17-3 -| 3 -| 3.17 -| The second option is to provide generic type information at runtime. To provide generic type information at runtime, an argument of java.lang.reflect.Type MUST be passed to Jsonb::toJson or to Jsonb::fromJson method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-1 -| 3 -| 3.17.1 -a| -There are several levels of information JSON Binding implementations may obtain about the type of field/class/interface: - -1. runtime type provided via java.lang.reflect.Type parameter passed to Jsonb::toJson or Jsonb::fromJson method -2. static type provided in class file (effectively stored in Signature attribute) -3. raw type -4. no information about the type -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-2 -| 3 -| 3.17.1 -| If there is no information about the type, JSON Binding implementation MUST treat this type as java.lang.Object. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-3 -| 3 -| 3.17.1 -| If only raw type of given field/class/interface is known, then the type MUST be treated like raw type. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-4 -| 3 -| 3.17.1 -| For example, if the only available information is that given field/class/interface is of type java.util.ArrayList, than the type MUST be treated as java.util.ArrayList Object. JSON Binding implementations MUST use the most specific type derived from the information available. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-5 -| 3 -| 3.17.1 -| Let's consider situation where there is only static type information of a given field/class/interface known, -and there is no runtime type information available. Let GenericClass T1. . .Tn be part of generic type -declaration, where GenericClass is name of the generic type and T1. . .Tn are type parameters. For every -Ti, where i in 1. . .n, there are 3 possible options: -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-6 -| 3 -| 3.17.1 -a| - -1. Ti is concrete parameter type - - the most specific parameter type MUST be given concrete parameter type Ti. -2. Ti is bounded parameter type -3. Ti is wildcard parameter type without bounds -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-7 -| 3 -| 3.17.1 -| For bounded parameter type, using bounds B1. . .Bm. If m = 1, then the most specific parameter type MUST be derived from the given bound B1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-8 -| 3 -| 3.17.1 -| If B1 is class or interface, the most specific parameter type MUST be the class or interface. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-9 -| 3 -| 3.17.1 -| Otherwise, the most specific parameter type SHOULD be java.lang.Object. -| false -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-10 -| 3 -| 3.17.1 -| If multiple bounds are specified, the first step is to resolve every bound separately. Let's define result of such resolution as S1. . . Sm specific parameter types. If S1. . . Sm are java.lang.Object, then the bounded parameter type Ti MUST be java.lang.Object. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-11 -| 3 -| 3.17.1 -| If there is exactly one Sk, where 1 <= k <= m is different than java.lang.Object, then the most specific parameter type for this bounded parameter type Ti MUST be Sk. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-12 -| 3 -| 3.17.1 -| If there exists Sk1; Sk2, where 1 <= k1 <= k2 <= m, then the most specific parameter type is Sk1. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-13 -| 3 -| 3.17.1 -| For wildcard parameter type without bounds, the most specific parameter type MUST be java.lang.Object. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-14 -| 3 -| 3.17.1 -| Any unresolved type parameter MUST be treated as java.lang.Object. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.17.1-15 -| 3 -| 3.17.1 -| If runtime type is provided via java.lang.reflect.Type parameter passed to Jsonb::toJson or Jsonb::fromJson method, than that runtime type overrides static type declaration wherever applicable -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.18-1 -| 3 -| 3.18 -| When JSON Binding implementation encounters key in key/value pair that it does not recognize, it should treat the rest of the JSON document as if the element simply did not appear, and in particular, the implementation MUST NOT treat this as an error condition. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.19-1 -| 3 -| 3.19 -| JSON Binding implementations MUST NOT produce JSON documents with members with duplicate names. In this context, "duplicate" means that the names, after processing any escaped characters, are identical sequences of Unicode characters. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.19-2 -| 3 -| 3.19 -| When non-unique property (after override and rename) is found, implementation MUST throw an exception. This doesn't apply for customized user serialization behavior implemented with the usage of JsonbAdapter mechanism. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.20-1 -| 3 -| 3.20 -a| -JSON Binding implementations MUST support binding of the following JSON Processing types. - -* jakarta.json.JsonObject -* jakarta.json.JsonArray -* jakarta.json.JsonStructure -* jakarta.json.JsonValue -* jakarta.json.JsonPointer -* jakarta.json.JsonString -* jakarta.json.JsonNumber -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.20-2 -| 3 -| 3.20 -| Serialization of supported jakarta.json.* objects/interfaces/fields MUST have the same result as serialization these objects with jakarta.json.JsonWriter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.20-3 -| 3 -| 3.20 -| Deserialization into supported jakarta.json.* objects/interfaces/fields MUST have the same result as deserialization into such objects with jakarta.json.JsonReader. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-3.20-4 -| 3 -| 3.20 -| If the null value is deserialized into the JsonValue, it is handled as JsonValue.NULL. JsonValue.NULL is not assigned as a default value if no value is set. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.1-1 -| 4 -| 4.1.1 -| JSON Binding implementations MUST NOT serialize fields, JavaBean properties or types annotated with jakarta.json.bind.annotation.JsonbTransient. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.1-2 -| 4 -| 4.1.1 -| JsonbTransient annotation is mutually exclusive with all other JSON Binding defined annotations. Implementations must throw JsonbException in the following cases: Class field is annotated with @JsonbTransient. Exception must be thrown when this field, getter or setter is annotated with other JSON Binding annotations. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.1-3 -| 4 -| 4.1.1 -| Getter is annotated with @JsonbTransient. Exception is thrown if when the field or this getter are annotated with other JSON Binding annotations. Exception is not thrown if JSON Binding annotations are presented on the setter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.1-4 -| 4 -| 4.1.1 -| Setter is annotated with @JsonbTransient. Exception is thrown if when the field or this setter are annotated with other JSON Binding annotations. Exception is not thrown if JSON Binding annotations are presented on the getter. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.2-1 -| 4 -| 4.1.2 -| To provide custom name for given field (or JavaBean property), -jakarta.json.bind.annotation.JsonbProperty may be used. JsonbProperty annotation may be specified on -field, getter or setter method. If specified on field, custom name is used both for serialization and -deserialization. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.2-2 -| 4 -| 4.1.2 -| If jakarta.json.bind.annotation.JsonbProperty is specified on getter method, it is used only for serialization. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.2-3 -| 4 -| 4.1.2 -| If jakarta.json.bind.annotation.JsonbProperty is specified on setter method, it is used only for deserialization. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.2-4 -| 4 -| 4.1.2 -| It is possible to specify different values for getter and setter method for jakarta.json.bind.annotation.JsonbProperty annotation. In such case the different custom name will be used for serialization and deserialization. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.3-1 -| 4 -| 4.1.3 -| The way to set custom property naming strategy is to use jakarta.json.bin.JsonbConfig::withPropertyNamingStrategy method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.1.4-1 -| 4 -| 4.1.4 -| If duplicate name is found exception MUST be thrown. The definition of duplicate (non-unique) property -can be found in 3.19. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.2 -| 4 -| 4.2 -| The way to set custom property order strategy is to use jakarta.json.bin.JsonbConfig::withPropertyOrderStrategy method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.2-2 -| 4 -| 4.2 -| To customize the order of serialized properties only for one specific type, JSON Binding provides jakarta.json.bind.annotation.JsonbPropertyOrder annotation. Order specified by JsonbPropertyOrder annotation overrides order specified by PropertyOrderStrategy. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3-1 -| 4 -| 4.3 -| If annotations (JsonbNillable or JsonbProperty) on different level apply to the same field (or JavaBean property) or if there is config wide configuration and some annotation (JsonbNillable or JsonbProperty) which apply to the same field (or JavaBean property), the annotation with the smallest scope applies. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3-2 -| 4 -| 4.3 -| JsonbNillable and JsonbProperty are applied on the same level, JsonbNillable takes precedence. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3.1-1 -| 4 -| 4.3.1 -| When given object (type or package) is annotated with jakarta.json.bind.annotation.JsonbNillable annotation, the result of null value will be presence of associated property in JSON document with explicit null value. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3.1-2 -| 4 -| 4.3.1 -| The same behavior as JsonbNillable, but only at field, parameter and method (JavaBean property) level is provided by jakarta.json.bind.annotation.JsonbProperty annotation with its nillable parameter. This option is currently deprecated, and it is recommended to use jakarta.json.bind.annotation.JsonbNillable instead. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3.1-3 -| 4 -| 4.3.1 -| JSON Binding implementations MUST implement override of annotations according to target of the annotation (FIELD, PARAMETER, METHOD, TYPE, PACKAGE). Type level annotation overrides behavior set at the package level. Method, parameter or field level annotation overrides behavior set at the type level. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.3.2-1 -| 4 -| 4.3.2 -| The way to enforce serialization of null values, is to call method jakarta.json.bind.JsonbConfig::withNullValues with parameter true. The way to skip serialization of null values is to call method jakarta.json.bind.JsonbConfig::withNullValues with parameter false. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.4-1 -| 4 -| 4.4 -| To enforce strict compliance of serialized JSON documents, JSON Binding implementations MUST implement configuration option jsonb.i-json.strict-ser-compliance. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.4.1-1 -| 4 -| 4.4.1 -| Uppercase rather than lowercase letters MUST be used. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.4.1-2 -| 4 -| 4.4.1 -| The timezone MUST always be included and optional trailing seconds MUST be included even when their value is 00. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.4.1-3 -| 4 -| 4.4.1 -| JSON Binding implementations MUST serialize java.util.Date, java.util.Calendar, java.util.GregorianCalendar, java.time.LocalDate, java.time.LocalDateTime and java.time.Instant in the same format as java.time.ZonedDateTime. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.4.1-4 -| 4 -| 4.4.1 -| The result of serialization of duration must conform to the duration production in Appendix A of RFC 3339, with the same additional restrictions -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.5-1 -| 4 -| 4.5 -| At most one JsonbCreator annotation can be used to annotate custom constructor or static void factory method in a class, otherwise JsonbException MUST be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.5-2 -| 4 -| 4.5 -| Factory method annotated with JsonbCreator annotation should return instance of particular class this annotation is used for, otherwise JsonbException MUST be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.5-3 -| 4 -| 4.5 -| Mapping between parameters of constructor/factory method annotated with JsonbCreator and JSON fields is defined using JsonbProperty annotation on all parameters. -If the JsonbProperty annotation on parameters is not used, then parameters should be mapped from JSON fields with the same name. In this case the proper mapping is NOT guaranteed. -All the JsonbCreator parameters are treated as optional by default. See Optional parameter values chapter for default optional parameter values. -All the JsonbCreator parameters can be turned to required by using configuration method Config::withCreatorParametersRequired. -If a required field for a parameter mapping does not exist in the JSON document, then JsonbException MUST be thrown. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.5.1-1 -| 4 -| 4.5 -| When a property is marked as optional, the proper default should be used. If the parameter is any type other than Optional or its variations, then the null value is used. If the parameter is java.util.Optional, OptionalInt, OptionalLong, OptionalDouble, then the corresponding empty object must be used. -Primitive types cannot accept null values, so a corresponding value is required as listed in the following table:. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.6-1 -| 4 -| 4.5 -| To customize scope and field access strategy as specified in section 3.7.1, it is possible to specify jakarta.json.bind.annotation.JsonbVisibility annotation or to override default behavior globally calling JsonbConfig::withPropertyVisibilityStrategy method with given custom property visibility strategy. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.1-1 -| 4 -| 4.7.1 -| On serialization of Original type JSONB calls JsonbAdapter::adaptToJson method of the adapter to convert Original to Adapted and serializes Adapted the standard way. On deserialization JSONB deserializes Adapted from JSON and converts it to Original using JsonbAdapter::adaptFromJson method. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.1-2 -| 4 -| 4.7.1 -| There are two ways how to register JsonbAdapter: Using JsonbConfig::withAdapters method & Annotating a class field with JsonbTypeAdapter annotation. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.1-3 -| 4 -| 4.7.1 -| Implementations must provide a CDI support in adapters to allow injection of CDI managed beans into it. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.1-4 -| 4 -| 4.7.1 -| JsonbAdapter registered via JsonbConfig::withAdapters is visible to all serialize/deserialize operations -performed with given JsonbConfig. JsonbAdapter registered with annotation is visible to serialize/deserialize operation used only for annotated field. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.1-5 -| 4 -| 4.7.1 -| It is possible to annotate JsonbCreator parameter with JsonbTypeAdapter and provide adapter for a parameter this way. However, if JsonbTypeAdapter annotation is provided to any other parameter (such as setter method parameter) it will be ignored. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.2-1 -| 4 -| 4.7.2 -| Serializer is a class implementing jakarta.json.bind.serializers.JsonbSerializer interface. It is used to serialize the type it's registered on (Original). On marshalling of Original type JSONB calls JsonbSerializer::serialize method. This method has to contain a custom code to serialize Original type using provided JsonpGenerator.Deserializer is a class implementing jakarta.json.bind.serializers.JsonbDeserializer interface. It is used to deserialize the type it's registered on (Original). On deserialization of Original type JSONB calls JsonbDeserializer::deserialize method. This method has to contain a custom code to deserialize Original type using provided JsonpParser. There are two ways how to register JsonbSerializer/JsonbDeserializer:Using JsonbConfig::withSerializers/ JsonbConfig::withDeserializers method; -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.2-2 -| 4 -| 4.7.2 -| Annotating a type with JsonbSerializer/JsonbDeserializer annotation. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.2-3 -| 4 -| 4.7.2 -| Implementations must provide a CDI support in serializers/deserializers to allow injection of CDI managed beans into it. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.7.2-4 -| 4 -| 4.7.2 -| It is possible to annotate JsonbCreator parameter with JsonbTypeDeserializer and provide deserializer for a parameter this way. However, if JsonbTypeDeserializer annotation is provided to any other parameter (such as setter method parameter) it will be ignored. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.8-1 -| 4 -| 4.8 -| JsonbDateFormat annotation can be applied to the following targets: field, method, type, parameter, package -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.8-2 -| 4 -| 4.8 -| Annotation applied to more specific target overrides the same annotation applied to target with wider scope and global configuration. For example, annotation applied to type target will override the same annotation applied to package target. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.8-3 -| 4 -| 4.8 -| Default date format and default locale can be customized globally using jakarta.json.bind.JsonbConfig::withDateFormat and jakarta.json.bind.JsonbConfig::withLocale methods. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.9-1 -| 4 -| 4.9 -| JsonbNumberFormat annotation can be applied to the following targets: field, getter/setter, method, type, parameter, package -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.9-2 -| 4 -| 4.9 -| Annotation applied to more specific target overrides the same annotation applied to target with wider scope. For example, annotation applied to type target will override the same annotation applied to package target. -| true -| -| false -| technology -| active -| true - -| JSONB:SPEC:JSB-4.10-1 -| 4 -| 4.10 -| The way to set custom binary data handling strategy is to use jakarta.json.bin.JsonbConfig::withBinaryDataStrategy method. -| true -| -| false -| technology -| active -| true -|======================================================================================================================== - -============== diff --git a/tck-dist/src/main/asciidoc/includes/successfulChallenges.adoc b/tck-dist/src/main/asciidoc/includes/successfulChallenges.adoc deleted file mode 100644 index 3b423251..00000000 --- a/tck-dist/src/main/asciidoc/includes/successfulChallenges.adoc +++ /dev/null @@ -1,26 +0,0 @@ -.challenges -[cols="3*", options="header"] -|=== -| Class | Method | Reason - -| jakarta/jsonb/bind/tck/defaultmapping/dates/DatesMappingTest -| testGregorianCalendarWithTimeMapping_from_standalone -| https://github.com/jakartaee/platform-tck/issues/102 - -| jakarta/jsonb/bind/tck/defaultmapping/collections/CollectionsMappingTest -| testEnumMap_from_standalone -| https://github.com/jakartaee/platform-tck/issues/103 - -| jakarta/jsonb/bind/tck/defaultmapping/collections/CollectionsMappingTest -| testEnumSet_from_standalone -| https://github.com/jakartaee/platform-tck/issues/103 - -| jakarta/jsonb/bind/tck/defaultmapping/basictypes/BasicJavaTypesMappingTest -| testLongMapping_from_standalone -| https://github.com/jakartaee/jsonb-api/issues/180 - -| jakarta/jsonb/bind/tck/defaultmapping/bignumbers/BigNumbersMappingTest -| testBigNumberMarshalling_from_standalone -| https://github.com/jakartaee/jsonb-api/issues/180 - -|=== diff --git a/tck-dist/src/main/asciidoc/sections/03intro.adoc b/tck-dist/src/main/asciidoc/sections/03intro.adoc index 742d12d5..7087ff98 100644 --- a/tck-dist/src/main/asciidoc/sections/03intro.adoc +++ b/tck-dist/src/main/asciidoc/sections/03intro.adoc @@ -133,7 +133,7 @@ implementation is not required to pass. ifndef::no-api-tests[] * API tests for all of the {TechnologyShortName} API in all related packages: -include::../includes/packages.adoc[] +include::../generated/packages.adoc[] endif::no-api-tests[] ifdef::end-to-end-tests[] diff --git a/tck-dist/src/main/asciidoc/sections/04certification.adoc b/tck-dist/src/main/asciidoc/sections/04certification.adoc index a1d0b5e3..0e8812e1 100644 --- a/tck-dist/src/main/asciidoc/sections/04certification.adoc +++ b/tck-dist/src/main/asciidoc/sections/04certification.adoc @@ -340,7 +340,7 @@ https://www.eclipse.org/projects/dev_process/#6_5_Grievance_Handling[Eclipse Dev The following tests are exempt from TCK testing due to challenges: -include::../includes/successfulChallenges.adoc[] +include::../generated/successful-challenges.adoc[] === Specifications for {TechnologyFullName} @@ -354,7 +354,7 @@ project web-site: {SpecificationURL}. The following is a list of the packages comprising the required class libraries for {TechnologyShortName} {TechnologyVersion}: -include::../includes/packages.adoc[] +include::../generated/packages.adoc[] For the latest list of packages, also see: diff --git a/tck-dist/src/main/asciidoc/sections/09assertions.adoc b/tck-dist/src/main/asciidoc/sections/09assertions.adoc index 5ad7796c..c155a903 100644 --- a/tck-dist/src/main/asciidoc/sections/09assertions.adoc +++ b/tck-dist/src/main/asciidoc/sections/09assertions.adoc @@ -1,11 +1,15 @@ == Assertion Details -This section lists the total number of assertions in the TCK, and provides details about each assertion. The assertions are categorized as JavaDoc Assertions and Specification Assertions. +This section lists the total number of assertions in the TCK, and the expected output from a successful run of the TCK. -=== JavaDoc Assertions +=== Total Assertions -include::../includes/javadocAssertions.adoc[] +include::../generated/runtime-tests.adoc[] -=== Specification Assertions +=== Expected TCK Output -include::../includes/specificationAssertions.adoc[] \ No newline at end of file +include::../generated/expected-output.adoc[] + +=== Expected Signature Test Output + +include::../generated/expected-sig-output.adoc[] \ No newline at end of file diff --git a/tck-dist/src/main/java/ee/jakarta/tck/json/bind/metadata/CollectMetaData.java b/tck-dist/src/main/java/ee/jakarta/tck/json/bind/metadata/CollectMetaData.java new file mode 100644 index 00000000..ee48b2bf --- /dev/null +++ b/tck-dist/src/main/java/ee/jakarta/tck/json/bind/metadata/CollectMetaData.java @@ -0,0 +1,578 @@ +/* + * Copyright (c) 2026 Contributors to the Eclipse Foundation + * + * 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. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package ee.jakarta.tck.json.bind.metadata; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarInputStream; +import java.util.stream.Collectors; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +/** + * Utility class that analyzes the TCK jar and generates documentation for: + *
    + *
  1. The names of tests that are disabled (due to challenges)
  2. + *
  3. The number of tests that need to pass for certification
  4. + *
  5. Expected JUnit output
  6. + *
  7. Expected signature test output
  8. + *
  9. The list of API packages covered by the TCK
  10. + *
+ * + *

This is run automatically each time the tck-dist module is built so the + * generated documentation stays in sync with the test suite without manual + * updates.

+ * + *

Annotation metadata is read directly from {@code .class} bytecode using + * ASM, so no test class is ever loaded into the JVM. This avoids static + * initializer side-effects (e.g. {@code JsonbBuilder.create()}) and removes + * any need for a Jsonb provider on the classpath.

+ * + *

Files are output to:

+ *
  ${project.basedir}/src/main/asciidoc/generated/
+ * + *

File names:

+ *
+ *   expected-output.adoc
+ *   expected-sig-output.adoc
+ *   packages.adoc
+ *   runtime-tests.adoc
+ *   successful-challenges.adoc
+ * 
+ */ +public final class CollectMetaData { + + // Internal ASM descriptor strings for the JUnit annotations being scanned + private static final String TEST_DESC = "Lorg/junit/jupiter/api/Test;"; + private static final String DISABLED_DESC = "Lorg/junit/jupiter/api/Disabled;"; + + // Framework package whose classes are helpers, not runnable tests + private static final String FRAMEWORK_PACKAGE_PREFIX = "ee/jakarta/tck/json/bind/framework"; + + private static final String RUNTIME_TESTS_FILE = "runtime-tests.adoc"; + private static final String CHALLENGED_TESTS_FILE = "successful-challenges.adoc"; + private static final String SIG_OUTPUT_FILE = "expected-sig-output.adoc"; + private static final String EXPECTED_OUTPUT_FILE = "expected-output.adoc"; + private static final String PACKAGES_FILE = "packages.adoc"; + + // Data holders + private static boolean debug = false; + private static List apiPackages; + private static File adocGeneratedLocation; + + private CollectMetaData() { + // Do nothing + } + + /** + * Main entry point. Expects exactly three arguments: + *
    + *
  1. {@code boolean} – enable debug output
  2. + *
  3. path to the TCK jar – used to collect metadata
  4. + *
  5. output directory – where generated pages should be written
  6. + *
+ * + * @param args the arguments needed to run + * @throws Exception if any documentation cannot be generated + */ + public static void main(final String[] args) throws Exception { + if (args.length != 3) { + throw new RuntimeException( + "CollectMetaData expected exactly 3 arguments [debug, path-to-tck, output-file-location]"); + } + + // Load arguments + debug = Boolean.valueOf(args[0]); + adocGeneratedLocation = new File(args[2]); + + // Ensure the output directory exists + if (!adocGeneratedLocation.exists()) { + adocGeneratedLocation.mkdirs(); + } + + // Scan bytecode directly — no class loading + final List testMetaData = scanJar(args[1]); + + // Write the generated asciidoc files + writeTestCounts(testMetaData, new File(adocGeneratedLocation, RUNTIME_TESTS_FILE)); + writeSuccessfulChallenges(testMetaData, new File(adocGeneratedLocation, CHALLENGED_TESTS_FILE)); + writeSigOutput(new File(adocGeneratedLocation, SIG_OUTPUT_FILE)); + writeOutput(testMetaData, new File(adocGeneratedLocation, EXPECTED_OUTPUT_FILE)); + writePackages(new File(adocGeneratedLocation, PACKAGES_FILE)); + writeGitIgnore(new File(adocGeneratedLocation, ".gitignore"), + RUNTIME_TESTS_FILE, CHALLENGED_TESTS_FILE, SIG_OUTPUT_FILE, EXPECTED_OUTPUT_FILE, PACKAGES_FILE); + + for (TestMetaData data : testMetaData) { + debug(data.debugString()); + } + } + + // ------------------------------------------------------------------------- + // Bytecode scanning + // ------------------------------------------------------------------------- + + /** + * Streams every {@code .class} entry in the TCK jar and uses ASM to read + * annotation metadata directly from the bytecode. No class is loaded into + * the JVM; static initializers are never executed. + * + * @param jarLocation path to the TCK jar + * @return list of metadata for each {@code @Test}-annotated method + * @throws Exception if the jar cannot be read + */ + private static List scanJar(final String jarLocation) throws Exception { + List results = new ArrayList<>(); + + try (JarInputStream jar = new JarInputStream(new FileInputStream(jarLocation))) { + for (JarEntry entry = jar.getNextJarEntry(); entry != null; entry = jar.getNextJarEntry()) { + final String name = entry.getName(); + + if (isTestClass(name)) { + debug("Scanning: " + name); + byte[] bytes = jar.readAllBytes(); + results.addAll(scanClass(bytes)); + + } else if (name.contains("sig-test-pkg-list.txt")) { + debug("Reading package list: " + name); + apiPackages = new String(jar.readAllBytes(), StandardCharsets.UTF_8).lines() + .filter(line -> !line.contains("#")) + .filter(line -> !line.isBlank()) + .collect(Collectors.toList()); + debug("apiPackages: " + apiPackages); + } + + jar.closeEntry(); + } + } + + return results; + } + + /** + * Uses ASM to visit a single {@code .class} file and collect + * {@link TestMetaData} for every method annotated with {@code @Test}. + * + * @param classBytes raw bytecode of the class + * @return list of test metadata found in this class (may be empty) + */ + private static List scanClass(final byte[] classBytes) { + List found = new ArrayList<>(); + + ClassReader reader = new ClassReader(classBytes); + reader.accept(new ClassVisitor(Opcodes.ASM9) { + + private String className; + + @Override + public void visit(int version, int access, String name, + String signature, String superName, String[] interfaces) { + // Convert internal name (slashes) to canonical name (dots) + this.className = name.replace('/', '.'); + } + + @Override + public MethodVisitor visitMethod(int access, String methodName, + String descriptor, String signature, String[] exceptions) { + return new MethodVisitor(Opcodes.ASM9) { + + // Mutable holders filled by annotation visitors below + private boolean hasTest = false; + private boolean hasDisabled = false; + private String disabledValue = ""; + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + if (TEST_DESC.equals(desc)) { + hasTest = true; + return null; + } + if (DISABLED_DESC.equals(desc)) { + hasDisabled = true; + return new AnnotationVisitor(Opcodes.ASM9) { + @Override + public void visit(String attrName, Object value) { + if ("value".equals(attrName)) disabledValue = (String) value; + } + }; + } + return null; + } + + @Override + public void visitEnd() { + if (hasTest) { + found.add(new TestMetaData( + className, + methodName, + hasDisabled, + parseDisabledLink(disabledValue), + parseDisabledSince(disabledValue))); + } + } + }; + } + }, ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG); + + return found; + } + + /** + * Returns {@code true} when the jar entry is a test class that should be + * scanned. A class qualifies when its simple name ends with {@code Test} + * and it does not live under the framework helper package. + * + * @param entryName fully-qualified resource path inside the jar + * @return {@code true} if the entry should be scanned + */ + private static boolean isTestClass(final String entryName) { + if (!entryName.endsWith(".class")) + return false; + if (entryName.contains(FRAMEWORK_PACKAGE_PREFIX)) + return false; + + String simpleName = entryName.substring(entryName.lastIndexOf('/') + 1, entryName.lastIndexOf('.')); + return simpleName.endsWith("Test"); + } + + // ------------------------------------------------------------------------- + // @Disabled reason parsers + // ------------------------------------------------------------------------- + + /** + * Extracts the {@code link:} segment from a structured {@code @Disabled} + * reason string of the form {@code "link: since: "}. + * + * @param reason the full reason string, or empty + * @return the link value, or empty string if not present + */ + private static String parseDisabledLink(final String reason) { + if (reason == null || reason.isBlank()) return ""; + int linkStart = reason.indexOf("link:"); + if (linkStart < 0) return ""; + int linkEnd = reason.indexOf("since:"); + String raw = linkEnd > linkStart + ? reason.substring(linkStart + "link:".length(), linkEnd) + : reason.substring(linkStart + "link:".length()); + return raw.strip(); + } + + /** + * Extracts the {@code since:} segment from a structured {@code @Disabled} + * reason string of the form {@code "link: since: "}. + * + * @param reason the full reason string, or empty + * @return the version value, or empty string if not present + */ + private static String parseDisabledSince(final String reason) { + if (reason == null || reason.isBlank()) return ""; + int sinceStart = reason.indexOf("since:"); + if (sinceStart < 0) return ""; + return reason.substring(sinceStart + "since:".length()).strip(); + } + + // ------------------------------------------------------------------------- + // Asciidoc writers + // ------------------------------------------------------------------------- + + /** + * Writes the names of generated files into a {@code .gitignore} so they + * are never accidentally committed. + * + * @param outputLocation the {@code .gitignore} file to write + * @param ignoredFiles file names to ignore + * @throws IOException if the file cannot be written + */ + private static void writeGitIgnore(final File outputLocation, final String... ignoredFiles) throws IOException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + for (String ignoredFile : ignoredFiles) { + writer.write(ignoredFile + System.lineSeparator()); + } + } + } + + /** + * Writes example Maven {@code test} output to the generated adoc folder. + * + * @param testMetaData the test metadata previously collected + * @param outputLocation the output file + * @throws IOException if the file cannot be written + */ + private static void writeOutput(final List testMetaData, final File outputLocation) throws IOException { + String output = + """ + [source, txt] + ---- + $ mvn clean test + ... + [INFO] --- maven-surefire-plugin:x.x.x:test (default-test) @ tck.runner --- + [INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider + [INFO] + [INFO] ------------------------------------------------------- + [INFO] T E S T S + [INFO] ------------------------------------------------------- + $indiviualTests + [INFO] Results: + [INFO] + $totalTests + [INFO] + [INFO] ------------------------------------------------------- + [INFO] BUILD SUCCESS + [INFO] ------------------------------------------------------- + [INFO] Total time: xx.xxx s + [INFO] Finished at: yyyy-mm-ddThh:mm:ss.mmmm + [INFO] ------------------------------------------------------- + ----""" + .replaceAll("\\$indiviualTests", getIndividualTests(testMetaData)) + .replaceAll("\\$totalTests", getTotalTests(testMetaData)); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + writer.write(output.trim() + System.lineSeparator()); + } + } + + /** + * Builds per-class test run lines for the expected-output block. + * + * @param testMetaData the full list of test metadata + * @return formatted string of individual test class result lines + */ + private static String getIndividualTests(final List testMetaData) { + StringBuffer output = new StringBuffer(); + final String nl = System.lineSeparator(); + for (String testClass : testMetaData.stream() + .map(TestMetaData::testClass) + .distinct() + .collect(Collectors.toList())) { + + List theseTests = testMetaData.stream() + .filter(m -> m.testClass().equals(testClass)) + .collect(Collectors.toList()); + long testCount = theseTests.stream().filter(m -> !m.isDisabled()).count(); + long disabledCount = theseTests.stream().filter(TestMetaData::isDisabled).count(); + + output.append("[INFO] Running " + testClass + nl); + if (disabledCount > 0) { + output.append("[WARNING] Tests run: " + testCount + ", Failures: 0, Errors: 0, Skipped: " + disabledCount + ","); + } else { + output.append("[INFO] Tests run: " + testCount + ", Failures: 0, Errors: 0, Skipped: " + disabledCount + ","); + } + output.append("Time elapsed: y.yy s - in " + testClass + nl); + output.append("[INFO]" + nl); + } + return output.toString().trim(); + } + + /** + * Builds the summary totals line for the expected-output block. + * + * @param testMetaData the full list of test metadata + * @return formatted totals line + */ + private static String getTotalTests(final List testMetaData) { + long totalTestCount = testMetaData.stream().count(); + long totalDisabledCount = testMetaData.stream().filter(TestMetaData::isDisabled).count(); + + if (totalDisabledCount > 0) { + return "[WARNING] Tests run: " + totalTestCount + ", Failures: 0, Errors: 0, Skipped: " + totalDisabledCount; + } else { + return "[INFO] Tests run: " + totalTestCount + ", Failures: 0, Errors: 0, Skipped: " + totalDisabledCount; + } + } + + /** + * Writes example signature test output to the generated adoc folder. + * + * @param outputLocation the output file + * @throws IOException if the file cannot be written + */ + private static void writeSigOutput(final File outputLocation) throws IOException { + String output = + """ + [source, txt] + ---- + ****************************************************** + All package signatures passed. + Passed packages listed below: + $packages + ****************************************************** + ----""".replaceAll("\\$packages", getPackages()); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + writer.write(output.trim() + System.lineSeparator()); + } + } + + /** + * Formats each API package as a pair of static/reflection mode lines. + * + * @return formatted package block + */ + private static String getPackages() { + String output = ""; + for (String apiPackage : apiPackages) { + output += + """ + $package(static mode) + $package(reflection mode) + """.indent(8).replaceAll("\\$package", apiPackage); + } + return output; + } + + /** + * Writes the list of API packages to the generated adoc folder as an + * AsciiDoc nested bullet list, matching the format: + *
+     *   ** `jakarta.json.bind`
+     *   ** `jakarta.json.bind.adapter`
+     * 
+ * + * @param outputLocation the output file + * @throws IOException if the file cannot be written + */ + private static void writePackages(final File outputLocation) throws IOException { + StringBuilder output = new StringBuilder(); + for (String apiPackage : apiPackages) { + output.append("** `").append(apiPackage).append("`").append(System.lineSeparator()); + } + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + writer.write(output.toString().trim() + System.lineSeparator()); + } + } + + /** + * Writes disabled (challenged) test metadata to the generated adoc folder. + * + * @param testMetaData the test metadata previously collected + * @param outputLocation the output file + * @throws IOException if the file cannot be written + */ + private static void writeSuccessfulChallenges(final List testMetaData, final File outputLocation) throws IOException { + String output = + """ + |=== + |Class |Method |Link |Version + $disabledTests + |===""".replaceAll("\\$disabledTests", getDisabledTests(testMetaData)); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + writer.write(output.trim() + System.lineSeparator()); + } + } + + private static String getDisabledTests(final List testMetaData) { + List disabledTests = testMetaData.stream().filter(TestMetaData::isDisabled).toList(); + String output = ""; + for (TestMetaData disabledTest : disabledTests) { + output += + """ + + |%s |%s |%s |%s + """.formatted( + disabledTest.testClass().substring(disabledTest.testClass().lastIndexOf('.') + 1), + disabledTest.testName(), + disabledTest.challengeIssue(), + disabledTest.challengeVersion()); + } + return output; + } + + /** + * Writes test count totals to the generated adoc folder. + * All JSON-B TCK tests apply to every implementation, so only the total + * runnable count and skipped count are reported. + * + * @param testMetaData the test metadata previously collected + * @param outputLocation the output file + * @throws IOException if the file cannot be written + */ + private static void writeTestCounts(final List testMetaData, final File outputLocation) throws IOException { + long total = testMetaData.stream().count(); + long skipped = testMetaData.stream().filter(TestMetaData::isDisabled).count(); + long runnable = total - skipped; + + String output = + """ + |=== + |total |skipped + + |%d |%d + + |===""".formatted(runnable, skipped); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputLocation))) { + writer.write(output.trim() + System.lineSeparator()); + } + } + + // ------------------------------------------------------------------------- + // Debug + // ------------------------------------------------------------------------- + + /** + * Prints a message when debug mode is enabled. + * + * @param message the message to print + */ + private static void debug(final String message) { + if (debug) + System.out.println(message); + } + + // ------------------------------------------------------------------------- + // Data carrier + // ------------------------------------------------------------------------- + + /** + * Immutable data carrier for a single test method. + * + * @param testClass canonical name of the declaring test class + * @param testName name of the test method + * @param isDisabled {@code true} if the method also carries {@code @Disabled} + * @param challengeIssue the link parsed from the {@code @Disabled} reason, or empty + * @param challengeVersion the version parsed from the {@code @Disabled} reason, or empty + */ + public record TestMetaData(String testClass, String testName, + boolean isDisabled, String challengeIssue, String challengeVersion) { + + boolean isRunnable() { + return !isDisabled; + } + + public String debugString() { + return "TestMetaData [testName=" + testName + ", isDisabled=" + isDisabled + "]"; + } + + @Override + public String toString() { + return "TestMetaData [testName=" + testName + + ", isDisabled=" + isDisabled + ", challengeIssue=" + challengeIssue + + ", challengeVersion=" + challengeVersion + "]"; + } + } +} diff --git a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/basictypes/BasicJavaTypesMappingTest.java b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/basictypes/BasicJavaTypesMappingTest.java index b1f7b4e4..9d54d8c5 100644 --- a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/basictypes/BasicJavaTypesMappingTest.java +++ b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/basictypes/BasicJavaTypesMappingTest.java @@ -144,7 +144,7 @@ public void testIntegerMapping() { * with toString and parseLong methods */ @Test - @Disabled("See https://github.com/jakartaee/jsonb-api/issues/180") + @Disabled("link: https://github.com/jakartaee/jsonb-api/issues/180 since: 1.0.0") public void testLongMapping() { MappingTester longMappingTester = new MappingTester<>(LongContainer.class); longMappingTester.test(0L, "0"); diff --git a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/bignumbers/BigNumbersMappingTest.java b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/bignumbers/BigNumbersMappingTest.java index cc4cd530..2d8b8e76 100644 --- a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/bignumbers/BigNumbersMappingTest.java +++ b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/bignumbers/BigNumbersMappingTest.java @@ -50,7 +50,7 @@ public class BigNumbersMappingTest { * to JSON-B) */ @Test - @Disabled("See https://github.com/jakartaee/jsonb-api/issues/180") + @Disabled("link: https://github.com/jakartaee/jsonb-api/issues/180 since: 1.0.0") public void testBigNumberMarshalling() { String jsonString = jsonb.toJson(new Object() { @SuppressWarnings("unused") diff --git a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/collections/CollectionsMappingTest.java b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/collections/CollectionsMappingTest.java index f8c4cc0d..24a10f49 100644 --- a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/collections/CollectionsMappingTest.java +++ b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/collections/CollectionsMappingTest.java @@ -603,7 +603,7 @@ public void testPriorityQueue() { * an error when unmarshalling */ @Test - @Disabled("See: https://github.com/jakartaee/platform-tck/issues/103") + @Disabled("link: https://github.com/jakartaee/platform-tck/issues/103 since: 1.0.0") public void testEnumSet() { EnumSet instance = EnumSet.allOf(EnumSetContainer.Enum.class); String jsonString = jsonb.toJson(new EnumSetContainer() {{ @@ -627,7 +627,7 @@ public void testEnumSet() { * an error when unmarshalling */ @Test - @Disabled("See: https://github.com/jakartaee/platform-tck/issues/103") + @Disabled("link: https://github.com/jakartaee/platform-tck/issues/103 since: 1.0.0") public void testEnumMap() { EnumMap instance = new EnumMap(EnumSetContainer.Enum.class) {{ diff --git a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/dates/DatesMappingTest.java b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/dates/DatesMappingTest.java index d161baa3..0d744216 100644 --- a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/dates/DatesMappingTest.java +++ b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/dates/DatesMappingTest.java @@ -257,7 +257,7 @@ public void testCalendarWithTimeMapping() { * marshalled as and unmarshalled from ISO_DATE_TIME */ @Test - @Disabled("See: https://github.com/jakartaee/platform-tck/issues/102") + @Disabled("link: https://github.com/jakartaee/platform-tck/issues/102 since: 1.0.0") public void testGregorianCalendarWithTimeMapping() { GregorianCalendar calendar = GregorianCalendar.from( ZonedDateTime.of(LocalDateTime.of(1970, Month.FEBRUARY, 1, 1, 0, 0), diff --git a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/records/RecordsBasicTypeMappingTest.java b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/records/RecordsBasicTypeMappingTest.java index 7d542977..09072e2e 100644 --- a/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/records/RecordsBasicTypeMappingTest.java +++ b/tck/src/main/java/ee/jakarta/tck/json/bind/defaultmapping/records/RecordsBasicTypeMappingTest.java @@ -146,7 +146,7 @@ public void testIntegerMapping() { * with toString and parseLong methods */ @Test - @Disabled("See https://github.com/jakartaee/jsonb-api/issues/180") + @Disabled("link: https://github.com/jakartaee/jsonb-api/issues/180 since: 1.0.0") public void testLongMapping() { RecordMappingTester longRecordMappingTester = new RecordMappingTester<>(LongContainer.class); longRecordMappingTester.test(0L, "0");