# 1.0.0-Beta27

This release brings **enhanced XML handling, new CLI app support, improved error handling, and expanded interoperability** with Java and CFML runtimes. We've also added **new HTTP event hooks, improved caching strategies, and a streamlined class resolution** process to make your applications more performant, even in debug modes.

#### 🌟 Highlights:

✅ **Enhanced XML Support** – Improved cloning, merging, and namespace handling in XML operations.\
✅ **Unified Template & Script Grammars** – BoxLang now seamlessly integrates both styles, bringing performance updates to the parser.\
✅ **Improved Java Interop** – Automatic coercion of BoxLang arrays to native Java arrays and `varargs` support.\
✅ **Better Error Handling** – More robust dump rendering and exception management.\
✅ **New CLI Features** – Built-in functions like `cliRead()`, `cliGetArgs()`, and `cliExit()` for pure CLI apps.\
✅ **Improved HTTP Handling** – Proxy support, authentication, and new request/response events.

✅ **Trusted Cache** – Trusted cache is in the house, to get high performance in production.

✅ **Class location caches** – More performance updates for class resolutions for BoxLang classes.

With **over 40 improvements, new features, and fixes**, this release makes BoxLang even more powerful and stable! 🔥

### Improvements

[BL-953](https://ortussolutions.atlassian.net/browse/BL-953) Implement Node pass-through methods to handle cloning and merging of XML objects

[BL-955](https://ortussolutions.atlassian.net/browse/BL-955) Combine template and script grammars for boxlang

[BL-956](https://ortussolutions.atlassian.net/browse/BL-956) Error Getting method keyExists for class ortus.boxlang.runtime.types.XML

[BL-958](https://ortussolutions.atlassian.net/browse/BL-958) StructFindKey returns two findings on the same node if top level key is array

[BL-959](https://ortussolutions.atlassian.net/browse/BL-959) Better error handling when dump template errors

[BL-964](https://ortussolutions.atlassian.net/browse/BL-964) Return callback return value from runThreadInContext()

[BL-966](https://ortussolutions.atlassian.net/browse/BL-966) java interop coerce BL arrays to native arrays

[BL-967](https://ortussolutions.atlassian.net/browse/BL-967) Add toOptional() method to Attempt

[BL-968](https://ortussolutions.atlassian.net/browse/BL-968) coerce return values of proxied methods

[BL-983](https://ortussolutions.atlassian.net/browse/BL-983) output class of non-simple valued fields in class output for cfdump

[BL-984](https://ortussolutions.atlassian.net/browse/BL-984) prefer same mapping for relative class lookups in box resolver

[BL-998](https://ortussolutions.atlassian.net/browse/BL-998) Client scope needs more consistencies like the session scope when validating and expiration determination

[BL-999](https://ortussolutions.atlassian.net/browse/BL-999) Module service record was not registering interceptors with the module settings

[BL-1002](https://ortussolutions.atlassian.net/browse/BL-1002) HTTP Component - Implement Proxy Server handling

[BL-1010](https://ortussolutions.atlassian.net/browse/BL-1010) add default itnerface helper for the IBoxContext to get the running application name if any

[BL-1013](https://ortussolutions.atlassian.net/browse/BL-1013) Servlet to support Jakarta namespace

### New Features

[BL-843](https://ortussolutions.atlassian.net/browse/BL-843) Move defaultCache to the caches section as default, verify it exists, else create it anyways

[BL-935](https://ortussolutions.atlassian.net/browse/BL-935) add http events: onHTTPRequest, onHTTPResponse

[BL-952](https://ortussolutions.atlassian.net/browse/BL-952) Expose buildRegistry() and encapsulate per location registration

[BL-989](https://ortussolutions.atlassian.net/browse/BL-989) CLI BIFS for working with pure cli apps: cliRead(), cliGetArgs(), cliExit()

[BL-1009](https://ortussolutions.atlassian.net/browse/BL-1009) Activate box resolvers cache according to request and app settings

[BL-1016](https://ortussolutions.atlassian.net/browse/BL-1016) New setting: classResolverCache : boolean \[true] which controls if the class locators caches resolve lookups

### Bugs

[BL-389](https://ortussolutions.atlassian.net/browse/BL-389) varargs not working

[BL-931](https://ortussolutions.atlassian.net/browse/BL-931) CF casts Class instances to a String

[BL-947](https://ortussolutions.atlassian.net/browse/BL-947) Namespaced XML nodes not accessible by their non-namespaced names

[BL-949](https://ortussolutions.atlassian.net/browse/BL-949) XMLSearch Not Finding Correct Results When Namespaces are Present

[BL-950](https://ortussolutions.atlassian.net/browse/BL-950) XML asString Generates trailing line break

[BL-951](https://ortussolutions.atlassian.net/browse/BL-951) StructFindKey Not Returning owner values correctly

[BL-960](https://ortussolutions.atlassian.net/browse/BL-960) ASM compilation error

[BL-961](https://ortussolutions.atlassian.net/browse/BL-961) query with empty column name can't be dumped

[BL-965](https://ortussolutions.atlassian.net/browse/BL-965) WriteDump()/Dump() is broken in current snapshot build

[BL-969](https://ortussolutions.atlassian.net/browse/BL-969) DateCompare on two zero-hour strings fails with long overflow

[BL-970](https://ortussolutions.atlassian.net/browse/BL-970) XMLElemNew Illegal Character exception when using the namespace URI as the second argument

[BL-977](https://ortussolutions.atlassian.net/browse/BL-977) HTTP Component - Implement Basic Authentication

[BL-978](https://ortussolutions.atlassian.net/browse/BL-978) Cannot access variables scope in a static context -- but there is no variables access

[BL-981](https://ortussolutions.atlassian.net/browse/BL-981) timezone not always used in datetime caster

[BL-982](https://ortussolutions.atlassian.net/browse/BL-982) toUnmodifiableStruct() method not threadsafe

[BL-985](https://ortussolutions.atlassian.net/browse/BL-985) directoryList filter param does not accept a closure

[BL-991](https://ortussolutions.atlassian.net/browse/BL-991) Support for guid and uuid type

[BL-994](https://ortussolutions.atlassian.net/browse/BL-994) getDirectoryFromPath returns different result to Lucee and ACF

[BL-995](https://ortussolutions.atlassian.net/browse/BL-995) argument type of binary is not supported

[BL-996](https://ortussolutions.atlassian.net/browse/BL-996) argument type of email is not supported

[BL-1000](https://ortussolutions.atlassian.net/browse/BL-1000) CGI scope reporting 0 items

[BL-1003](https://ortussolutions.atlassian.net/browse/BL-1003) JSONSerialize pretty prints JSON which blows up outbound NDJSON

[BL-1004](https://ortussolutions.atlassian.net/browse/BL-1004) CFHTTParam Encodes Query Strings By Default

[BL-1005](https://ortussolutions.atlassian.net/browse/BL-1005) URLEncodedFormat Replaces Spaces with Plus Symbols

[BL-1015](https://ortussolutions.atlassian.net/browse/BL-1015) Bracket Notation Usage on Java Hashmaps Does not work.

[BL-1017](https://ortussolutions.atlassian.net/browse/BL-1017) Detail and Extended Info Can Be Null In Thrown Exceptions


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://boxlang.ortusbooks.com/readme/release-history/beta-stage/1.0.0-beta27.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
