[JAVA] [SPRING] [PKMST] [MICRONAUT] XML wireformat: Fix Jackson useWrapping=false, JAXB+Jackson namespaces (#18870)

* Fix XML annotations on model properties (JavaSpring)

* generate JAXB annotations for attributes and elements

* generate wrapper annotations (JAXB and Jackson)

* use XML config from items for annotations of containers

* Add test for Jackson XML wrapper correctness

* Add additional test cases to cover all xml applications in spec

Test now covers all use cases described in
- https://web.archive.org/web/20240424203304/https://swagger.io/docs/specification/data-models/representing-xml/
- https://spec.openapis.org/oas/v3.0.0#xml-arrays

* Fix basename used instead of xmlName when items.xmlName is unset

See last example in spec: https://spec.openapis.org/oas/v3.0.0#xml-arrays

* Harmonize spacing between Annotation attribute name and value

* Refactor and group JAXB vs. Jackson XML annotations, only generate latter if enabled

This is in line with the way the class annotations in `xmlAnnotations.mustache`
are rendered – which only renders the `@Jackson`… xml annotations if
additionalProperty jackson is true.

Also reorder annotation attributes in the following order:
- localName/name
- namespace (optional)
- isAttribute/useWrapping (optional)

* Explicitly render `useWrapping = true` to @JacksonXmlElementWrapper

This was slightly inspired by @jzrebiec via PR #5371.

Wrapping is the default since Jackson 2.1 – so explicitly rendering
this will:
- make generated model work out-of-the-box in Jackson 2.0 for instance
- ensure the models still work if the local `XmlWrapper` was
  configured with `useXmlWrapper(false)`

* Move xml test spec to java resources folder (not spring specific)

* Make test class name match class-under-test

This makes discovery & cross-navigation in IDE easier.

* Add complete xml annotations test for Java generators

* Fix Java PKMST generator not generating @JacksonXmlElementWrapper

* Fix Java microprofile generator missing @JacksonXmlRootElement

* Fix Java microprofile generator not using wrapper annotations and namespaces

* Fix Java Micronaut Client creating invalid (unclosed) @XmlAttribute annotations

* Fix Micronaut Client using wrong localName for @JacksonXmlElementWrapper

* Fix Micronaut client rendering @JacksonXmlProperty annotation twice

* Make Java Micronaut render @JacksonXmlElementWrapper(useWrapping=false) for non-wrapped elements

* Fix Jackson element using `xml.name` when it should be `items.xml.name`

Closes #5989
Closes #3223
Relates to #9371

* Fix JAXB element using `baseName` instead of `xmlName` when items.xmlName is unset

* Remove XML generation debug output from templates

* Remove redundant newline between XML class annotations and class

Brings the SpringCodegen in line with other Java Codegen's

* Remove redundant newline between XML setter annotations and setter

* Fix multiline JavaDoc block indentation and format

* Simplify / condense xml annotation template into single lines

May look a bit more complex, but cuts out a lot of repetitiveness.
Also reorders annotation attributes in the following order:
- localName/name
- namespace (optional)
- isAttribute/useWrapping (optional)

* Harmonize spacing between Annotation attribute name and value

* Remove unused jackson_annotations partial

Was not referenced anywhere in java-helidon resources folder

---------

Co-authored-by: Christian Schuster <christian@dnup.de>
This commit is contained in:
Philzen
2024-06-15 17:02:32 +02:00
committed by GitHub
parent 13facdaab5
commit 642b1a3a95
2726 changed files with 20424 additions and 20024 deletions

View File

@@ -47,10 +47,10 @@ public class Bird {
return this;
}
/**
/**
* Get size
* @return size
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_SIZE)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -72,10 +72,10 @@ public class Bird {
return this;
}
/**
/**
* Get color
* @return color
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_COLOR)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -47,10 +47,10 @@ public class Category {
return this;
}
/**
/**
* Get id
* @return id
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -72,10 +72,10 @@ public class Category {
return this;
}
/**
/**
* Get name
* @return name
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_NAME)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -57,10 +57,10 @@ public class DataQuery extends Query {
return this;
}
/**
/**
* test suffix
* @return suffix
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_SUFFIX)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -82,10 +82,10 @@ public class DataQuery extends Query {
return this;
}
/**
/**
* Some text containing white spaces
* @return text
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_TEXT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -107,10 +107,10 @@ public class DataQuery extends Query {
return this;
}
/**
/**
* A date
* @return date
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_DATE)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -124,10 +124,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayStringEnumRefDefault
* @return arrayStringEnumRefDefault
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ARRAY_STRING_ENUM_REF_DEFAULT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -157,10 +157,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayStringEnumDefault
* @return arrayStringEnumDefault
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ARRAY_STRING_ENUM_DEFAULT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -190,10 +190,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayStringDefault
* @return arrayStringDefault
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ARRAY_STRING_DEFAULT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -223,10 +223,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayIntegerDefault
* @return arrayIntegerDefault
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ARRAY_INTEGER_DEFAULT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -256,10 +256,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayString
* @return arrayString
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ARRAY_STRING)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -293,10 +293,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayStringNullable
* @return arrayStringNullable
**/
*/
@javax.annotation.Nullable
@JsonIgnore
@@ -338,10 +338,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get arrayStringExtensionNullable
* @return arrayStringExtensionNullable
**/
*/
@javax.annotation.Nullable
@JsonIgnore
@@ -371,10 +371,10 @@ public class DefaultValue {
return this;
}
/**
/**
* Get stringNullable
* @return stringNullable
**/
*/
@javax.annotation.Nullable
@JsonIgnore

View File

@@ -52,10 +52,10 @@ public class NumberPropertiesOnly {
return this;
}
/**
/**
* Get number
* @return number
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_NUMBER)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -77,10 +77,10 @@ public class NumberPropertiesOnly {
return this;
}
/**
/**
* Get _float
* @return _float
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_FLOAT)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -102,12 +102,12 @@ public class NumberPropertiesOnly {
return this;
}
/**
/**
* Get _double
* minimum: 0.8
* maximum: 50.2
* @return _double
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_DOUBLE)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -105,10 +105,10 @@ public class Pet {
return this;
}
/**
/**
* Get id
* @return id
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -130,10 +130,10 @@ public class Pet {
return this;
}
/**
/**
* Get name
* @return name
**/
*/
@javax.annotation.Nonnull
@JsonProperty(JSON_PROPERTY_NAME)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
@@ -155,10 +155,10 @@ public class Pet {
return this;
}
/**
/**
* Get category
* @return category
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_CATEGORY)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -188,10 +188,10 @@ public class Pet {
return this;
}
/**
/**
* Get photoUrls
* @return photoUrls
**/
*/
@javax.annotation.Nonnull
@JsonProperty(JSON_PROPERTY_PHOTO_URLS)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
@@ -221,10 +221,10 @@ public class Pet {
return this;
}
/**
/**
* Get tags
* @return tags
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_TAGS)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -246,10 +246,10 @@ public class Pet {
return this;
}
/**
/**
* pet status in the store
* @return status
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_STATUS)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -87,10 +87,10 @@ public class Query {
return this;
}
/**
/**
* Query
* @return id
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -120,10 +120,10 @@ public class Query {
return this;
}
/**
/**
* Get outcomes
* @return outcomes
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_OUTCOMES)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -47,10 +47,10 @@ public class Tag {
return this;
}
/**
/**
* Get id
* @return id
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -72,10 +72,10 @@ public class Tag {
return this;
}
/**
/**
* Get name
* @return name
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_NAME)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -44,10 +44,10 @@ public class TestFormObjectMultipartRequestMarker {
return this;
}
/**
/**
* Get name
* @return name
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_NAME)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -56,10 +56,10 @@ public class TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
return this;
}
/**
/**
* Get size
* @return size
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_SIZE)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -81,10 +81,10 @@ public class TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
return this;
}
/**
/**
* Get color
* @return color
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_COLOR)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -106,10 +106,10 @@ public class TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
return this;
}
/**
/**
* Get id
* @return id
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
@@ -131,10 +131,10 @@ public class TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter
return this;
}
/**
/**
* Get name
* @return name
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_NAME)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

View File

@@ -55,10 +55,10 @@ public class TestQueryStyleFormExplodeTrueArrayStringQueryObjectParameter {
return this;
}
/**
/**
* Get values
* @return values
**/
*/
@javax.annotation.Nullable
@JsonProperty(JSON_PROPERTY_VALUES)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)