This is an automated email from the ASF dual-hosted git repository. jamesfredley pushed a commit to branch merge/7.1.x-into-8.0.x in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 10f71f9729f5c41c66506c202ee51cf6d39b2388 Merge: 52d78d22f1 2c0ecc1776 Author: James Fredley <[email protected]> AuthorDate: Fri Mar 20 15:28:38 2026 -0400 Merge remote-tracking branch 'origin/7.1.x' into merge/7.1.x-into-8.0.x .github/workflows/groovy-joint-workflow.yml | 1 + .github/workflows/release-notes.yml | 2 +- .github/workflows/release.yml | 10 +- gradle.properties | 1 + .../src/main/groovy/grails/web/JSONBuilder.groovy | 2 +- .../main/groovy/grails/core/GrailsApplication.java | 6 +- grails-core/src/main/groovy/grails/util/Mixin.java | 2 +- .../groovy/grails/util/MixinTargetAware.groovy | 2 +- .../grails/validation/ConstraintsEvaluator.java | 2 +- .../injection/ArtefactTypeAstTransformation.java | 2 +- .../compiler/injection/MixinTransformation.java | 2 +- .../grails/orm/hibernate/cfg/PropertyConfig.groovy | 5 +- .../mapping/HibernateMappingBuilderTests.groovy | 13 +- .../main/groovy/grails/mongodb/MongoEntity.groovy | 2 +- .../mongodb/api/MongoInstanceOperations.groovy | 5 +- .../datastore/gorm/mongo/api/MongoStaticApi.groovy | 2 +- .../org/grails/datastore/gorm/GormEnhancer.groovy | 12 +- .../org/grails/datastore/gorm/GormEntity.groovy | 4 +- .../datastore/gorm/query/NamedCriteriaProxy.groovy | 2 +- .../gorm/query/NamedQueriesBuilder.groovy | 2 + .../grails/gorm/validation/Constrained.groovy | 2 +- .../grails/datastore/mapping/config/Entity.groovy | 8 +- .../datastore/mapping/core/AbstractSession.java | 2 +- .../dirty/checking/DirtyCheckingSupport.groovy | 2 +- grails-doc/src/en/guide/index.adoc | 6 +- grails-doc/src/en/guide/reference.adoc | 4 +- .../src/en/ref/Database Mapping/insertable.adoc | 4 +- .../{updateable.adoc => updatable.adoc} | 10 +- .../GrailsDomainClassAutoConfiguration.groovy | 1 + .../domain/support/ConstraintEvaluatorAdapter.java | 1 + .../src/main/groovy/grails/artefact/Service.groovy | 2 +- .../src/main/groovy/grails/events/Events.groovy | 2 +- .../compat/src/main/groovy/reactor/bus/Bus.java | 2 +- .../compat/src/main/groovy/reactor/bus/Event.java | 2 +- .../src/main/groovy/reactor/bus/EventBus.groovy | 2 +- .../reactor/bus/registry/Registration.groovy | 2 +- .../reactor/bus/registry/Subscription.groovy | 2 +- .../main/groovy/reactor/bus/selector/Selector.java | 2 +- .../src/main/groovy/reactor/fn/Consumer.java | 2 +- .../spring/context/annotation/Consumer.groovy | 1 + .../spring/context/annotation/Selector.groovy | 1 + .../plugin/formfields/FormFieldsTagLib.groovy | 13 +- .../plugin/formfields/BeanPropertyAccessor.groovy | 2 +- .../formfields/BeanPropertyAccessorImpl.groovy | 2 + .../DelegatingBeanPropertyAccessorImpl.groovy | 2 +- .../plugin/formfields/PropertyPathAccessor.groovy | 1 + .../formfields/DefaultInputRenderingSpec.groovy | 22 + .../src/main/groovy/grails/util/Metadata.groovy | 4 +- .../grails/core/gsp/DefaultGrailsTagLibClass.java | 17 + .../core/gsp/DefaultGrailsTagLibClassSpec.groovy | 108 ++ .../plugins/web/taglib/ApplicationTagLib.groovy | 3 +- .../grails/plugins/web/taglib/FormTagLib.groovy | 2 +- .../cli/compiler/grape/AetherGrapeEngine.java | 2 +- .../compiler/grape/AetherGrapeEngineFactory.java | 2 +- grails-test-examples/app1/build.gradle | 3 +- .../groovy/functionaltests/AtResourceSpec.groovy | 27 +- .../BookRestfulControllerSpec.groovy | 36 +- .../functionaltests/async/AsyncPromiseSpec.groovy | 278 ++--- .../binding/AdvancedDataBindingSpec.groovy | 390 ++++--- .../functionaltests/caching/CachingSpec.groovy | 147 +-- .../codecs/SecurityCodecsSpec.groovy | 365 +++--- .../commanddi/CommandObjectDISpec.groovy | 273 ++--- .../contentneg/ContentNegotiationSpec.groovy | 277 ++--- .../functionaltests/cors/CorsAdvancedSpec.groovy | 262 ++--- .../errorhandling/ErrorHandlingSpec.groovy | 181 ++- .../fileupload/FileUploadSpec.groovy | 342 +++--- .../flow/FlashChainForwardSpec.groovy | 249 ++--- .../i18n/InternationalizationSpec.groovy | 342 +++--- .../InterceptorAdvancedMatchingSpec.groovy | 214 ++-- .../interceptors/InterceptorOrderingSpec.groovy | 205 ++-- .../requestresponse/RequestResponseSpec.groovy | 355 +++--- .../springevents/SpringEventsSpec.groovy | 134 +-- .../functionaltests/taglib/TagLibSpec.groovy | 664 ++++------- .../urlmappings/UrlMappingsSpec.groovy | 259 ++--- .../async-events-pubsub-demo/build.gradle | 4 +- .../groovy/pubsub/demo/TaskControllerSpec.groovy | 34 +- grails-test-examples/cache/build.gradle | 8 +- .../com/demo/AdvancedCachingIntegrationSpec.groovy | 237 +--- grails-test-examples/demo33/build.gradle | 2 + .../groovy/demo/JsonControllerSpec.groovy | 26 +- .../grails-multiple-datasources/build.gradle | 8 +- .../MultiDataSourceWithSessionSpec.groovy | 44 +- .../hibernate5/issue450/build.gradle | 3 +- .../groovy/example/BookControllerSpec.groovy | 27 +- grails-test-examples/issue-11102/build.gradle | 6 +- .../groovy/issue11102/HttpClientCommonSpec.groovy | 45 - .../groovy/issue11102/TestControllerSpec.groovy | 27 +- grails-test-examples/issue-11767/build.gradle | 7 +- .../groovy/issue11767/app/ConfigLoadingSpec.groovy | 37 +- grails-test-examples/issue-15228/build.gradle | 3 +- .../issue11767/app/GsonViewRespondSpec.groovy | 58 +- grails-test-examples/issue-views-182/build.gradle | 3 +- .../groovy/views182/CustomErrorSpec.groovy | 27 +- .../groovy/views182/HttpClientCommonSpec.groovy | 46 - grails-test-examples/micronaut/build.gradle | 3 +- .../MicronautDeclarativeClientSpec.groovy | 197 ++-- .../micronaut/MicronautErsatzAdvancedSpec.groovy | 733 ++++-------- .../micronaut/MicronautErsatzPatternSpec.groovy | 337 +++--- .../micronaut/MicronautErsatzRoundtripSpec.groovy | 453 +++----- .../views-functional-tests/build.gradle | 5 +- .../groovy/functional/tests/BookSpec.groovy | 181 +-- .../groovy/functional/tests/BulletinSpec.groovy | 26 +- .../groovy/functional/tests/CircularSpec.groovy | 74 +- .../groovy/functional/tests/CustomerSpec.groovy | 41 +- .../groovy/functional/tests/EmbeddedSpec.groovy | 58 +- .../groovy/functional/tests/HttpClientSpec.groovy | 44 - .../groovy/functional/tests/InheritanceSpec.groovy | 38 +- .../tests/ModelInterceptorIntSpec.groovy | 37 +- .../functional/tests/ObjectTemplateSpec.groovy | 27 +- .../functional/tests/PersonInheritanceSpec.groovy | 32 +- .../groovy/functional/tests/ProductSpec.groovy | 218 ++-- .../groovy/functional/tests/ProjectSpec.groovy | 38 +- .../groovy/functional/tests/ProxySpec.groovy | 31 +- .../groovy/functional/tests/TeamSpec.groovy | 91 +- .../functional/tests/TestControllerSpec.groovy | 28 +- .../functional/tests/TestGmlControllerSpec.groovy | 32 +- .../functional/tests/TestGsonControllerSpec.groovy | 86 +- .../groovy/functional/tests/VehicleSpec.groovy | 61 +- .../functional/tests/api/NamespacedBookSpec.groovy | 143 +-- grails-test-suite-uber/build.gradle | 83 +- .../web/binding/JSONBindingToNullSpec.groovy | 7 +- .../groovy/grails/testing/spock/OnceBefore.groovy | 2 - .../testing/cleanup/core/DatabaseCleanup.groovy | 2 + grails-testing-support-http-client/README.md | 201 ++++ grails-testing-support-http-client/build.gradle | 58 + .../testing/http/client/HttpClientSupport.groovy | 1169 ++++++++++++++++++++ .../testing/http/client/MultipartBody.groovy | 191 ++++ .../testing/http/client/TestHttpResponse.groovy | 994 +++++++++++++++++ .../testing/http/client/utils/JsonUtils.groovy | 276 +++++ .../testing/http/client/utils/XmlUtils.groovy | 241 ++++ .../http/client/HttpClientSupportSpec.groovy | 1165 +++++++++++++++++++ .../testing/http/client/MultipartBodySpec.groovy | 67 ++ .../http/client/TestHttpResponseSpec.groovy | 542 +++++++++ .../testing/http/client/utils/JsonUtilsSpec.groovy | 159 +++ .../testing/http/client/utils/XmlUtilsSpec.groovy | 329 ++++++ .../grails/validation/ConstrainedDelegate.groovy | 2 +- .../plugin/json/builder/DefaultJsonGenerator.java | 542 +-------- .../grails/plugin/json/builder/JsonGenerator.java | 270 +---- .../grails/plugin/json/builder/JsonOutput.java | 268 +---- .../plugin/json/builder/StreamingJsonBuilder.java | 800 +------------- .../json/converters/InstantJsonConverter.groovy | 3 +- .../json/converters/LocalDateJsonConverter.groovy | 3 +- .../converters/LocalDateTimeJsonConverter.groovy | 3 +- .../json/converters/LocalTimeJsonConverter.groovy | 3 +- .../converters/OffsetDateTimeJsonConverter.groovy | 3 +- .../json/converters/OffsetTimeJsonConverter.groovy | 3 +- .../json/converters/PeriodJsonConverter.groovy | 3 +- .../converters/ZonedDateTimeJsonConverter.groovy | 3 +- .../plugin/json/view/JsonViewTemplateEngine.groovy | 30 +- .../plugin/json/view/JsonViewWritableScript.groovy | 67 +- .../json/view/api/GrailsJsonViewHelper.groovy | 18 +- .../plugin/json/view/api/HalViewHelper.groovy | 18 +- .../grails/plugin/json/view/api/JsonView.groovy | 38 +- .../internal/DefaultGrailsJsonViewHelper.groovy | 94 +- .../view/api/internal/DefaultHalViewHelper.groovy | 134 +-- .../api/internal/DefaultJsonApiViewHelper.groovy | 11 +- .../view/api/internal/DefaultJsonViewHelper.groovy | 3 +- .../JsonTemplateTypeCheckingExtension.groovy | 9 +- .../json/view/template/JsonViewTemplate.groovy | 23 +- .../web/servlet/context/GrailsConfigUtils.java | 3 +- settings.gradle | 9 +- 161 files changed, 9116 insertions(+), 7721 deletions(-)
