This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 7410ac4f41 TODO-238: Final maintainer-decision pass; close Codebase
Quality Registry umbrella
7410ac4f41 is described below
commit 7410ac4f415981294553164e2939caefd3fe0a8e
Author: James Bognar <[email protected]>
AuthorDate: Thu Jul 23 16:14:17 2026 -0400
TODO-238: Final maintainer-decision pass; close Codebase Quality Registry
umbrella
Removals (10.0.0 breaking-change window):
- Schema.exclusiveMaximum()/exclusiveMinimum() boolean forms (callers
migrated to emax()/emin())
- HttpPartSchema.T_OBJECT_{CSV,PIPES,SSV,TSV} constants + their
sole-purpose builders
- XmlSerializer.DEFAULT_XS_NAMESPACE (protected, unused)
Simplifications:
- Collapse dead uri2-fallback branch in
RdfSerializerSession/RdfStreamSerializerSession.getUri(...)
- Simplify dead char-class sub-terms in ConfigMapEntry negation
Kept clusters recorded as registry exceptions (BUG-15, DEAD-03).
Full reactor suite green: 135,326 tests, 0 failures.
Co-authored-by: Cursor <[email protected]>
---
.../java/org/apache/juneau/commons/Schema.java | 98 ++--------------------
.../juneau/config/internal/ConfigMapEntry.java | 2 +-
.../juneau/marshall/jena/RdfSerializerSession.java | 17 ++--
.../marshall/jena/RdfStreamSerializerSession.java | 17 ++--
.../apache/juneau/marshall/SchemaAnnotation.java | 45 +---------
.../juneau/marshall/httppart/HttpPartSchema.java | 53 +-----------
.../apache/juneau/marshall/xml/XmlSerializer.java | 1 -
.../jsonschema/JsonSchemaGenerator_Test.java | 25 ++----
.../marshall/jsonschema/SchemaAnnotation_Test.java | 54 ++----------
.../apache/juneau/http/AnnotationUtils_Test.java | 4 +-
.../httppart/HttpPartSchema_Body_Test.java | 10 +--
.../swagger/BasicSwaggerProviderSession.java | 7 +-
12 files changed, 46 insertions(+), 287 deletions(-)
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/Schema.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/Schema.java
index 88f98683b8..74975d9a6e 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/Schema.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/Schema.java
@@ -728,14 +728,16 @@ public @interface Schema {
String[] e() default {};
/**
- * Synonym for {@link #exclusiveMaximum()}.
+ * Short-form boolean flag mirroring the legacy Swagger 2.0/OpenAPI
3.0/JSON Schema Draft 04
+ * <mk>exclusiveMaximum</mk> semantics (superseded by {@link
#exclusiveMaximumValue()} for Draft 2020-12).
*
* @return The annotation value.
*/
boolean emax() default false;
/**
- * Synonym for {@link #exclusiveMinimum()}.
+ * Short-form boolean flag mirroring the legacy Swagger 2.0/OpenAPI
3.0/JSON Schema Draft 04
+ * <mk>exclusiveMinimum</mk> semantics (superseded by {@link
#exclusiveMinimumValue()} for Draft 2020-12).
*
* @return The annotation value.
*/
@@ -776,47 +778,6 @@ public @interface Schema {
*/
String[] examples() default {};
- /**
- * <mk>exclusiveMaximum</mk> field of the <a class="doclink"
href="https://swagger.io/specification/v2#schemaObject">Swagger Schema
Object</a>.
- *
- * <p>
- * Defines whether the maximum is matched exclusively.
- *
- * <p>
- * If validation fails during serialization or parsing, the part
serializer/parser will throw a <c>SchemaValidationException</c>.
- * <br>On the client-side, this gets converted to a
<c>RestCallException</c> which is thrown before the connection is made.
- * <br>On the server-side, this gets converted to a <c>BadRequest</c>
(400).
- *
- * <p>
- * Only allowed for the following types: <js>"integer"</js>,
<js>"number"</js>.
- * <br>If <jk>true</jk>, must be accompanied with <c>maximum</c>.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * <li class='note'>
- * <b>Deprecated in JSON Schema Draft 2020-12:</b> This
boolean format is from Swagger 2.0/OpenAPI 3.0 and JSON Schema Draft 04.
- * Consider using {@link #exclusiveMaximumValue()} for
Draft 2020-12 compliance, which uses a numeric value instead.
- * For backward compatibility, if {@link
#exclusiveMaximumValue()} is set, it takes precedence over this property.
- * </ul>
- *
- * <h5 class='section'>Used for:</h5>
- * <ul class='spaced-list'>
- * <li>
- * Server-side schema-based parsing validation.
- * <li>
- * Server-side generated Swagger documentation.
- * <li>
- * Client-side schema-based serializing validation.
- * </ul>
- *
- * @return The annotation value.
- * @deprecated Use {@link #exclusiveMaximumValue()} for JSON Schema
Draft 2020-12 compliance.
- */
- @Deprecated(since = "9.2.0", forRemoval = true)
- @SuppressWarnings({
- "java:S1133" // Intentional deprecation retained for backward
compatibility until the documented removal; the reminder is not actionable now.
- })
- boolean exclusiveMaximum() default false;
-
/**
* <mk>exclusiveMaximum</mk> field of the JSON Schema (Draft 2020-12
numeric value).
*
@@ -825,9 +786,8 @@ public @interface Schema {
* The instance is valid if it is strictly less than (not equal to) the
value specified by this keyword.
*
* <p>
- * This is a JSON Schema Draft 2020-12 property that replaces the
boolean {@link #exclusiveMaximum()}.
- * For backward compatibility, both properties are supported.
- * If this property is specified, it takes precedence over the boolean
version.
+ * This is a JSON Schema Draft 2020-12 property. The legacy Swagger
2.0/OpenAPI 3.0/JSON Schema Draft 04
+ * boolean form was removed in 10.0.0; use this numeric form instead.
*
* <h5 class='section'>Examples:</h5>
* <p class='bjava'>
@@ -857,47 +817,6 @@ public @interface Schema {
*/
String exclusiveMaximumValue() default "";
- /**
- * <mk>exclusiveMinimum</mk> field of the <a class="doclink"
href="https://swagger.io/specification/v2#schemaObject">Swagger Schema
Object</a>.
- *
- * <p>
- * Defines whether the minimum is matched exclusively.
- *
- * <p>
- * If validation fails during serialization or parsing, the part
serializer/parser will throw a <c>SchemaValidationException</c>.
- * <br>On the client-side, this gets converted to a
<c>RestCallException</c> which is thrown before the connection is made.
- * <br>On the server-side, this gets converted to a <c>BadRequest</c>
(400).
- *
- * <p>
- * Only allowed for the following types: <js>"integer"</js>,
<js>"number"</js>.
- * <br>If <jk>true</jk>, must be accompanied with <c>minimum</c>.
- *
- * <h5 class='section'>Notes:</h5><ul>
- * <li class='note'>
- * <b>Deprecated in JSON Schema Draft 2020-12:</b> This
boolean format is from Swagger 2.0/OpenAPI 3.0 and JSON Schema Draft 04.
- * Consider using {@link #exclusiveMinimumValue()} for
Draft 2020-12 compliance, which uses a numeric value instead.
- * For backward compatibility, if {@link
#exclusiveMinimumValue()} is set, it takes precedence over this property.
- * </ul>
- *
- * <h5 class='section'>Used for:</h5>
- * <ul class='spaced-list'>
- * <li>
- * Server-side schema-based parsing validation.
- * <li>
- * Server-side generated Swagger documentation.
- * <li>
- * Client-side schema-based serializing validation.
- * </ul>
- *
- * @return The annotation value.
- * @deprecated Use {@link #exclusiveMinimumValue()} for JSON Schema
Draft 2020-12 compliance.
- */
- @Deprecated(since = "9.2.0", forRemoval = true)
- @SuppressWarnings({
- "java:S1133" // Intentional deprecation retained for backward
compatibility until the documented removal; the reminder is not actionable now.
- })
- boolean exclusiveMinimum() default false;
-
/**
* <mk>exclusiveMinimum</mk> field of the JSON Schema (Draft 2020-12
numeric value).
*
@@ -906,9 +825,8 @@ public @interface Schema {
* The instance is valid if it is strictly greater than (not equal to)
the value specified by this keyword.
*
* <p>
- * This is a JSON Schema Draft 2020-12 property that replaces the
boolean {@link #exclusiveMinimum()}.
- * For backward compatibility, both properties are supported.
- * If this property is specified, it takes precedence over the boolean
version.
+ * This is a JSON Schema Draft 2020-12 property. The legacy Swagger
2.0/OpenAPI 3.0/JSON Schema Draft 04
+ * boolean form was removed in 10.0.0; use this numeric form instead.
*
* <h5 class='section'>Examples:</h5>
* <p class='bjava'>
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
index bc9b5aff5c..2f38305e0f 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
@@ -160,7 +160,7 @@ public record ConfigMapEntry(String rawLine, String key,
String value, String co
if (c == '\n')
w.append('\n').append('\t');
else if (c != '\r') { // HTT - '\r' in value
requires OS-level carriage return injection
- if (REPLACE_CHARS.contains(c) ||
(Character.isISOControl(c) && ! (c == '\n' || c == '\r' || c == '\t'))) { //
HTT - some branch combinations (e.g. '\r' in isISOControl) are unreachable due
to the outer '\r' check
+ if (REPLACE_CHARS.contains(c) ||
(Character.isISOControl(c) && c != '\t')) { // c is already known to be neither
'\n' nor '\r' here
w.append(unicodeSequence(c));
} else {
w.append(c);
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfSerializerSession.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfSerializerSession.java
index 57cc78114d..4b48753696 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfSerializerSession.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfSerializerSession.java
@@ -185,15 +185,10 @@ public class RdfSerializerSession extends
WriterSerializerSession {
return XmlUtils.escapeText(s);
}
- private String getUri(Object uri, Object uri2) {
- String s = null;
- if (nn(uri))
- s = uri.toString();
- if (ie(s) && nn(uri2)) // HTT - all callers pass uri2=null;
uri2 fallback is dead
- s = uri2.toString();
- if (s == null)
+ private String getUri(Object uri) {
+ if (! nn(uri))
return null;
- return getUriResolver().resolve(s);
+ return getUriResolver().resolve(uri.toString());
}
@SuppressWarnings({
@@ -262,7 +257,7 @@ public class RdfSerializerSession extends
WriterSerializerSession {
} else if (sType.isUri() || isURI) {
// RDF URI gate must come before
isBean/isMap/isCharSequence: @Uri-annotated values (where sType could be String
or a bean) need to route through the Resource emission path. RDF URIs must be
absolute to be valid.
- var uri = getUri(o, null);
+ var uri = getUri(o);
if (isAbsoluteUri(uri))
n = m.createResource(uri);
else
@@ -274,7 +269,7 @@ public class RdfSerializerSession extends
WriterSerializerSession {
RdfBeanMeta rbm = getRdfBeanMeta(bm.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(bm, null);
- String uri2 = getUri(uri, null);
+ String uri2 = getUri(uri);
n = m.createResource(uri2);
writeBeanMap(bm, (Resource)n, typeName);
@@ -284,7 +279,7 @@ public class RdfSerializerSession extends
WriterSerializerSession {
var rbm = getRdfBeanMeta(o2.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(o2,
null);
- var uri2 = getUri(uri, null);
+ var uri2 = getUri(uri);
n = m.createResource(uri2);
writeBeanMap(o2, (Resource)n, typeName);
} else {
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfStreamSerializerSession.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfStreamSerializerSession.java
index bb3e269cc1..ef807a0cdc 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfStreamSerializerSession.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/marshall/jena/RdfStreamSerializerSession.java
@@ -261,15 +261,10 @@ public class RdfStreamSerializerSession extends
OutputStreamSerializerSession {
return XmlUtils.escapeText(toString(o));
}
- private String getUri(Object uri, Object uri2) {
- String s = null;
- if (nn(uri))
- s = uri.toString();
- if (ie(s) && nn(uri2))
- s = uri2.toString();
- if (s == null)
+ private String getUri(Object uri) {
+ if (! nn(uri))
return null;
- return getUriResolver().resolve(s);
+ return getUriResolver().resolve(uri.toString());
}
@SuppressWarnings({
@@ -321,7 +316,7 @@ public class RdfStreamSerializerSession extends
OutputStreamSerializerSession {
}
} else if (sType.isUri() || isURI) {
// RDF URI gate must come before
isBean/isMap/isCharSequence: @Uri-annotated values need Resource emission, not
literal text.
- var uri = getUri(o, null);
+ var uri = getUri(o);
if (isAbsoluteUri(uri))
n = m.createResource(uri);
else
@@ -332,7 +327,7 @@ public class RdfStreamSerializerSession extends
OutputStreamSerializerSession {
var rbm = ctx.getRdfBeanMeta(bm.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(bm, null);
- var uri2 = getUri(uri, null);
+ var uri2 = getUri(uri);
n = m.createResource(uri2);
writeBeanMap(bm, (Resource)n, typeName);
} else if (sType.isMap() || (nn(wType) && wType.isMap())) {
@@ -341,7 +336,7 @@ public class RdfStreamSerializerSession extends
OutputStreamSerializerSession {
var rbm = ctx.getRdfBeanMeta(o2.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(o2,
null);
- var uri2 = getUri(uri, null);
+ var uri2 = getUri(uri);
n = m.createResource(uri2);
writeBeanMap(o2, (Resource)n, typeName);
} else {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/SchemaAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/SchemaAnnotation.java
index f4c99f304f..fb1fe79f27 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/SchemaAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/SchemaAnnotation.java
@@ -106,8 +106,6 @@ public class SchemaAnnotation {
private boolean allowEmptyValue;
private boolean emax;
private boolean emin;
- private boolean exclusiveMaximum;
- private boolean exclusiveMinimum;
private boolean ignore;
private boolean r;
private boolean readOnly;
@@ -531,17 +529,6 @@ public class SchemaAnnotation {
return this;
}
- /**
- * Sets the {@link Schema#exclusiveMaximum} property on this
annotation.
- *
- * @param value The new value for this property.
- * @return This object.
- */
- public Builder exclusiveMaximum(boolean value) {
- exclusiveMaximum = value;
- return this;
- }
-
/**
* Sets the {@link Schema#exclusiveMaximumValue} property on
this annotation.
*
@@ -553,17 +540,6 @@ public class SchemaAnnotation {
return this;
}
- /**
- * Sets the {@link Schema#exclusiveMinimum} property on this
annotation.
- *
- * @param value The new value for this property.
- * @return This object.
- */
- public Builder exclusiveMinimum(boolean value) {
- exclusiveMinimum = value;
- return this;
- }
-
/**
* Sets the {@link Schema#exclusiveMinimumValue} property on
this annotation.
*
@@ -1054,9 +1030,7 @@ public class SchemaAnnotation {
private final String[] description;
private final boolean aev;
private final boolean allowEmptyValue;
- private final boolean exclusiveMaximum;
private final boolean emax;
- private final boolean exclusiveMinimum;
private final boolean emin;
private final boolean uniqueItems;
private final boolean ui;
@@ -1144,8 +1118,6 @@ public class SchemaAnnotation {
e = cp(b.e);
emax = b.emax;
emin = b.emin;
- exclusiveMaximum = b.exclusiveMaximum;
- exclusiveMinimum = b.exclusiveMinimum;
externalDocs = b.externalDocs;
f = b.f;
format = b.format;
@@ -1340,21 +1312,11 @@ public class SchemaAnnotation {
return examples;
}
- @Override /* Overridden from Schema */
- public boolean exclusiveMaximum() {
- return exclusiveMaximum;
- }
-
@Override /* Overridden from Schema */
public String exclusiveMaximumValue() {
return exclusiveMaximumValue;
}
- @Override /* Overridden from Schema */
- public boolean exclusiveMinimum() {
- return exclusiveMinimum;
- }
-
@Override /* Overridden from Schema */
public String exclusiveMinimumValue() {
return exclusiveMinimumValue;
@@ -1590,9 +1552,6 @@ public class SchemaAnnotation {
* @return The schema converted to a map, or an empty map if the
annotation was null.
* @throws ParseException Malformed input encountered.
*/
- @SuppressWarnings({
- "removal" // Handles deprecated boolean-style
exclusiveMaximum/exclusiveMinimum for backward compatibility
- })
public static JsonMap asMap(Schema a) throws ParseException {
if (a == null)
return JsonMap.EMPTY_MAP;
@@ -1609,7 +1568,7 @@ public class SchemaAnnotation {
String exclusiveMaximumValue;
if (ne.test(a.exclusiveMaximumValue())) {
exclusiveMaximumValue = a.exclusiveMaximumValue();
- } else if (a.exclusiveMaximum() || a.emax()) {
+ } else if (a.emax()) {
exclusiveMaximumValue = "true";
} else {
exclusiveMaximumValue = null;
@@ -1619,7 +1578,7 @@ public class SchemaAnnotation {
String exclusiveMinimumValue;
if (ne.test(a.exclusiveMinimumValue())) {
exclusiveMinimumValue = a.exclusiveMinimumValue();
- } else if (a.exclusiveMinimum() || a.emin()) {
+ } else if (a.emin()) {
exclusiveMinimumValue = "true";
} else {
exclusiveMinimumValue = null;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/httppart/HttpPartSchema.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/httppart/HttpPartSchema.java
index e1a068b2ed..a8ea710344 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/httppart/HttpPartSchema.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/httppart/HttpPartSchema.java
@@ -2754,7 +2754,6 @@ public class HttpPartSchema {
//
-----------------------------------------------------------------------------------------------------------------
@SuppressWarnings({
- "removal", // Handles deprecated boolean-style
exclusiveMaximum/exclusiveMinimum for backward compatibility
"java:S3776" // Maps every @Schema attribute (plus its
short-form alias) onto the builder; the flat attribute-by-attribute copy is
behavior-preserving and clearer as one method than split across helpers.
})
Builder apply(Schema a) {
@@ -2767,7 +2766,7 @@ public class HttpPartSchema {
String exMaxVal = a.exclusiveMaximumValue();
if (ine(exMaxVal)) {
exclusiveMaximumValue(toNumber(exMaxVal));
- } else if (a.exclusiveMaximum() || a.emax()) {
+ } else if (a.emax()) {
exclusiveMaximum(true);
}
@@ -2775,7 +2774,7 @@ public class HttpPartSchema {
String exMinVal = a.exclusiveMinimumValue();
if (ine(exMinVal)) {
exclusiveMinimumValue(toNumber(exMinVal));
- } else if (a.exclusiveMinimum() || a.emin()) {
+ } else if (a.emin()) {
exclusiveMinimum(true);
}
@@ -3047,18 +3046,6 @@ public class HttpPartSchema {
/** Object type */
public static final HttpPartSchema T_OBJECT =
HttpPartSchema.tObject().build();
- /** Comma-delimited object type */
- public static final HttpPartSchema T_OBJECT_CSV =
HttpPartSchema.tObjectCsv().build();
-
- /** Pipe-delimited object type */
- public static final HttpPartSchema T_OBJECT_PIPES =
HttpPartSchema.tObjectPipes().build();
-
- /** Space-delimited object type */
- public static final HttpPartSchema T_OBJECT_SSV =
HttpPartSchema.tObjectSsv().build();
-
- /** Tab-delimited object type */
- public static final HttpPartSchema T_OBJECT_TSV =
HttpPartSchema.tObjectTsv().build();
-
/** UON-formated object type */
public static final HttpPartSchema T_OBJECT_UON =
HttpPartSchema.tObjectUon().build();
@@ -3477,42 +3464,6 @@ public class HttpPartSchema {
return create().tObject();
}
- /**
- * Shortcut for
<c><jsm>create</jsm>().type(HttpPartDataType.<jsf>OBJECT</jsf>).collectionFormat(HttpPartCollectionFormat.<jsf>CSV</jsf>)</c>.
- *
- * @return A new builder for this object.
- */
- public static Builder tObjectCsv() {
- return create().tObject().cfCsv();
- }
-
- /**
- * Shortcut for
<c><jsm>create</jsm>().type(HttpPartDataType.<jsf>OBJECT</jsf>).collectionFormat(HttpPartCollectionFormat.<jsf>PIPES</jsf>)</c>.
- *
- * @return A new builder for this object.
- */
- public static Builder tObjectPipes() {
- return create().tObject().cfPipes();
- }
-
- /**
- * Shortcut for
<c><jsm>create</jsm>().type(HttpPartDataType.<jsf>OBJECT</jsf>).collectionFormat(HttpPartCollectionFormat.<jsf>SSV</jsf>)</c>.
- *
- * @return A new builder for this object.
- */
- public static Builder tObjectSsv() {
- return create().tObject().cfSsv();
- }
-
- /**
- * Shortcut for
<c><jsm>create</jsm>().type(HttpPartDataType.<jsf>OBJECT</jsf>).collectionFormat(HttpPartCollectionFormat.<jsf>TSV</jsf>)</c>.
- *
- * @return A new builder for this object.
- */
- public static Builder tObjectTsv() {
- return create().tObject().cfTsv();
- }
-
/**
* Shortcut for
<c><jsm>create</jsm>().type(HttpPartDataType.<jsf>OBJECT</jsf>).collectionFormat(HttpPartCollectionFormat.<jsf>UON</jsf>)</c>.
*
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/xml/XmlSerializer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/xml/XmlSerializer.java
index fad5f1c2ad..8f4f35492e 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/xml/XmlSerializer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/xml/XmlSerializer.java
@@ -604,7 +604,6 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider,
public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new
NsSqReadable(create());
protected static final Namespace DEFAULT_JUNEAU_NAMESPACE =
Namespace.of("juneau", "http://www.apache.org/2013/Juneau");
- protected static final Namespace DEFAULT_XS_NAMESPACE =
Namespace.of("xs", "http://www.w3.org/2001/XMLSchema");
/**
* Creates a new builder for this object.
diff --git
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/JsonSchemaGenerator_Test.java
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/JsonSchemaGenerator_Test.java
index e6ab4640cb..6df96592c6 100755
---
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/JsonSchemaGenerator_Test.java
+++
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/JsonSchemaGenerator_Test.java
@@ -35,7 +35,6 @@ import org.junit.jupiter.api.*;
@SuppressWarnings({
"serial", // Serialization not relevant for test beans
- "removal", // Tests precedence of new numeric style over deprecated
boolean style
"unused" // Unused parameters/variables kept for consistent method
signatures across test utilities.
})
class JsonSchemaGenerator_Test extends TestBase {
@@ -1501,33 +1500,19 @@ class JsonSchemaGenerator_Test extends TestBase {
}
//====================================================================================================
- // Backward compatibility: Old boolean exclusiveMaximum/exclusiveMinimum
+ // Draft 2020-12 numeric exclusiveMaximum/exclusiveMinimum (the legacy
boolean form was removed in 10.0.0)
//====================================================================================================
- @Test void k01_backwardCompatibility_exclusiveMaxMin_boolean() throws
Exception {
+ @Test void k02_exclusiveMaxMinValue() throws Exception {
var s = JsonSchemaGenerator.DEFAULT.getSession();
- var schema = s.getSchema(OldStyleExclusiveBean.class);
- assertBean(schema,
"exclusiveMaximum,exclusiveMinimum,maximum,minimum", "true,true,100,0");
- }
-
- @Schema(type="integer", exclusiveMaximum=true, exclusiveMinimum=true,
maximum="100", minimum="0")
- public static class OldStyleExclusiveBean {
- public int value;
- }
-
- @Test void k02_backwardCompatibility_newStyleTakesPrecedence() throws
Exception {
- var s = JsonSchemaGenerator.DEFAULT.getSession();
- // New numeric style should take precedence in asMap() when
both are set
- var schema = s.getSchema(MixedStyleExclusiveBean.class);
+ var schema = s.getSchema(NumericExclusiveBean.class);
assertBean(schema, "exclusiveMaximum,exclusiveMinimum",
"100,0");
}
@Schema(type="integer",
exclusiveMaximumValue="100",
- exclusiveMinimumValue="0",
- exclusiveMaximum=false, // This should be ignored in favor of
numeric values
- exclusiveMinimum=false)
- public static class MixedStyleExclusiveBean {
+ exclusiveMinimumValue="0")
+ public static class NumericExclusiveBean {
public int value;
}
diff --git
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/SchemaAnnotation_Test.java
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/SchemaAnnotation_Test.java
index eb0e4b00d2..48ca0e2cb2 100644
---
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/SchemaAnnotation_Test.java
+++
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/marshall/jsonschema/SchemaAnnotation_Test.java
@@ -26,8 +26,7 @@ import org.apache.juneau.marshall.*;
import org.junit.jupiter.api.*;
@SuppressWarnings({
- "java:S1186", // Empty test method intentional for framework testing
- "removal" // Tests deprecated API for backward compatibility
+ "java:S1186" // Empty test method intentional for framework testing
})
class SchemaAnnotation_Test extends TestBase {
@@ -49,8 +48,6 @@ class SchemaAnnotation_Test extends TestBase {
.e("l")
.emax(true)
.emin(true)
- .exclusiveMaximum(true)
- .exclusiveMinimum(true)
.externalDocs(ExternalDocsAnnotation.DEFAULT)
.f("m")
.format("n")
@@ -104,8 +101,6 @@ class SchemaAnnotation_Test extends TestBase {
.e("l")
.emax(true)
.emin(true)
- .exclusiveMaximum(true)
- .exclusiveMinimum(true)
.externalDocs(ExternalDocsAnnotation.DEFAULT)
.f("m")
.format("n")
@@ -147,8 +142,8 @@ class SchemaAnnotation_Test extends TestBase {
@Test void a01_basic() {
assertBean(a1,
-
"$ref,default_,enum_,aev,allOf,allowEmptyValue,cf,collectionFormat,d,description,df,discriminator,e,emax,emin,exclusiveMaximum,exclusiveMinimum,externalDocs{description,url},f,format,ignore,items{$ref,default_,enum_,cf,collectionFormat,description,df,e,emax,emin,exclusiveMaximum,exclusiveMinimum,f,format,items{$ref,default_,enum_,cf,collectionFormat,description,df,e,emax,emin,exclusiveMaximum,exclusiveMinimum,f,format,max,maxItems,maxLength,maxi,maximum,maxl,min,minItems,minLength,min
[...]
-
"c,[a],[b],false,[e],false,f,g,[h],[i],[j],k,[l],true,true,true,true,{[],},m,n,true,{,[],[],,,[],[],[],false,false,false,false,,,{,[],[],,,[],[],[],false,false,false,false,,,,-1,-1,-1,,-1,,-1,-1,-1,,-1,,,,,,,false,false},,-1,-1,-1,,-1,,-1,-1,-1,,-1,,,,,,,false,false},o,2,4,6,1,p,3,5,q,8,10,12,7,r,9,11,s,t,v,w,true,true,true,true,false,false,ee,dd,z,aa,bb,true,true,[cc]");
+
"$ref,default_,enum_,aev,allOf,allowEmptyValue,cf,collectionFormat,d,description,df,discriminator,e,emax,emin,externalDocs{description,url},f,format,ignore,items{$ref,default_,enum_,cf,collectionFormat,description,df,e,emax,emin,exclusiveMaximum,exclusiveMinimum,f,format,items{$ref,default_,enum_,cf,collectionFormat,description,df,e,emax,emin,exclusiveMaximum,exclusiveMinimum,f,format,max,maxItems,maxLength,maxi,maximum,maxl,min,minItems,minLength,mini,minimum,minl,mo,multipleOf,p,pat
[...]
+
"c,[a],[b],false,[e],false,f,g,[h],[i],[j],k,[l],true,true,{[],},m,n,true,{,[],[],,,[],[],[],false,false,false,false,,,{,[],[],,,[],[],[],false,false,false,false,,,,-1,-1,-1,,-1,,-1,-1,-1,,-1,,,,,,,false,false},,-1,-1,-1,,-1,,-1,-1,-1,,-1,,,,,,,false,false},o,2,4,6,1,p,3,5,q,8,10,12,7,r,9,11,s,t,v,w,true,true,true,true,false,false,ee,dd,z,aa,bb,true,true,[cc]");
}
@Test void a02_testEquivalency() {
@@ -189,8 +184,6 @@ class SchemaAnnotation_Test extends TestBase {
e="l",
emax=true,
emin=true,
- exclusiveMaximum=true,
- exclusiveMinimum=true,
externalDocs=@ExternalDocs,
f="m",
format="n",
@@ -246,8 +239,6 @@ class SchemaAnnotation_Test extends TestBase {
e="l",
emax=true,
emin=true,
- exclusiveMaximum=true,
- exclusiveMinimum=true,
externalDocs=@ExternalDocs,
f="m",
format="n",
@@ -412,37 +403,16 @@ class SchemaAnnotation_Test extends TestBase {
}
//------------------------------------------------------------------------------------------------------------------
- // Backward compatibility: exclusiveMaximum/exclusiveMinimum fallback
+ // Draft 2020-12 numeric exclusiveMaximum/exclusiveMinimum
//------------------------------------------------------------------------------------------------------------------
- @Test void f01_backwardCompatibility_exclusiveMaxMin() {
- // Test that old boolean exclusiveMaximum/exclusiveMinimum
still work
- Schema oldStyle = SchemaAnnotation.create()
- .exclusiveMaximum(true)
- .exclusiveMinimum(true)
- .maximum("100")
- .minimum("0")
- .build();
-
- assertBean(oldStyle,
"exclusiveMaximum,exclusiveMinimum,maximum,minimum", "true,true,100,0");
-
- // Test that new numeric style takes precedence
+ @Test void f01_exclusiveMaxMinValue() {
Schema newStyle = SchemaAnnotation.create()
.exclusiveMaximumValue("100")
.exclusiveMinimumValue("0")
.build();
assertBean(newStyle,
"exclusiveMaximumValue,exclusiveMinimumValue", "100,0");
-
- // Test that new style takes precedence when both are set
- Schema mixed = SchemaAnnotation.create()
- .exclusiveMaximum(false)
- .exclusiveMinimum(false)
- .exclusiveMaximumValue("100")
- .exclusiveMinimumValue("0")
- .build();
-
- assertBean(mixed,
"exclusiveMaximum,exclusiveMinimum,exclusiveMaximumValue,exclusiveMinimumValue",
"false,false,100,0");
}
@Test void g01_summary_asMap_emptyAnnotationOmitsKey() throws Exception
{
@@ -508,24 +478,14 @@ class SchemaAnnotation_Test extends TestBase {
assertEquals("true", SchemaAnnotation.asMap(a).get("ignore"));
}
- @Test void i03_asMap_exclusiveMaximumBooleanFallback() throws Exception
{
- // Forces the `else if (a.exclusiveMaximum() || a.emax())`
short-circuit branch. // NOSONAR
- var a =
SchemaAnnotation.create().exclusiveMaximum(true).build();
- assertEquals("true",
SchemaAnnotation.asMap(a).get("exclusiveMaximum"));
- }
-
@Test void i04_asMap_exclusiveMaximumEmaxAlias() throws Exception {
- // Triggers the second operand of `exclusiveMaximum() ||
emax()`.
+ // Forces the `else if (a.emax())` short-circuit branch.
var a = SchemaAnnotation.create().emax(true).build();
assertEquals("true",
SchemaAnnotation.asMap(a).get("exclusiveMaximum"));
}
- @Test void i05_asMap_exclusiveMinimumBooleanFallback() throws Exception
{
- var a =
SchemaAnnotation.create().exclusiveMinimum(true).build();
- assertEquals("true",
SchemaAnnotation.asMap(a).get("exclusiveMinimum"));
- }
-
@Test void i06_asMap_exclusiveMinimumEminAlias() throws Exception {
+ // Forces the `else if (a.emin())` short-circuit branch.
var a = SchemaAnnotation.create().emin(true).build();
assertEquals("true",
SchemaAnnotation.asMap(a).get("exclusiveMinimum"));
}
diff --git
a/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/http/AnnotationUtils_Test.java
b/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/http/AnnotationUtils_Test.java
index 18dc254067..328c8c4117 100644
---
a/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/http/AnnotationUtils_Test.java
+++
b/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/http/AnnotationUtils_Test.java
@@ -138,8 +138,8 @@ class AnnotationUtils_Test extends TestBase {
assertFalse(SchemaAnnotation.empty(schema().e(a("foo")).build()));
assertFalse(SchemaAnnotation.empty(schema().emax(true).build()));
assertFalse(SchemaAnnotation.empty(schema().emin(true).build()));
-
assertFalse(SchemaAnnotation.empty(schema().exclusiveMaximum(true).build()));
-
assertFalse(SchemaAnnotation.empty(schema().exclusiveMinimum(true).build()));
+
assertFalse(SchemaAnnotation.empty(schema().exclusiveMaximumValue("foo").build()));
+
assertFalse(SchemaAnnotation.empty(schema().exclusiveMinimumValue("foo").build()));
assertFalse(SchemaAnnotation.empty(schema().externalDocs(externalDocs().url("foo").build()).build()));
assertFalse(SchemaAnnotation.empty(schema().f("foo").build()));
assertFalse(SchemaAnnotation.empty(schema().format("foo").build()));
diff --git
a/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/marshall/httppart/HttpPartSchema_Body_Test.java
b/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/marshall/httppart/HttpPartSchema_Body_Test.java
index ccc926ae5f..7e87becdde 100644
---
a/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/marshall/httppart/HttpPartSchema_Body_Test.java
+++
b/juneau-rest/juneau-rest-common/src/test/java/org/apache/juneau/marshall/httppart/HttpPartSchema_Body_Test.java
@@ -31,7 +31,6 @@ import org.junit.jupiter.api.*;
@SuppressWarnings({
"java:S5961", // High assertion count acceptable in comprehensive tests
"java:S1186", // Empty method body intentional for callback testing
- "removal" // Tests deprecated boolean-style
exclusiveMaximum/exclusiveMinimum for backward compatibility
})
class HttpPartSchema_Body_Test extends TestBase {
@@ -724,11 +723,12 @@ class HttpPartSchema_Body_Test extends TestBase {
}
//-----------------------------------------------------------------------------------------------------------------
- // Backward compatibility: Old boolean exclusiveMaximum/exclusiveMinimum
+ // Backward compatibility: the `emax`/`emin` boolean aliases (the
long-named `exclusiveMaximum`/`exclusiveMinimum`
+ // boolean attributes were removed in 10.0.0; use the numeric
`exclusiveMaximumValue`/`exclusiveMinimumValue`)
//-----------------------------------------------------------------------------------------------------------------
@Content
- @Schema(t="integer", exclusiveMaximum=true, exclusiveMinimum=true,
maximum="100", minimum="0")
+ @Schema(t="integer", emax=true, emin=true, maximum="100", minimum="0")
public static class D03a {}
@Test void d03a_exclusiveBooleanBounds() throws Exception {
@@ -745,7 +745,7 @@ class HttpPartSchema_Body_Test extends TestBase {
}
@Content
- @Schema(t="integer", exclusiveMaximum=false, exclusiveMinimum=false,
maximum="100", minimum="0")
+ @Schema(t="integer", emax=false, emin=false, maximum="100", minimum="0")
public static class D03b {}
@Test void d03b_inclusiveBounds() throws Exception {
@@ -762,7 +762,7 @@ class HttpPartSchema_Body_Test extends TestBase {
}
@Content
- @Schema(t="integer", exclusiveMaximumValue="100",
exclusiveMinimumValue="0", exclusiveMaximum=false, exclusiveMinimum=false)
+ @Schema(t="integer", exclusiveMaximumValue="100",
exclusiveMinimumValue="0", emax=false, emin=false)
public static class D03c {}
@Test void d03c_newStyleTakesPrecedence() throws Exception {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
index 7b84a4e9f7..4877c6d7b8 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
@@ -945,9 +945,6 @@ public class BasicSwaggerProviderSession {
// @formatter:on
}
- @SuppressWarnings({
- "removal" // Uses deprecated exclusiveMaximum/exclusiveMinimum
for backward compatibility
- })
private MarshalledMap merge(MarshalledMap om, Schema a) {
try {
if (SchemaAnnotation.empty(a))
@@ -966,8 +963,8 @@ public class BasicSwaggerProviderSession {
.appendIf(ne, SWAGGER_discriminator,
a.discriminator())
.appendIf(ne, SWAGGER_description,
resolve(a.description(), a.d()))
.appendFirst(nec, SWAGGER_enum,
toSet(a.enum_()), toSet(a.e()))
- .appendIf(nf, SWAGGER_exclusiveMaximum,
a.exclusiveMaximum() || a.emax())
- .appendIf(nf, SWAGGER_exclusiveMinimum,
a.exclusiveMinimum() || a.emin())
+ .appendIf(nf, SWAGGER_exclusiveMaximum,
a.emax())
+ .appendIf(nf, SWAGGER_exclusiveMinimum,
a.emin())
.appendIf(nem, SWAGGER_externalDocs,
merge(om.getMap(SWAGGER_externalDocs), a.externalDocs()))
.appendFirst(ne, SWAGGER_format, a.format(),
a.f())
.appendIf(ne, SWAGGER_ignore, a.ignore() ?
SWAGGER_true : null)