Skip to content

Commit

Permalink
Merge pull request #10 from agorapulse/feature/more-details-about-errors
Browse files Browse the repository at this point in the history
more details about missing beans
  • Loading branch information
musketyr committed Nov 30, 2020
2 parents 4667cfe + 66c7996 commit 7bc30b8
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
* Adds Micronaut beans to a Grails' Spring application context. This processor will
Expand Down Expand Up @@ -83,11 +84,16 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
: micronautContext.getBeanDefinitions(type, micronautBeanQualifier);

if (beanDefinitions.size() > 1) {
throw new IllegalArgumentException("There is too many candidates of type " + type + " for " + micronautBeanQualifier + "! Candidates: " + beanDefinitions);
throw new IllegalArgumentException("There is too many candidates of type '" + type + "' for qualifier '" + micronautBeanQualifier + "'! Candidates: " + beanDefinitions);
}

Optional<BeanDefinition<?>> firstBean = beanDefinitions.stream().findFirst();
BeanDefinition<?> definition = firstBean.orElseThrow(()-> new IllegalArgumentException("There is no candidate for " + micronautBeanQualifier));
BeanDefinition<?> definition = firstBean.orElseThrow(()-> {
String message = "There is no candidate for type " + type + " and qualifier " + micronautBeanQualifier + "\n"
+ "Known beans:\n" + micronautContext.getAllBeanDefinitions().stream().map(d -> d.getBeanType().getName() + " " + d.getName()).collect(Collectors.joining("\n "));

return new IllegalArgumentException(message);
});

final BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
.rootBeanDefinition(GrailsMicronautBeanFactory.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public void setMicronautContext(DefaultApplicationContext micronautContext) {
}

/**
*
* @param isMicronautSingleton indicates if the Micronaut bean is a singleton
*/
public void setMicronautSingleton(boolean isMicronautSingleton) {
Expand All @@ -68,8 +67,13 @@ public void setMicronautQualifier(Qualifier<Object> micronautQualifier) {

@Override
public Object getObject() throws Exception {
if (GrailsMicronautBeanProcessor.LOGGER.isWarnEnabled() && micronautContext.getEnvironment().getActiveNames().contains(MicronautGrailsApp.ENVIRONMENT)) {
GrailsMicronautBeanProcessor.LOGGER.warn("Bean " + (micronautQualifier == null ? "" : micronautQualifier) + micronautBeanType.getName() + " has been created using GrailsMicronautBeanProcessor. Consider annotating the injection point with @Inject switching the compatibility mode to MicronautGrailsApp.Compatibility.STRICT");
if (GrailsMicronautBeanProcessor.LOGGER.isWarnEnabled()) {
GrailsMicronautBeanProcessor.LOGGER.warn(
"Bean " + (micronautQualifier == null ? "" : micronautQualifier + " ") + micronautBeanType.getName()
+ " has been created using GrailsMicronautBeanProcessor in a separate Micronaut ApplicationContext."
+ " Please, consider annotating the injection point with @Inject and switching the compatibility mode to MicronautGrailsApp.Compatibility.STRICT.\n"
+ " See https://agorapulse.github.io/micronaut-grails/#_grails_4 for more details!"
);
}

Optional bean = micronautContext.findBean(micronautBeanType, micronautQualifier);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import io.micronaut.context.env.DefaultEnvironment;
import io.micronaut.core.convert.ArgumentConversionContext;
import io.micronaut.core.convert.ConversionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.AbstractEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MapPropertySource;
Expand All @@ -30,6 +32,8 @@

class GrailsPropertyTranslatingEnvironment extends DefaultEnvironment {

private static final Logger LOGGER = LoggerFactory.getLogger(GrailsPropertyTranslatingEnvironment.class);

private final Environment environment;
private final PropertyTranslatingCustomizer customizer;

Expand All @@ -47,6 +51,10 @@ class GrailsPropertyTranslatingEnvironment extends DefaultEnvironment {
mps.getSource().forEach((k, v) -> {
Optional<String> expectedPrefix = expectedMapProperties.stream().filter(k::startsWith).findFirst();
if (expectedPrefix.isPresent()) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("Prefix " + expectedPrefix + " is mapped to map property."
+ " This only works in LEGACY compatibility mode but it might work natively in different modes.");
}
String[] parts = k.split("\\.");
Map<String, Object> currentLevelMap = multilayer;
String prefix = "";
Expand Down Expand Up @@ -104,7 +112,15 @@ public boolean containsProperty(@Nullable String name) {
return false;
}

return alternativeNames.stream().anyMatch(environment::containsProperty);
Optional<String> alternative = alternativeNames.stream().filter(environment::containsProperty).findFirst();
if (alternative.isPresent()) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("Using alternative property name '" + alternative.get() + "' instead of '" + name + "'!"
+ " This is only supported in LEGACY mode. Please declare the property directly as '" + name + "'.");
}
return true;
}
return false;
}

@Override
Expand All @@ -130,6 +146,10 @@ public <T> Optional<T> getProperty(@Nullable String name, ArgumentConversionCont
Object altProperty = environment.getProperty(alternativeName, Object.class);
Optional<T> alternativeValue = ConversionService.SHARED.convert(altProperty, type, conversionContext);
if (alternativeValue.isPresent()) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("Property '" + name + "' has been loaded using the value of '" + alternativeName + "' property!"
+ " This is only supported in LEGACY mode. Please declare the property directly as '" + name + "'.");
}
return alternativeValue;
}
}
Expand Down

0 comments on commit 7bc30b8

Please sign in to comment.