Thanks: looks like a bug in jackson-module-jaxb-annotations. Would you mind filing an issue at:
https://github.com/FasterXML/jackson-module-jaxb-annotations/issues with cut'n pasted stack trace, mention of Jackson version used (2.7.5 or so I think)? It's bit of an edge case, testing-wise, since it requires pieces from different modules, but I should be able to cobble together a test case with the info. -+ Tatu +- On Thu, Sep 29, 2016 at 7:51 AM, Adrian Riley <[email protected]> wrote: > Use of Optional comes from the DropWizard configuration, this is not > bespoke code. DropWizard masks the stack trace and instead gives that error > message, but I've managed to extract it: > > > java.lang.RuntimeException: > io.dropwizard.configuration.ConfigurationParsingException: > /home/developer/projects/employee-service/employee- > service-parent/employee-service/target/test-classes/config.yml has an > error: > * Failed to parse configuration at: metrics.reporters; Must call method > with a container type (got [reference type, class java.util.Optional<io. > dropwizard.util.Duration<[simple type, class > io.dropwizard.util.Duration]>]) > at [Source: N/A; line: -1, column: -1] (through reference chain: > coop.employee.EmployeeServiceConfiguration["metrics"]->io.dropwizard. > metrics.MetricsFactory["reporters"]) > > > at com.google.common.base.Throwables.propagate(Throwables.java:160) > at io.dropwizard.testing.DropwizardTestSupport.startIfRequired( > DropwizardTestSupport.java:196) > at io.dropwizard.testing.DropwizardTestSupport.before( > DropwizardTestSupport.java:112) > at io.dropwizard.testing.junit.DropwizardAppRule.before( > DropwizardAppRule.java:128) > at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46) > at org.junit.rules.RunRules.evaluate(RunRules.java:20) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:27) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( > JUnit4IdeaTestRunner.java:117) > at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( > JUnit4IdeaTestRunner.java:42) > at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart( > JUnitStarter.java:262) > at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) > Caused by: io.dropwizard.configuration.ConfigurationParsingException: > /home/developer/projects/employee-service/employee- > service-parent/employee-service/target/test-classes/config.yml has an > error: > * Failed to parse configuration at: metrics.reporters; Must call method > with a container type (got [reference type, class java.util.Optional<io. > dropwizard.util.Duration<[simple type, class > io.dropwizard.util.Duration]>]) > at [Source: N/A; line: -1, column: -1] (through reference chain: > coop.employee.EmployeeServiceConfiguration["metrics"]->io.dropwizard. > metrics.MetricsFactory["reporters"]) > > at io.dropwizard.configuration.ConfigurationParsingException$ > Builder.build(ConfigurationParsingException.java:276) > at io.dropwizard.configuration.YamlConfigurationFactory.build( > YamlConfigurationFactory.java:152) > at io.dropwizard.configuration.YamlConfigurationFactory.build( > YamlConfigurationFactory.java:87) > at io.dropwizard.cli.ConfiguredCommand.parseConfiguration( > ConfiguredCommand.java:124) > at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:72) > at io.dropwizard.testing.DropwizardTestSupport.startIfRequired( > DropwizardTestSupport.java:194) > ... 18 more > Caused by: com.fasterxml.jackson.databind.JsonMappingException: Must call > method with a container type (got [reference type, class > java.util.Optional<io.dropwizard.util.Duration<[simple type, class > io.dropwizard.util.Duration]>]) > at [Source: N/A; line: -1, column: -1] (through reference chain: > coop.employee.EmployeeServiceConfiguration["metrics"]->io.dropwizard. > metrics.MetricsFactory["reporters"]) > at com.fasterxml.jackson.databind.JsonMappingException. > from(JsonMappingException.java:290) > at com.fasterxml.jackson.databind.deser.DeserializerCache._ > createAndCache2(DeserializerCache.java:269) > at com.fasterxml.jackson.databind.deser.DeserializerCache._ > createAndCacheValueDeserializer(DeserializerCache.java:244) > at com.fasterxml.jackson.databind.deser.DeserializerCache. > findValueDeserializer(DeserializerCache.java:142) > at com.fasterxml.jackson.databind.DeserializationContext. > findContextualValueDeserializer(DeserializationContext.java:444) > at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._ > findDeserializer(TypeDeserializerBase.java:183) > at com.fasterxml.jackson.databind.jsontype.impl. > AsPropertyTypeDeserializer._deserializeTypedForId( > AsPropertyTypeDeserializer.java:106) > at com.fasterxml.jackson.databind.jsontype.impl. > AsPropertyTypeDeserializer.deserializeTypedFromObject( > AsPropertyTypeDeserializer.java:91) > at com.fasterxml.jackson.databind.deser.AbstractDeserializer. > deserializeWithType(AbstractDeserializer.java:142) > at com.fasterxml.jackson.datatype.guava.deser. > GuavaImmutableCollectionDeserializer._deserializeContents( > GuavaImmutableCollectionDeserializer.java:44) > at com.fasterxml.jackson.datatype.guava.deser. > GuavaImmutableCollectionDeserializer._deserializeContents( > GuavaImmutableCollectionDeserializer.java:14) > at com.fasterxml.jackson.datatype.guava.deser.GuavaCollectionDeserializer. > deserialize(GuavaCollectionDeserializer.java:103) > at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize( > SettableBeanProperty.java:490) > at com.fasterxml.jackson.databind.deser.impl.MethodProperty. > deserializeAndSet(MethodProperty.java:95) > at com.fasterxml.jackson.module.afterburner.deser. > SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer. > java:156) > at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize( > SettableBeanProperty.java:490) > at com.fasterxml.jackson.databind.deser.impl.MethodProperty. > deserializeAndSet(MethodProperty.java:95) > at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize( > BeanDeserializer.java:224) > at com.fasterxml.jackson.module.afterburner.deser. > SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer. > java:152) > at com.fasterxml.jackson.databind.ObjectMapper._ > readValue(ObjectMapper.java:3779) > at com.fasterxml.jackson.databind.ObjectMapper. > readValue(ObjectMapper.java:2050) > at io.dropwizard.configuration.YamlConfigurationFactory.build( > YamlConfigurationFactory.java:123) > ... 22 more > Caused by: java.lang.IllegalArgumentException: Must call method with a > container type (got [reference type, class java.util.Optional<io. > dropwizard.util.Duration<[simple type, class > io.dropwizard.util.Duration]>]) > at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector. > findPropertyContentTypeResolver(JaxbAnnotationIntrospector.java:567) > at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair. > findPropertyContentTypeResolver(AnnotationIntrospectorPair.java:233) > at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair. > findPropertyContentTypeResolver(AnnotationIntrospectorPair.java:233) > at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory. > findPropertyContentTypeDeserializer(BasicDeserializerFactory.java:1516) > at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory. > resolveType(BasicDeserializerFactory.java:1886) > at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory. > constructSettableProperty(BeanDeserializerFactory.java:717) > at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory. > addBeanProps(BeanDeserializerFactory.java:504) > at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory. > buildBeanDeserializer(BeanDeserializerFactory.java:228) > at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory. > createBeanDeserializer(BeanDeserializerFactory.java:143) > at com.fasterxml.jackson.databind.deser.DeserializerCache._ > createDeserializer2(DeserializerCache.java:406) > at com.fasterxml.jackson.databind.deser.DeserializerCache._ > createDeserializer(DeserializerCache.java:352) > at com.fasterxml.jackson.databind.deser.DeserializerCache._ > createAndCache2(DeserializerCache.java:264) > ... 42 more > > It does look like a Jackson issue, but I thought someone else might have > experienced it in this scenario. I'll try to get a test for Jackson, but at > the moment I've just parked the upgrade to get on with something else. > > > On Thursday, 29 September 2016 15:44:25 UTC+1, Tatu Saloranta wrote: >> >> You'd need to include the stack trace: just generally indicating it comes >> from JaxbAnnotationIntrospector does not help a lot unfortunately. >> Exception does not look familiar. >> Also, if possible, it'd be great to have a self-contained test for >> Jackson, since this sounds like either a Jackson bug (more likely), or >> problem with DW configuration setup (less likely). >> >> -+ Tatu +- >> >> ps. Not sure why `Optional` is used in configuration, seems like an >> anti-pattern to me. But perhaps that's what DropWizard configuration uses. >> If not, I'd just get rid of that to simplify handling, remove one possible >> source of issues. >> >> >> On Thu, Sep 29, 2016 at 3:14 AM, Adrian Riley <[email protected]> wrote: >> >>> Upgraded Jackson to 2.8.3, where the code around here has changed, but >>> still got the same error. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "dropwizard-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "dropwizard-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "dropwizard-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
