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 547e783793 TODO-238: Apply juneau-marshall quality-registry pilot
fixes (BUG-02/07/09/15, IDIOM-02)
547e783793 is described below
commit 547e783793c3033047665195b2a99593f1f2a0b7
Author: James Bognar <[email protected]>
AuthorDate: Thu Jul 16 18:01:36 2026 -0400
TODO-238: Apply juneau-marshall quality-registry pilot fixes
(BUG-02/07/09/15, IDIOM-02)
Shortlist from the codebase-quality-registry pilot across juneau-commons and
juneau-marshall:
- BUG-02: copy MsgPack serializer settings in Builder copy-constructors so
configuration isn't lost on copy.
- BUG-07: parse/match casing folded through Locale.ROOT
(boolean/float/duration/
enum/prototext/toml token parsing) to avoid locale-sensitive parsing.
- BUG-09: getters return defensive/unmodifiable copies (MarshalledFilter
property
sets, SearchArgs.getSearch, HoconConcat.getParts, CBOR/MsgPack getBinary
clone).
- BUG-15: null-argument guards via assertArgNotNull (PojoWalker.walk,
EnumFormat.parse).
- IDIOM-02: throw via Shorts exception factories (ioex/iaex) instead of
direct
constructors with string concatenation.
Co-authored-by: Cursor <[email protected]>
---
.../src/main/java/org/apache/juneau/commons/io/LocalFile.java | 2 +-
.../apache/juneau/commons/svl/functions/BooleanFunctions.java | 4 +++-
.../java/org/apache/juneau/commons/svl/functions/MiniJson.java | 6 ++++--
.../main/java/org/apache/juneau/marshall/BooleanFormat.java | 4 +++-
.../main/java/org/apache/juneau/marshall/DurationFormat.java | 3 ++-
.../src/main/java/org/apache/juneau/marshall/Enablement.java | 2 +-
.../src/main/java/org/apache/juneau/marshall/EnumFormat.java | 4 ++++
.../src/main/java/org/apache/juneau/marshall/FloatFormat.java | 6 ++++--
.../main/java/org/apache/juneau/marshall/MarshalledFilter.java | 10 +++++-----
.../java/org/apache/juneau/marshall/MarshallingSession.java | 3 +++
.../java/org/apache/juneau/marshall/cbor/CborTokenReader.java | 2 +-
.../org/apache/juneau/marshall/collections/JsonPointer.java | 6 ++++++
.../java/org/apache/juneau/marshall/hjson/HjsonTokenizer.java | 3 ++-
.../java/org/apache/juneau/marshall/hocon/HoconTokenizer.java | 3 ++-
.../main/java/org/apache/juneau/marshall/hocon/HoconValue.java | 4 +++-
.../java/org/apache/juneau/marshall/ini/IniParserSession.java | 2 +-
.../org/apache/juneau/marshall/jsonschema/TypeCategory.java | 4 ++--
.../apache/juneau/marshall/msgpack/MsgPackOutputStream.java | 4 ++++
.../org/apache/juneau/marshall/msgpack/MsgPackSerializer.java | 2 ++
.../org/apache/juneau/marshall/msgpack/MsgPackTokenReader.java | 2 +-
.../org/apache/juneau/marshall/objecttools/SearchArgs.java | 2 +-
.../juneau/marshall/prototext/PrototextParserSession.java | 2 +-
.../apache/juneau/marshall/prototext/PrototextTokenizer.java | 6 +++---
.../java/org/apache/juneau/marshall/stream/PojoWalker.java | 7 +++++++
.../org/apache/juneau/marshall/toml/TomlParserSession.java | 2 +-
.../java/org/apache/juneau/marshall/toml/TomlTokenizer.java | 2 +-
26 files changed, 68 insertions(+), 29 deletions(-)
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/LocalFile.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/LocalFile.java
index daeed0b97a..598f69f512 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/LocalFile.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/LocalFile.java
@@ -256,7 +256,7 @@ public class LocalFile {
if (nn(clazz)) {
var is = clazz.getResourceAsStream(clazzPath);
if (is == null)
- throw new IOException("Classpath resource not
found: " + clazzPath + " (relative to " + cn(clazz) + ")");
+ throw ioex("Classpath resource not found: %s
(relative to %s)", clazzPath, cn(clazz));
return is;
}
return Files.newInputStream(path);
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/BooleanFunctions.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/BooleanFunctions.java
index ad9dbb6144..149db48bc9 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/BooleanFunctions.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/BooleanFunctions.java
@@ -16,6 +16,8 @@
*/
package org.apache.juneau.commons.svl.functions;
+import static org.apache.juneau.commons.utils.Shorts.*;
+
import org.apache.juneau.commons.svl.*;
/**
@@ -117,6 +119,6 @@ public final class BooleanFunctions {
return true;
if (t.isEmpty() || t.equalsIgnoreCase("false") || t.equals("0")
|| t.equalsIgnoreCase("no") || t.equalsIgnoreCase("off"))
return false;
- throw new IllegalArgumentException("cannot coerce '" + s + "'
to boolean (accepted: true/1/yes/on, false/0/no/off, empty)");
+ throw iaex("cannot coerce '%s' to boolean (accepted:
true/1/yes/on, false/0/no/off, empty)", s);
}
}
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/MiniJson.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/MiniJson.java
index 8cc8af33d2..ad4180cc4c 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/MiniJson.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/functions/MiniJson.java
@@ -16,6 +16,8 @@
*/
package org.apache.juneau.commons.svl.functions;
+import static org.apache.juneau.commons.utils.Shorts.*;
+
import java.util.*;
/**
@@ -52,7 +54,7 @@ final class MiniJson {
var result = p.parseValue();
p.skipWs();
if (p.pos < p.src.length())
- throw new IllegalArgumentException("Trailing characters
at offset " + p.pos);
+ throw iaex("Trailing characters at offset %s", p.pos);
return result;
}
@@ -194,7 +196,7 @@ final class MiniJson {
}
private IllegalArgumentException err(String msg) {
- return new IllegalArgumentException(msg + " at offset " + pos);
+ return iaex("%s at offset %s", msg, pos);
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/BooleanFormat.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/BooleanFormat.java
index 3c3a987744..3a56c1d673 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/BooleanFormat.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/BooleanFormat.java
@@ -18,6 +18,8 @@ package org.apache.juneau.marshall;
import static org.apache.juneau.commons.utils.Shorts.*;
+import java.util.Locale;
+
/**
* Supported wire formats for {@link Boolean} / <code><jk>boolean</jk></code>
values.
*
@@ -183,7 +185,7 @@ public enum BooleanFormat {
var s = value.trim();
if (s.isEmpty())
throw iaex("Cannot parse a blank value as Boolean");
- return switch (s.toLowerCase()) {
+ return switch (s.toLowerCase(Locale.ROOT)) {
case "true", "1", "yes", "y", "on" -> true;
case "false", "0", "no", "n", "off" -> false;
default -> throw iaex("Invalid boolean value '%s' for
format %s", value, format);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/DurationFormat.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/DurationFormat.java
index 00b105239a..1cc9b30a23 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/DurationFormat.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/DurationFormat.java
@@ -18,6 +18,7 @@ package org.apache.juneau.marshall;
import java.math.*;
import java.time.*;
+import java.util.Locale;
/**
* Supported wire formats for {@link Duration} values.
@@ -172,7 +173,7 @@ public enum DurationFormat {
BigDecimal nanos = null;
if (valid) {
var value = new BigDecimal(s.substring(0, i));
- nanos = switch (s.substring(i).toLowerCase()) {
+ nanos = switch
(s.substring(i).toLowerCase(Locale.ROOT)) {
case "d" ->
value.multiply(BigDecimal.valueOf(86_400_000_000_000L));
case "h" ->
value.multiply(BigDecimal.valueOf(3_600_000_000_000L));
case "m" ->
value.multiply(BigDecimal.valueOf(60_000_000_000L));
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Enablement.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Enablement.java
index 892a0f8888..7946a85620 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Enablement.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/Enablement.java
@@ -58,7 +58,7 @@ public enum Enablement {
* @return The resolved value, or <jk>null</jk> if no match found.
*/
public static Enablement fromString(String s) {
- return MAP.get(emptyIfNull(s).toUpperCase());
+ return MAP.get(emptyIfNull(s).toUpperCase(Locale.ROOT));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/EnumFormat.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/EnumFormat.java
index 2d20199288..5e7fb5b316 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/EnumFormat.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/EnumFormat.java
@@ -16,6 +16,7 @@
*/
package org.apache.juneau.marshall;
+import static org.apache.juneau.commons.utils.AssertionUtils.*;
import static org.apache.juneau.commons.utils.Shorts.*;
import java.util.*;
@@ -74,6 +75,8 @@ public enum EnumFormat {
/** {@link Enum#ordinal()} as a numeric value. */
ORDINAL;
+ private static final String ARG_enumClass = "enumClass";
+
/**
* Formats the specified enum value using this format.
*
@@ -117,6 +120,7 @@ public enum EnumFormat {
"java:S3776" // Cognitive complexity acceptable for enum format
parsing dispatch
})
public static <E extends Enum<E>> E parse(String value, Class<E>
enumClass) {
+ assertArgNotNull(ARG_enumClass, enumClass);
if (value == null)
return null;
var s = value.trim();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/FloatFormat.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/FloatFormat.java
index f6ffc2df82..8bac268cb5 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/FloatFormat.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/FloatFormat.java
@@ -18,6 +18,8 @@ package org.apache.juneau.marshall;
import static org.apache.juneau.commons.utils.Shorts.*;
+import java.util.Locale;
+
/**
* Supported wire formats for non-finite {@link Float} / {@link Double} values
* ({@link Double#NaN NaN}, {@link Double#POSITIVE_INFINITY +Infinity}, {@link
Double#NEGATIVE_INFINITY -Infinity}).
@@ -234,7 +236,7 @@ public enum FloatFormat {
}
private static double parseDouble(String s) {
- var lower = s.toLowerCase();
+ var lower = s.toLowerCase(Locale.ROOT);
return switch (lower) {
case "nan" -> Double.NaN;
case "infinity", "+infinity", "inf", "+inf" ->
Double.POSITIVE_INFINITY;
@@ -244,7 +246,7 @@ public enum FloatFormat {
}
private static float parseFloat(String s) {
- var lower = s.toLowerCase();
+ var lower = s.toLowerCase(Locale.ROOT);
return switch (lower) {
case "nan" -> Float.NaN;
case "infinity", "+infinity", "inf", "+inf" ->
Float.POSITIVE_INFINITY;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshalledFilter.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshalledFilter.java
index bb9408f937..be33e7a7da 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshalledFilter.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshalledFilter.java
@@ -603,10 +603,10 @@ public class MarshalledFilter implements BeanFilter {
protected MarshalledFilter(Builder builder) {
this.beanClass = builder.beanClass;
this.typeName = builder.typeName;
- this.properties = copyOf(builder.properties);
- this.excludeProperties = copyOf(builder.excludeProperties);
- this.readOnlyProperties = copyOf(builder.readOnlyProperties);
- this.writeOnlyProperties = copyOf(builder.writeOnlyProperties);
+ this.properties = u(copyOf(builder.properties));
+ this.excludeProperties = u(copyOf(builder.excludeProperties));
+ this.readOnlyProperties = u(copyOf(builder.readOnlyProperties));
+ this.writeOnlyProperties =
u(copyOf(builder.writeOnlyProperties));
this.example = builder.example;
this.implClass = builder.implClass;
this.interfaceClass = builder.interfaceClass;
@@ -614,7 +614,7 @@ public class MarshalledFilter implements BeanFilter {
this.unsortedProperties = builder.unsortedProperties;
this.fluentSetters = builder.fluentSetters;
this.propertyNamer =
builder.propertyNamer.asOptional().orElse(null);
- this.beanDictionary = builder.dictionary == null ? list() :
u(copyOf(builder.dictionary));
+ this.beanDictionary = builder.dictionary == null ? u(list()) :
u(copyOf(builder.dictionary));
this.interceptor =
builder.interceptor.asOptional().orElse(BeanInterceptor.DEFAULT);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshallingSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshallingSession.java
index ce0258cfbe..89a38e91bb 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshallingSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/MarshallingSession.java
@@ -70,6 +70,7 @@ public class MarshallingSession extends ContextSession
implements ConverterSessi
private static final String ARG_o = "o";
private static final String ARG_c = "c";
private static final String ARG_classes = "classes";
+ private static final String ARG_value = "value";
/**
* Builder class.
@@ -1160,6 +1161,7 @@ public class MarshallingSession extends ContextSession
implements ConverterSessi
*/
@Override
public final <T> BeanMap<T> toBeanMap(T o) {
+ assertArgNotNull(ARG_o, o);
if (o instanceof BeanMap o2)
return o2;
return this.toBeanMap(o, (Class<T>)o.getClass());
@@ -1472,6 +1474,7 @@ public class MarshallingSession extends ContextSession
implements ConverterSessi
*/
@Override /* BeanSession */
public final Collection<?> parseToList(CharSequence value) {
+ assertArgNotNull(ARG_value, value);
return new Json5List(value).setBeanSession(this);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/cbor/CborTokenReader.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/cbor/CborTokenReader.java
index 0a58636dbd..914d69cc41 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/cbor/CborTokenReader.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/cbor/CborTokenReader.java
@@ -417,7 +417,7 @@ public class CborTokenReader implements TokenReader {
public byte[] getBinary() {
if (currentToken != TokenType.VALUE_BINARY)
throw new IllegalStateException("Current token is not
VALUE_BINARY (was " + currentToken + ")");
- return currentBinary;
+ return currentBinary == null ? null : currentBinary.clone();
}
@Override /* TokenReader */
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/collections/JsonPointer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/collections/JsonPointer.java
index ebb9b52e6f..8a2783c4d8 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/collections/JsonPointer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/collections/JsonPointer.java
@@ -16,6 +16,7 @@
*/
package org.apache.juneau.marshall.collections;
+import static org.apache.juneau.commons.utils.AssertionUtils.*;
import static org.apache.juneau.commons.utils.Shorts.*;
import java.util.*;
@@ -56,6 +57,9 @@ public class JsonPointer {
/** Sentinel distinguishing an absent value from a present
<jk>null</jk> value during traversal. */
private static final Object MISSING = new Object();
+ private static final String ARG_rawMemberName = "rawMemberName";
+ private static final String ARG_token = "token";
+
/**
* Parses and validates the specified RFC 6901 JSON Pointer string.
*
@@ -74,6 +78,7 @@ public class JsonPointer {
* @return The encoded reference token.
*/
public static String encodeToken(String rawMemberName) {
+ assertArgNotNull(ARG_rawMemberName, rawMemberName);
return rawMemberName.replace("~", "~0").replace("/", "~1");
}
@@ -84,6 +89,7 @@ public class JsonPointer {
* @return The decoded member name.
*/
public static String decodeToken(String token) {
+ assertArgNotNull(ARG_token, token);
return token.replace("~1", "/").replace("~0", "~");
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hjson/HjsonTokenizer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hjson/HjsonTokenizer.java
index 8cf206f77a..477ba9daed 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hjson/HjsonTokenizer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hjson/HjsonTokenizer.java
@@ -19,6 +19,7 @@ package org.apache.juneau.marshall.hjson;
import static org.apache.juneau.commons.utils.StringUtils.*;
import java.io.*;
+import java.util.Locale;
/**
* Tokenizer for Hjson format.
@@ -317,7 +318,7 @@ public class HjsonTokenizer {
if (matchNumberPrefix(raw, false) == raw.length()) {
var numStr = raw;
try {
- if (numStr.contains(".") ||
numStr.toLowerCase().contains("e"))
+ if (numStr.contains(".") ||
numStr.toLowerCase(Locale.ROOT).contains("e"))
return
Token.number(Double.parseDouble(numStr));
return parseIntegerOrLongToken(numStr);
} catch (@SuppressWarnings("unused")
NumberFormatException e) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconTokenizer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconTokenizer.java
index 9ae4c19d88..fae8893335 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconTokenizer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconTokenizer.java
@@ -19,6 +19,7 @@ package org.apache.juneau.marshall.hocon;
import static org.apache.juneau.commons.utils.StringUtils.*;
import java.io.*;
+import java.util.Locale;
/**
* Tokenizer for HOCON (Human-Optimized Config Object Notation) format.
@@ -440,7 +441,7 @@ public class HoconTokenizer {
if (matchNumberPrefix(raw, false) == raw.length()) {
var numStr = raw;
try {
- if (numStr.contains(".") ||
numStr.toLowerCase().contains("e"))
+ if (numStr.contains(".") ||
numStr.toLowerCase(Locale.ROOT).contains("e"))
return
Token.number(Double.parseDouble(numStr));
return parseIntegerOrLongToken(numStr);
} catch (@SuppressWarnings("unused")
NumberFormatException e) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconValue.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconValue.java
index a1da5f5714..a728cb12fd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconValue.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/hocon/HoconValue.java
@@ -16,6 +16,8 @@
*/
package org.apache.juneau.marshall.hocon;
+import static org.apache.juneau.commons.utils.CollectionUtils.*;
+import static org.apache.juneau.commons.utils.Shorts.*;
import static org.apache.juneau.commons.utils.StringUtils.*;
import java.util.*;
@@ -335,7 +337,7 @@ public abstract sealed class HoconValue permits
HoconValue.HoconObject, HoconVal
* @return The parts list.
*/
public List<HoconValue> getParts() {
- return parts;
+ return u(copyOf(parts));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/ini/IniParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/ini/IniParserSession.java
index c4061cd90d..ed1163a470 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/ini/IniParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/ini/IniParserSession.java
@@ -275,7 +275,7 @@ public class IniParserSession extends ReaderParserSession
implements RecordReada
return getJson5Parser().parse(trimmed, targetType);
if (targetType.isNumber()) {
try {
- if (trimmed.contains(".") ||
trimmed.toLowerCase().contains("e"))
+ if (trimmed.contains(".") ||
trimmed.toLowerCase(Locale.ROOT).contains("e"))
return Double.parseDouble(trimmed);
return Long.parseLong(trimmed);
} catch (@SuppressWarnings("unused")
NumberFormatException e) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/jsonschema/TypeCategory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/jsonschema/TypeCategory.java
index d8a007b29f..3a8370f2e9 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/jsonschema/TypeCategory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/jsonschema/TypeCategory.java
@@ -78,7 +78,7 @@ public enum TypeCategory {
if (isEmpty(s))
return Collections.emptySet();
Set<TypeCategory> set = CollectionUtils.set();
- split(s, x -> set.add(valueOf(x.toUpperCase())));
+ split(s, x -> set.add(valueOf(x.toUpperCase(Locale.ROOT))));
return set;
}
@@ -92,7 +92,7 @@ public enum TypeCategory {
if (isEmpty(s))
return new TypeCategory[0];
List<TypeCategory> list = list();
- split(s, x -> list.add(valueOf(x.toUpperCase())));
+ split(s, x -> list.add(valueOf(x.toUpperCase(Locale.ROOT))));
return list.toArray(new TypeCategory[list.size()]);
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackOutputStream.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackOutputStream.java
index 85483ef054..804f75982d 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackOutputStream.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackOutputStream.java
@@ -16,6 +16,7 @@
*/
package org.apache.juneau.marshall.msgpack;
+import static org.apache.juneau.commons.utils.AssertionUtils.*;
import static org.apache.juneau.commons.utils.IoUtils.*;
import static org.apache.juneau.marshall.msgpack.DataType.*;
@@ -48,6 +49,8 @@ public class MsgPackOutputStream extends OutputStream {
private static final long L2X31 = ((long)(1 << 30)) * 2;
+ private static final String ARG_value = "value";
+
/**
* Constructor.
*
@@ -394,6 +397,7 @@ public class MsgPackOutputStream extends OutputStream {
* @return This stream.
*/
MsgPackOutputStream appendBigInteger(BigInteger value) {
+ assertArgNotNull(ARG_value, value);
if (value.bitLength() < 64)
return appendLong(value.longValue());
if (value.signum() > 0 && value.bitLength() == 64)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackSerializer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackSerializer.java
index 5b2e9b2c52..95b00469ed 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackSerializer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackSerializer.java
@@ -123,6 +123,7 @@ public class MsgPackSerializer extends
OutputStreamSerializer implements MsgPack
*/
protected Builder(Builder copyFrom) {
super(assertArgNotNull(ARG_copyFrom, copyFrom));
+ addBeanTypesMsgPack = copyFrom.addBeanTypesMsgPack;
}
/**
@@ -133,6 +134,7 @@ public class MsgPackSerializer extends
OutputStreamSerializer implements MsgPack
*/
protected Builder(MsgPackSerializer copyFrom) {
super(assertArgNotNull(ARG_copyFrom, copyFrom));
+ addBeanTypesMsgPack = copyFrom.addBeanTypesMsgPack;
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackTokenReader.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackTokenReader.java
index 2186be5fa3..912e0c07db 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackTokenReader.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/msgpack/MsgPackTokenReader.java
@@ -336,7 +336,7 @@ public class MsgPackTokenReader implements TokenReader {
public byte[] getBinary() {
if (currentToken != TokenType.VALUE_BINARY)
throw new IllegalStateException("Current token is not
VALUE_BINARY (was " + currentToken + ")");
- return currentBinary;
+ return currentBinary == null ? null : currentBinary.clone();
}
@Override /* TokenReader */
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/objecttools/SearchArgs.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/objecttools/SearchArgs.java
index 007a35d302..ea5f0d7651 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/objecttools/SearchArgs.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/objecttools/SearchArgs.java
@@ -105,5 +105,5 @@ public class SearchArgs {
*
* @return An unmodifiable map of query search terms.
*/
- public Map<String,String> getSearch() { return search; }
+ public Map<String,String> getSearch() { return u(search); }
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextParserSession.java
index fcbcc6ba7f..8f480c07a9 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextParserSession.java
@@ -257,7 +257,7 @@ public class PrototextParserSession extends
ReaderParserSession implements Recor
case IDENT -> {
var s = tok.stringValue();
if (s == null) yield null;
- var lower = s.toLowerCase();
+ var lower = s.toLowerCase(Locale.ROOT);
if (lower.equals("true") || lower.equals("t")
|| lower.equals("1"))
yield Boolean.TRUE;
if (lower.equals("false") || lower.equals("f")
|| lower.equals("0"))
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextTokenizer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextTokenizer.java
index 551cde5d94..74573636cd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextTokenizer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/prototext/PrototextTokenizer.java
@@ -197,7 +197,7 @@ class PrototextTokenizer {
var isTerminator = term < 0
|| term == ' ' || term == '\t' || term == '\n' || term
== '\r' || term == 0x0B || term == 0x0C
|| term == ',' || term == ';' || term == ']' || term ==
'}';
- var tok = buf.toString().toLowerCase();
+ var tok = buf.toString().toLowerCase(Locale.ROOT);
var isSpecial = isTerminator && (tok.equals("nan") ||
tok.equals("inf") || tok.equals("infinity"));
// Restore consumed chars in reverse order (pushback is a LIFO
stack — to make the next read
// return buf[0], buf[0] must be on top, so we push buf[N-1]
... buf[0]).
@@ -343,7 +343,7 @@ class PrototextTokenizer {
while (isLetterOrUnderscore(peekChar()) ||
Character.isDigit(peekChar()))
sb.append((char) readChar());
var s = sb.toString();
- var lower = s.toLowerCase();
+ var lower = s.toLowerCase(Locale.ROOT);
if (lower.equals("inf") || lower.equals("infinity"))
return new
PrototextToken(PrototextToken.TokenType.FLOAT, neg ? Double.NEGATIVE_INFINITY :
Double.POSITIVE_INFINITY);
if (lower.equals("nan"))
@@ -522,7 +522,7 @@ class PrototextTokenizer {
boolean readBoolean() throws IOException, ParseException {
var t = read();
if (t.type() == PrototextToken.TokenType.IDENT) {
- var s = t.stringValue().toLowerCase();
+ var s = t.stringValue().toLowerCase(Locale.ROOT);
if (s.equals("true") || s.equals("t") || s.equals("1"))
return true;
if (s.equals("false") || s.equals("f") || s.equals("0"))
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/stream/PojoWalker.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/stream/PojoWalker.java
index 69b3f832f6..c3063ad2fa 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/stream/PojoWalker.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/stream/PojoWalker.java
@@ -16,6 +16,8 @@
*/
package org.apache.juneau.marshall.stream;
+import static org.apache.juneau.commons.utils.AssertionUtils.*;
+
import java.io.*;
import java.lang.reflect.*;
import java.math.*;
@@ -55,6 +57,9 @@ import org.apache.juneau.marshall.*;
})
public final class PojoWalker {
+ private static final String ARG_w = "w";
+ private static final String ARG_options = "options";
+
/**
* Databind-level settings honored by {@link PojoWalker}.
*
@@ -128,6 +133,8 @@ public final class PojoWalker {
* @throws IOException If the writer's underlying stream fails.
*/
public static void walk(TokenWriter w, Object value, Options options)
throws IOException {
+ assertArgNotNull(ARG_w, w);
+ assertArgNotNull(ARG_options, options);
// Identity-based ancestor set: tracks the objects on the
current walk path so a
// self-referencing graph throws instead of overflowing the
stack. Shared-but-acyclic
// references are fine because each node is removed from the
set once its subtree completes.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlParserSession.java
index cdcb9fb1b4..00f74d35c3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlParserSession.java
@@ -273,7 +273,7 @@ public class TomlParserSession extends ReaderParserSession
implements RecordRead
// Date-like patterns kept as string for convertValue
to parse as LocalDate, YearMonth, Year
if (isDateLikeString(noUnderscore))
return s;
- if (s.contains(".") || s.toLowerCase().contains("e"))
+ if (s.contains(".") ||
s.toLowerCase(Locale.ROOT).contains("e"))
return Double.parseDouble(noUnderscore);
try {
return Long.parseLong(noUnderscore);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlTokenizer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlTokenizer.java
index 83c9ff6ec2..6774be5ff4 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlTokenizer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/marshall/toml/TomlTokenizer.java
@@ -508,7 +508,7 @@ class TomlTokenizer {
while (peek() >= 0 && Character.isLetter(peek())) {
sb.append((char) read());
}
- String s = sb.toString().toLowerCase();
+ String s = sb.toString().toLowerCase(Locale.ROOT);
if (s.equals("inf"))
return Double.POSITIVE_INFINITY;
if (s.equals("-inf"))