dependabot[bot] opened a new pull request, #21229: URL: https://github.com/apache/camel/pull/21229
Bumps [com.cedarsoftware:java-util](https://github.com/jdereg/java-util) from 4.88.0 to 4.90.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jdereg/java-util/blob/master/changelog.md">com.cedarsoftware:java-util's changelog</a>.</em></p> <blockquote> <h4>4.90.0 2026-02-02</h4> <ul> <li><strong>BUG FIX</strong>: <code>DeepEquals</code> - URL comparison now uses string representation instead of <code>URL.equals()</code> <ul> <li>Java's <code>URL.equals()</code> performs DNS resolution which causes flaky CI failures</li> <li>Now compares URLs using <code>toExternalForm()</code> for reliable, deterministic comparison</li> </ul> </li> <li><strong>MAINTENANCE</strong>: Migrated test files from deprecated <code>JsonIo.toObjects()</code> to <code>JsonIo.toJava().asClass()</code> API <ul> <li>Updated 8 calls in <code>CompactMapTest</code> and <code>ConverterEverythingTest</code></li> </ul> </li> <li><strong>PERFORMANCE</strong>: Added <code>FastReader.readUntil()</code> for bulk character reading until delimiter <ul> <li>Reads characters into destination buffer until one of two delimiters is found</li> <li>Delimiter character is left unconsumed for subsequent read</li> <li>Enables bulk string parsing optimization in json-io's JsonParser</li> </ul> </li> </ul> <h4>4.89.0 - 2026-01-31</h4> <ul> <li><strong>PERFORMANCE</strong>: <code>FastReader.getLastSnippet()</code> now returns bounded 200-char context <ul> <li>Previously could return 0 to 8192 characters depending on buffer position</li> <li>Now consistently returns up to the last 200 characters read for useful error context</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>ParameterizedTypeImpl.getActualTypeArguments()</code> removed defensive clone <ul> <li>Returns direct reference for performance - callers should not modify the array</li> <li>Eliminates allocation overhead in hot paths during type resolution</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>Converter.isConversionSupportedFor(source, target)</code> now caches negative results <ul> <li>Previously only cached positive hits, causing repeated inheritance traversal for unsupported pairs</li> <li>Now caches <code>UNSUPPORTED</code> sentinel for O(1) lookup on subsequent calls</li> <li><code>addConversion()</code> already clears caches via <code>clearCachesForType()</code>, so invalidation is handled</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>ReflectionUtils.getMethod()</code> and <code>getNonOverloadedMethod()</code> now cache negative results <ul> <li>Previously threw exceptions inside <code>computeIfAbsent</code>, bypassing the cache for "not found" cases</li> <li>Now caches sentinel <code>Method</code> objects for failed lookups, achieving O(1) on subsequent calls</li> <li>Avoids repeated expensive class hierarchy traversals for non-existent methods</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>ConcurrentSet.spliterator()</code> now returns an optimized spliterator for parallel streams <ul> <li>Delegates to underlying <code>ConcurrentHashMap</code> spliterator for efficient parallel decomposition</li> <li>Properly reports <code>CONCURRENT</code> and <code>DISTINCT</code> characteristics</li> <li>Correctly handles null sentinel unwrapping for null element support</li> <li>Enables efficient <code>parallelStream()</code> operations on <code>ConcurrentSet</code></li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TrackingMap.putIfAbsent()</code> now correctly handles null values <ul> <li>Previously used <code>get() == null</code> which conflates "key absent" with "key present with null value"</li> <li>Now uses <code>containsKey()</code> to properly distinguish between the two cases</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TrackingMap.computeIfPresent()</code> now only tracks keys that were actually present <ul> <li>Previously tracked the key unconditionally, even when the key didn't exist</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>TrackingMap</code> now caches interface cast results at construction time <ul> <li>Avoids repeated <code>instanceof</code> checks and casts for <code>asConcurrent()</code>, <code>asNavigable()</code>, <code>asSorted()</code> methods</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>TrackingMap</code> - Pre-sized <code>HashSet</code> in constructor for <code>readKeys</code> <ul> <li>Uses initial capacity of 16 to reduce early rehashing</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TrackingMap</code> sub-maps now share the parent's <code>readKeys</code> set <ul> <li><code>subMap()</code>, <code>headMap()</code>, <code>tailMap()</code>, <code>descendingMap()</code> now correctly track reads across all views</li> <li>Previously each sub-map had an isolated <code>readKeys</code> set that didn't reflect in parent</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TTLCache.containsValue()</code> now filters expired entries <ul> <li>Previously returned <code>true</code> for expired entries still in the cache</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TTLCache.keySet()</code> now filters expired entries <ul> <li>Iterator skips expired entries and correctly removes underlying cache entries</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TTLCache.values()</code> now filters expired entries <ul> <li>Iterator skips expired entries and correctly removes underlying cache entries</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TTLCache.entrySet()</code> now filters expired entries</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jdereg/java-util/commit/49d75c3a2b4b4f6aa6d6899f007f2f0c53737b63"><code>49d75c3</code></a> Release 4.90.0</li> <li><a href="https://github.com/jdereg/java-util/commit/dae1345ac83379ab4037de9682abec32bbeea889"><code>dae1345</code></a> Revert "Performance: Use local variables in FastReader.readUntil() hot loops"</li> <li><a href="https://github.com/jdereg/java-util/commit/55219ccf53647d9dc4ba7b30a001f5463d66f2e7"><code>55219cc</code></a> Performance: Use local variables in FastReader.readUntil() hot loops</li> <li><a href="https://github.com/jdereg/java-util/commit/385b5ef74d236f6dc4f38a1b07683e90cbdd67f8"><code>385b5ef</code></a> Performance: Add FastReader.readUntil() for bulk character reading</li> <li><a href="https://github.com/jdereg/java-util/commit/9172dfff6029f7c0b043a9d1ec7dece308a96056"><code>9172dff</code></a> Migrate test files from deprecated toObjects() to toJava().asClass() API</li> <li><a href="https://github.com/jdereg/java-util/commit/2b4ac56baef105fa8270135fbda27df53bcf25f8"><code>2b4ac56</code></a> -updated flaky test</li> <li><a href="https://github.com/jdereg/java-util/commit/8f62809138e759e40f649a9d18b5a955323ae55b"><code>8f62809</code></a> Fix URL comparison in DeepEquals to avoid DNS resolution</li> <li><a href="https://github.com/jdereg/java-util/commit/be9d393951f9bc27de5053b620c7eeb79c1a5724"><code>be9d393</code></a> Revert "Release 4.90.0"</li> <li><a href="https://github.com/jdereg/java-util/commit/063c76775bbab1d69651b505ef5fabc80462b6b5"><code>063c767</code></a> Release 4.90.0</li> <li><a href="https://github.com/jdereg/java-util/commit/b5f094f3bfd528d9bf01a4684a6c14080965e512"><code>b5f094f</code></a> updated readme.md</li> <li>Additional commits viewable in <a href="https://github.com/jdereg/java-util/compare/4.88.0...4.90.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
