This is an automated email from the ASF dual-hosted git repository.

matrei pushed a commit to branch matrei/register-databinding-plugin
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 1b6a967860caf2c84bd0996df9dfd8b940a10461
Author: Mattias Reichel <[email protected]>
AuthorDate: Thu Mar 19 16:00:01 2026 +0100

    fix: register data binding plugin
    
    The data binding plugin was no longer registered
    as a plugin since it became a Spring AutoConfiguration.
---
 .../AbstractDataBindingGrailsPlugin.groovy         | 121 ---------------------
 .../DataBindingConfigurationProperties.java        |  18 ++-
 .../databinding/DataBindingGrailsPlugin.groovy     |  36 ++++++
 .../Jsr310ConvertersConfigurationSpec.groovy       |  32 ++++--
 4 files changed, 77 insertions(+), 130 deletions(-)

diff --git 
a/grails-databinding/src/main/groovy/org/grails/plugins/databinding/AbstractDataBindingGrailsPlugin.groovy
 
b/grails-databinding/src/main/groovy/org/grails/plugins/databinding/AbstractDataBindingGrailsPlugin.groovy
deleted file mode 100644
index 30caf8383a..0000000000
--- 
a/grails-databinding/src/main/groovy/org/grails/plugins/databinding/AbstractDataBindingGrailsPlugin.groovy
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.grails.plugins.databinding
-
-import grails.config.Settings
-import grails.plugins.Plugin
-import grails.util.GrailsUtil
-import grails.web.databinding.DataBindingUtils
-import grails.web.databinding.GrailsWebDataBinder
-import org.grails.databinding.converters.CurrencyValueConverter
-import org.grails.databinding.converters.DateConversionHelper
-import org.grails.databinding.converters.Jsr310ConvertersConfiguration
-import org.grails.databinding.converters.TimeZoneConverter
-import org.grails.databinding.converters.UUIDConverter
-import org.grails.databinding.converters.web.LocaleAwareBigDecimalConverter
-import org.grails.databinding.converters.web.LocaleAwareNumberConverter
-import org.grails.web.databinding.bindingsource.DataBindingSourceRegistry
-import 
org.grails.web.databinding.bindingsource.DefaultDataBindingSourceRegistry
-import org.grails.web.databinding.bindingsource.HalJsonDataBindingSourceCreator
-import org.grails.web.databinding.bindingsource.HalXmlDataBindingSourceCreator
-import org.grails.web.databinding.bindingsource.JsonApiDataBindingSourceCreator
-import org.grails.web.databinding.bindingsource.JsonDataBindingSourceCreator
-import org.grails.web.databinding.bindingsource.XmlDataBindingSourceCreator
-
-/**
- * Plugin for configuring the data binding features of Grails
- *
- * @author Jeff Brown
- * @author Graeme Rocher
- *
- * @since 2.3
- */
-abstract class AbstractDataBindingGrailsPlugin extends Plugin {
-
-    public static final String DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ssZ"
-    public static final String DEFAULT_JSR310_OFFSET_TIME_FORMAT = 'HH:mm:ssZ'
-    public static final String DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ss"
-    public static final String DEFAULT_JSR310_LOCAL_DATE_FORMAT = 'yyyy-MM-dd'
-    public static final String DEFAULT_JSR310_LOCAL_TIME_FORMAT = 'HH:mm:ss'
-    public static final List<String> DEFAULT_DATE_FORMATS = ['yyyy-MM-dd 
HH:mm:ss.S', "yyyy-MM-dd'T'HH:mm:ss'Z'", 'yyyy-MM-dd HH:mm:ss.S z', 
"yyyy-MM-dd'T'HH:mm:ss.SSSX", DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT, 
DEFAULT_JSR310_OFFSET_TIME_FORMAT, DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT, 
DEFAULT_JSR310_LOCAL_DATE_FORMAT, DEFAULT_JSR310_LOCAL_TIME_FORMAT]
-
-    def version = GrailsUtil.getGrailsVersion()
-
-    @Override
-    Closure doWithSpring() {
-        { ->
-            def application = grailsApplication
-            def config = application.config
-            boolean trimStringsSetting = 
config.getProperty(Settings.TRIM_STRINGS, Boolean, true)
-            boolean convertEmptyStringsToNullSetting = 
config.getProperty(Settings.CONVERT_EMPTY_STRINGS_TO_NULL, Boolean, true)
-            boolean dateParsingLenientSetting = 
config.getProperty(Settings.DATE_LENIENT_PARSING, Boolean, false)
-            Integer autoGrowCollectionLimitSetting = 
config.getProperty(Settings.AUTO_GROW_COLLECTION_LIMIT, Integer, 256)
-            List dateFormats = config.getProperty(Settings.DATE_FORMATS, List, 
DEFAULT_DATE_FORMATS)
-
-            "${DataBindingUtils.DATA_BINDER_BEAN_NAME}"(GrailsWebDataBinder, 
grailsApplication) {
-                // trimStrings defaults to TRUE
-                trimStrings = trimStringsSetting
-                // convertEmptyStringsToNull defaults to TRUE
-                convertEmptyStringsToNull = convertEmptyStringsToNullSetting
-                // autoGrowCollectionLimit defaults to 256
-                autoGrowCollectionLimit = autoGrowCollectionLimitSetting
-            }
-
-            
dataBindingConfigurationProperties(DataBindingConfigurationProperties)
-            timeZoneConverter(TimeZoneConverter)
-            uuidConverter(UUIDConverter)
-
-            defaultDateConverter(DateConversionHelper) {
-                formatStrings = dateFormats
-                // dateParsingLenient defaults to false
-                dateParsingLenient = dateParsingLenientSetting
-            }
-            [Short,   Short.TYPE,
-             Integer, Integer.TYPE,
-             Float,   Float.TYPE,
-             Long,    Long.TYPE,
-             Double,  Double.TYPE].each { numberType ->
-                
"defaultGrails${numberType.simpleName}Converter"(LocaleAwareNumberConverter) {
-                    targetType = numberType
-                }
-            }
-            defaultGrailsBigDecimalConverter(LocaleAwareBigDecimalConverter) {
-                targetType = BigDecimal
-            }
-            defaultGrailsBigIntegerConverter(LocaleAwareBigDecimalConverter) {
-                targetType = BigInteger
-            }
-
-            jsr310DataBinding(Jsr310ConvertersConfiguration) {
-                formatStrings = dateFormats
-            }
-
-            
"${DataBindingSourceRegistry.BEAN_NAME}"(DefaultDataBindingSourceRegistry)
-
-            xmlDataBindingSourceCreator(XmlDataBindingSourceCreator)
-            jsonDataBindingSourceCreator(JsonDataBindingSourceCreator)
-            halJsonDataBindingSourceCreator(HalJsonDataBindingSourceCreator)
-            halXmlDataBindingSourceCreator(HalXmlDataBindingSourceCreator)
-            jsonApiDataBindingSourceCreator(JsonApiDataBindingSourceCreator)
-
-            defaultCurrencyConverter(CurrencyValueConverter)
-        }
-    }
-
-}
diff --git 
a/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingConfigurationProperties.java
 
b/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingConfigurationProperties.java
index f152c0b211..3c1838bd9b 100644
--- 
a/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingConfigurationProperties.java
+++ 
b/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingConfigurationProperties.java
@@ -31,11 +31,27 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
 @ConfigurationProperties("grails.databinding")
 public class DataBindingConfigurationProperties {
 
+    private static final String DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ssZ";
+    private static final String DEFAULT_JSR310_OFFSET_TIME_FORMAT = 
"HH:mm:ssZ";
+    private static final String DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ss";
+    private static final String DEFAULT_JSR310_LOCAL_DATE_FORMAT = 
"yyyy-MM-dd";
+    private static final String DEFAULT_JSR310_LOCAL_TIME_FORMAT = "HH:mm:ss";
+
     private boolean trimStrings = true;
     private boolean convertEmptyStringsToNull = true;
     private int autoGrowCollectionLimit = 256;
     private boolean dateParsingLenient = false;
-    private List<String> dateFormats = 
AbstractDataBindingGrailsPlugin.DEFAULT_DATE_FORMATS;
+    private List<String> dateFormats = List.of(
+            "yyyy-MM-dd HH:mm:ss.S",
+            "yyyy-MM-dd'T'HH:mm:ss'Z'",
+            "yyyy-MM-dd HH:mm:ss.S z",
+            "yyyy-MM-dd'T'HH:mm:ss.SSSX",
+            DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT,
+            DEFAULT_JSR310_OFFSET_TIME_FORMAT,
+            DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT,
+            DEFAULT_JSR310_LOCAL_DATE_FORMAT,
+            DEFAULT_JSR310_LOCAL_TIME_FORMAT
+    );
 
     public boolean isTrimStrings() {
         return trimStrings;
diff --git 
a/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingGrailsPlugin.groovy
 
b/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingGrailsPlugin.groovy
new file mode 100644
index 0000000000..6d353b26ea
--- /dev/null
+++ 
b/grails-databinding/src/main/groovy/org/grails/plugins/databinding/DataBindingGrailsPlugin.groovy
@@ -0,0 +1,36 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.grails.plugins.databinding
+
+
+import grails.plugins.Plugin
+import grails.util.GrailsUtil
+
+/**
+ * Plugin for configuring the data binding features of Grails
+ *
+ * @author Jeff Brown
+ * @author Graeme Rocher
+ *
+ * @since 2.3
+ */
+class DataBindingGrailsPlugin extends Plugin {
+
+    def version = GrailsUtil.getGrailsVersion()
+}
diff --git 
a/grails-databinding/src/test/groovy/org/grails/databinding/converters/Jsr310ConvertersConfigurationSpec.groovy
 
b/grails-databinding/src/test/groovy/org/grails/databinding/converters/Jsr310ConvertersConfigurationSpec.groovy
index 30e836335d..6846583c6a 100644
--- 
a/grails-databinding/src/test/groovy/org/grails/databinding/converters/Jsr310ConvertersConfigurationSpec.groovy
+++ 
b/grails-databinding/src/test/groovy/org/grails/databinding/converters/Jsr310ConvertersConfigurationSpec.groovy
@@ -18,7 +18,6 @@
  */
 package org.grails.databinding.converters
 
-import org.grails.plugins.databinding.AbstractDataBindingGrailsPlugin
 import spock.lang.Shared
 import spock.lang.Specification
 
@@ -26,8 +25,25 @@ import java.time.*
 
 class Jsr310ConvertersConfigurationSpec extends Specification {
 
+    private static final String DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ssZ"
+    private static final String DEFAULT_JSR310_OFFSET_TIME_FORMAT = 'HH:mm:ssZ'
+    private static final String DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT = 
"yyyy-MM-dd'T'HH:mm:ss"
+    private static final String DEFAULT_JSR310_LOCAL_DATE_FORMAT = 'yyyy-MM-dd'
+    private static final String DEFAULT_JSR310_LOCAL_TIME_FORMAT = 'HH:mm:ss'
+    private static final List<String> DEFAULT_DATE_FORMATS = [
+            'yyyy-MM-dd HH:mm:ss.S',
+            "yyyy-MM-dd'T'HH:mm:ss'Z'",
+            'yyyy-MM-dd HH:mm:ss.S z',
+            "yyyy-MM-dd'T'HH:mm:ss.SSSX",
+            DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT,
+            DEFAULT_JSR310_OFFSET_TIME_FORMAT,
+            DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT,
+            DEFAULT_JSR310_LOCAL_DATE_FORMAT,
+            DEFAULT_JSR310_LOCAL_TIME_FORMAT
+    ]
+
     @Shared
-    Jsr310ConvertersConfiguration config = new 
Jsr310ConvertersConfiguration(formatStrings: 
AbstractDataBindingGrailsPlugin.DEFAULT_DATE_FORMATS)
+    Jsr310ConvertersConfiguration config = new 
Jsr310ConvertersConfiguration(formatStrings: DEFAULT_DATE_FORMATS)
 
     @Shared
     Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
@@ -42,7 +58,7 @@ class Jsr310ConvertersConfigurationSpec extends Specification 
{
 
         expect:
         converter.targetType == LocalDateTime
-        converter.convert("1941-01-05T08:00:00", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT) 
instanceof LocalDateTime
+        converter.convert("1941-01-05T08:00:00", 
DEFAULT_JSR310_LOCAL_DATE_TIME_FORMAT) instanceof LocalDateTime
     }
 
     void "localDateTimeValueConverter"() {
@@ -75,7 +91,7 @@ class Jsr310ConvertersConfigurationSpec extends Specification 
{
 
         expect:
         converter.targetType == LocalDate
-        converter.convert("1941-01-05", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_LOCAL_DATE_FORMAT) instanceof 
LocalDate
+        converter.convert("1941-01-05", DEFAULT_JSR310_LOCAL_DATE_FORMAT) 
instanceof LocalDate
     }
 
     void "localDateValueConverter"() {
@@ -105,7 +121,7 @@ class Jsr310ConvertersConfigurationSpec extends 
Specification {
 
         expect:
         converter.targetType == LocalTime
-        converter.convert("08:00:00", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_LOCAL_TIME_FORMAT) instanceof 
LocalTime
+        converter.convert("08:00:00", DEFAULT_JSR310_LOCAL_TIME_FORMAT) 
instanceof LocalTime
     }
 
     void "localTimeValueConverter"() {
@@ -135,7 +151,7 @@ class Jsr310ConvertersConfigurationSpec extends 
Specification {
 
         expect:
         converter.targetType == OffsetTime
-        converter.convert("08:00:00+0000", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_OFFSET_TIME_FORMAT) instanceof 
OffsetTime
+        converter.convert("08:00:00+0000", DEFAULT_JSR310_OFFSET_TIME_FORMAT) 
instanceof OffsetTime
     }
 
     void "offsetTimeValueConverter"() {
@@ -165,7 +181,7 @@ class Jsr310ConvertersConfigurationSpec extends 
Specification {
 
         expect:
         converter.targetType == OffsetDateTime
-        converter.convert("1941-01-05T08:00:00+0000", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT) 
instanceof OffsetDateTime
+        converter.convert("1941-01-05T08:00:00+0000", 
DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT) instanceof OffsetDateTime
     }
 
     void "offsetDateTimeValueConverter"() {
@@ -198,7 +214,7 @@ class Jsr310ConvertersConfigurationSpec extends 
Specification {
 
         expect:
         converter.targetType == ZonedDateTime
-        converter.convert("1941-01-05T08:00:00+0000", 
AbstractDataBindingGrailsPlugin.DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT) 
instanceof ZonedDateTime
+        converter.convert("1941-01-05T08:00:00+0000", 
DEFAULT_JSR310_OFFSET_ZONED_DATE_TIME_FORMAT) instanceof ZonedDateTime
     }
 
     void "zonedDateTimeValueConverter"() {

Reply via email to