9
votes

I'm trying to bind generator.yaml file with an object of type GeneratorConfig using Spring Boot 2.0.5.RELEASE:

generator.yaml:

entry:
  name: "node-1"
  expectedState: HEALTHY

@Component
@PropertySource("classpath:generator.yaml")
@ConfigurationProperties
public class GeneratorConfig {
    private Entry entry;

    // getter and setter
}

public class Entry {

    private String name;
    private NodeState expectedState;

    // getters and setters
}

And I'm getting the following exception:

2018-12-11 13:11:53.885  INFO 3923 --- [           main] com.project.mmgenerator.MMGenerator     : Starting MMGenerator on madmin’s-MacBook-Pro with PID 3923 (/Users/jscherman/IdeaProjects/sentinel/mock-metrics-generator/out/production/classes started by jscherman in /Users/jscherman/IdeaProjects/sentinel)
2018-12-11 13:11:53.889 DEBUG 3923 --- [           main] com.project.mmgenerator.MMGenerator     : Running with Spring Boot v2.0.5.RELEASE, Spring v5.0.9.RELEASE
2018-12-11 13:11:53.890  INFO 3923 --- [           main] com.project.mmgenerator.MMGenerator     : No active profile set, falling back to default profiles: default
2018-12-11 13:11:53.934  INFO 3923 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3eb91815: startup date [Tue Dec 11 13:11:53 ART 2018]; root of context hierarchy
2018-12-11 13:11:55.292  INFO 3923 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2018-12-11 13:11:55.314  INFO 3923 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-12-11 13:11:55.314  INFO 3923 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.34
2018-12-11 13:11:55.318  INFO 3923 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/jscherman/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2018-12-11 13:11:55.403  INFO 3923 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-12-11 13:11:55.403  INFO 3923 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1471 ms
2018-12-11 13:11:56.209  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'webMvcMetricsFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpTraceFilter' to: [/*]
2018-12-11 13:11:56.210  INFO 3923 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-12-11 13:11:56.317  INFO 3923 --- [           main] c.m.s.metric.InfluxDBMetricsConnector    : Setting InfluxDB connector with database name sentinel_db
2018-12-11 13:11:56.345  INFO 3923 --- [           main] c.m.mmgenerator.adapter.AdapterService   : Building adapter service (sentinel-url=http://localhost:8080/, mmgenerator-url=http://localhost:8081/)
2018-12-11 13:11:56.431  WARN 3923 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'generatorEntriesController' defined in file [/Users/jscherman/IdeaProjects/sentinel/mock-metrics-generator/out/production/classes/com/project/mmgenerator/entry/GeneratorEntriesController.class]: Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'generatorConfig': Could not bind properties to 'GeneratorConfig' : prefix=, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'entry' to com.project.mmgenerator.input.Entry
2018-12-11 13:11:56.433  INFO 3923 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-12-11 13:11:56.447  INFO 3923 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-12-11 13:11:56.451 ERROR 3923 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'entry' to com.project.mmgenerator.input.Entry:

    Property: entry
    Value: 
    Origin: "entry" from property source "class path resource [generator.yaml]"
    Reason: No converter found capable of converting from type [java.lang.String] to type [com.project.mmgenerator.input.Entry]

Action:

Update your application's configuration

Does anyone have any idea what is going on? Any help would be appreciated.

1
Is your YAML file indented correctly? You'll get the error that you are experiencing if name and expectedState are not indented to be children of entry.Andy Wilkinson
Have you tried changing Type of expectedState to String from NodeState? Because as per property config it seems like String.nanosoft
What are the values of this enum com.project.mmgenerator.input.Entry?earandap

1 Answers

-2
votes

Try removing the double quote (") from the value of 'name:', Spring will automatically bind it as String you don't need to specify it as a "string"