Skip to content

Conversation

StevenMassaro
Copy link
Contributor

@StevenMassaro StevenMassaro commented Mar 25, 2024

Impact

  • Bug fix (non-breaking change which fixes expected existing functionality)
  • Enhancement/New feature (adds functionality without impacting existing logic)
  • Breaking change (fix or feature that would cause existing functionality to change)

Description

Consolidate helper methods around value handling of arguments into one location (ObjectUtil). Also, make boolean parsing strict. Before, any unrecognized entry, foo for example, would be treated as false. Now, any unrecognized entry is treated as an invalid and an error is thrown.

Things to be aware of

Things to worry about

It is difficult to know for sure that this change will not break an edge case that someone relies on.

Additional Context

# Conflicts:
#	liquibase-standard/src/main/java/liquibase/util/ObjectUtil.java
#	liquibase-standard/src/main/java/liquibase/util/ValueHandlerUtil.java
@StevenMassaro StevenMassaro merged commit 89995c7 into master Apr 1, 2024
@StevenMassaro StevenMassaro deleted the DAT-15398 branch April 1, 2024 12:12
@jasonlyle88
Copy link
Contributor

jasonlyle88 commented May 3, 2024

Hey @StevenMassaro ,

I used to be able to run tests via my IDE as described in the official guide here. However, this no longer works.

After spending some time, I was able to narrow it down to this PR that caused the issue. Checking out the commit right before this one (2350d09fc51cf51eea2f95e6f169c6f587723132) works with the IDE testing, but checking out the commit from this PR (89995c7a4411e3b9a68b5d13fb6954cda4f2f07e) causes the IDE testing to fail.

Below is the error message produced when I try to execute a test through the IDE:

/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57932:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /Users/jlyle/Personal/projects/liquibase/liquibase/liquibase-cli/target/classes:/Users/jlyle/Personal/projects/liquibase/liquibase/liquibase-standard/target/classes:/Users/jlyle/.m2/repository/com/opencsv/opencsv/5.9/opencsv-5.9.jar:/Users/jlyle/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar:/Users/jlyle/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar:/Users/jlyle/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar:/Users/jlyle/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/Users/jlyle/.m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar:/Users/jlyle/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar liquibase.integration.commandline.LiquibaseLauncher update
May 03, 2024 9:52:57 AM liquibase.servicelocator
INFO: Cannot load service
java.util.ServiceConfigurationError: liquibase.configuration.AutoloadedConfigurations: Provider com.datical.liquibase.ext.config.ReportConfiguration could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at liquibase.servicelocator.StandardServiceLocator.findInstances(StandardServiceLocator.java:24)
	at liquibase.configuration.LiquibaseConfiguration.init(LiquibaseConfiguration.java:61)
	at liquibase.Scope.getCurrentScope(Scope.java:102)
	at liquibase.command.CommandArgumentDefinition$Building.build(CommandArgumentDefinition.java:299)
	at liquibase.command.core.CalculateChecksumCommandStep.<clinit>(CalculateChecksumCommandStep.java:52)
	at liquibase.integration.commandline.LiquibaseCommandLine.<init>(LiquibaseCommandLine.java:117)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.NoSuchMethodError: 'java.lang.Boolean liquibase.util.ValueHandlerUtil.booleanValueHandler(java.lang.Object)'
	at com.datical.liquibase.ext.config.ReportConfiguration.<clinit>(ReportConfiguration.java:28)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 12 more

May 03, 2024 9:52:57 AM liquibase.servicelocator
INFO: Cannot load service
java.util.ServiceConfigurationError: liquibase.configuration.AutoloadedConfigurations: Provider com.datical.liquibase.ext.config.DatabaseChangelogHistoryConfiguration could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at liquibase.servicelocator.StandardServiceLocator.findInstances(StandardServiceLocator.java:24)
	at liquibase.configuration.LiquibaseConfiguration.init(LiquibaseConfiguration.java:61)
	at liquibase.Scope.getCurrentScope(Scope.java:102)
	at liquibase.command.CommandArgumentDefinition$Building.build(CommandArgumentDefinition.java:299)
	at liquibase.command.core.CalculateChecksumCommandStep.<clinit>(CalculateChecksumCommandStep.java:52)
	at liquibase.integration.commandline.LiquibaseCommandLine.<init>(LiquibaseCommandLine.java:117)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.NoSuchMethodError: 'java.lang.Boolean liquibase.util.ValueHandlerUtil.booleanValueHandler(java.lang.Object)'
	at com.datical.liquibase.ext.config.DatabaseChangelogHistoryConfiguration.<clinit>(DatabaseChangelogHistoryConfiguration.java:56)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 12 more

May 03, 2024 9:52:58 AM liquibase.servicelocator
INFO: Cannot load service
java.util.ServiceConfigurationError: liquibase.command.CommandStep: Provider com.datical.liquibase.ext.command.helpers.ChecksAutoEnableNewChecksArgument could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at liquibase.servicelocator.StandardServiceLocator.findInstances(StandardServiceLocator.java:24)
	at liquibase.command.CommandFactory.findAllInstances(CommandFactory.java:244)
	at liquibase.command.CommandFactory.getCommands(CommandFactory.java:163)
	at liquibase.integration.commandline.LiquibaseCommandLine.getCommands(LiquibaseCommandLine.java:1115)
	at liquibase.integration.commandline.LiquibaseCommandLine.buildPicoCommandLine(LiquibaseCommandLine.java:218)
	at liquibase.integration.commandline.LiquibaseCommandLine.<init>(LiquibaseCommandLine.java:194)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.NoSuchMethodError: 'java.lang.Boolean liquibase.util.ValueHandlerUtil.booleanValueHandler(java.lang.Object)'
	at com.datical.liquibase.ext.command.helpers.ChecksAutoEnableNewChecksArgument.<clinit>(ChecksAutoEnableNewChecksArgument.java:23)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 12 more

May 03, 2024 9:52:58 AM liquibase.servicelocator
INFO: Cannot load service
java.util.ServiceConfigurationError: liquibase.command.CommandStep: Provider com.datical.liquibase.ext.command.checks.ChecksRunCommandStep could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at liquibase.servicelocator.StandardServiceLocator.findInstances(StandardServiceLocator.java:24)
	at liquibase.command.CommandFactory.findAllInstances(CommandFactory.java:244)
	at liquibase.command.CommandFactory.getCommands(CommandFactory.java:163)
	at liquibase.integration.commandline.LiquibaseCommandLine.getCommands(LiquibaseCommandLine.java:1115)
	at liquibase.integration.commandline.LiquibaseCommandLine.buildPicoCommandLine(LiquibaseCommandLine.java:218)
	at liquibase.integration.commandline.LiquibaseCommandLine.<init>(LiquibaseCommandLine.java:194)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.NoSuchMethodError: 'java.lang.Boolean liquibase.util.ValueHandlerUtil.booleanValueHandler(java.lang.Object)'
	at com.datical.liquibase.ext.command.checks.ChecksRunCommandStep.<clinit>(ChecksRunCommandStep.java:211)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 12 more

Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.IllegalStateException: Unable to find CommandStep provider for class com.datical.liquibase.ext.command.helpers.ChecksAutoEnableNewChecksArgument
	at liquibase.command.CommandFactory.lambda$whoProvidesClass$4(CommandFactory.java:121)
	at java.base/java.util.Optional.orElseThrow(Optional.java:403)
	at liquibase.command.CommandFactory.whoProvidesClass(CommandFactory.java:121)
	at liquibase.command.CommandFactory.findDependenciesForCommand(CommandFactory.java:104)
	at liquibase.command.CommandFactory.computePipelineForCommandDefinition(CommandFactory.java:77)
	at liquibase.command.CommandFactory.getCommandDefinition(CommandFactory.java:50)
	at liquibase.command.CommandFactory.getCommands(CommandFactory.java:175)
	at liquibase.integration.commandline.LiquibaseCommandLine.getCommands(LiquibaseCommandLine.java:1115)
	at liquibase.integration.commandline.LiquibaseCommandLine.buildPicoCommandLine(LiquibaseCommandLine.java:218)
	at liquibase.integration.commandline.LiquibaseCommandLine.<init>(LiquibaseCommandLine.java:194)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	... 2 more

Process finished with exit code 1

Any thoughts on what is going on here?

@jasonlyle88
Copy link
Contributor

Hey @StevenMassaro , @filipelautert helped me resolve this issue on another thread. I had my LIQUIBASE_HOME set to a Liquibase 4.27.0 release because of the instructions. But that cased a mis-match in code that was updated vs code that was trying to run. So my previous message can safely be ignored!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants