Comments (6)
you actually shouldn't need the nullable annotation
from micronaut-core.
I just tried it without the nullable annotation. It still throws an exception: Message: Could not resolve placeholder ${SOME_OPTIONAL_VALUE_PLACEHOLDER}
from micronaut-core.
Looking through the code and change history, I've narrowed down the change that has caused the issue.
In #9701, @dstepanov removed a try-catch statement in the DefaultPropertyPlaceholderResolver::resolvePlaceholders()
function which originally would have returned an Optional.empty()
should a placeholder not be resolved, which would then be checked in the AbstractInitializableBeanDefinition::resolvePropertyValue()
at line 2135 (https://github.com/micronaut-projects/micronaut-core/blob/4.5.x/inject/src/main/java/io/micronaut/context/AbstractInitializableBeanDefinition.java#L2135) by calling argument.isDeclaredNullable()
.
Now, since the DefaultPropertyPlaceHolderResolver
simply throws a ConfigurationException
without catching it and then determining if the argument was nullable, the application crashes, changing previous behavior of the framework.
I propose we reintroduce this try-catch statement to preserve original behavior.
from micronaut-core.
I should have added this before, but here's the relevant stack-trace for my bug:
Caused by: io.micronaut.context.exceptions.ConfigurationException: Could not resolve placeholder ${SOME_PLACEHOLDER}
at io.micronaut.context.env.DefaultPropertyPlaceholderResolver$PlaceholderSegment.getValue(DefaultPropertyPlaceholderResolver.java:391)
at io.micronaut.context.env.DefaultPropertyPlaceholderResolver.resolveRequiredPlaceholdersObject(DefaultPropertyPlaceholderResolver.java:116)
at io.micronaut.context.env.PropertySourcePropertyResolver.resolvePlaceHoldersIfNecessary(PropertySourcePropertyResolver.java:791)
at io.micronaut.context.env.PropertySourcePropertyResolver.getProperty(PropertySourcePropertyResolver.java:388)
at io.micronaut.core.value.PropertyResolver.getProperty(PropertyResolver.java:140)
at io.micronaut.core.value.PropertyResolver.getProperty(PropertyResolver.java:157)
at io.micronaut.context.env.DefaultPropertyPlaceholderResolver.resolveOptionalExpression(DefaultPropertyPlaceholderResolver.java:245)
at io.micronaut.context.env.DefaultPropertyPlaceholderResolver$PlaceholderSegment.findValue(DefaultPropertyPlaceholderResolver.java:398)
at io.micronaut.context.env.DefaultPropertyPlaceholderResolver.resolvePlaceholders(DefaultPropertyPlaceholderResolver.java:96)
at io.micronaut.context.DefaultApplicationContext.resolvePlaceholders(DefaultApplicationContext.java:649)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolvePropertyValue(AbstractInitializableBeanDefinition.java:2101)
at io.micronaut.context.AbstractInitializableBeanDefinition.getPropertyPlaceholderValueForConstructorArgument(AbstractInitializableBeanDefinition.java:1437)
at XXXXXXXXX.$XXXXXXXX$XXXXXXXXXXXXX1$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2311)
from micronaut-core.
In another note, the Segment
interface that the PlaceholderSegment
class overrides has a default implementation for findValue()
that explicitly catches the ConfigurationException
, but the overridden version of that function does not, breaking the contract of the interface itself.
from micronaut-core.
Submitted PR #10798 for review.
from micronaut-core.
Related Issues (20)
- Optional list query parameter defaults to list with a single element
- ConversionErrorHandler not being used after upgrading to 4.4.2
- Can't use micronaut annotations processors with spring app HOT 1
- Make empty body configurable behaviour HOT 8
- No backing TransactionOperations configured during test execution HOT 1
- Nonsensical error due to typo in AbstractInitializableBeanIntrospection
- Micronaut 4: migration issues HOT 5
- Fail compilation if attempting to replace a bean with one that doesn't extend a shared type
- POST Forms are limited to 128 fields with netty-codec-http dependency >= 4.1.108.Final
- Thread pinning in Netty-based Micronaut HTTP Client HOT 1
- JdkBlockingHttpClient throw java.net.ConnectException: Address already in use: getsockopt with concurency 50 HOT 1
- Unable to set micronaut.http.client.channel-options through YML configuration
- Bean classes cannot be instantiated when constructor calls method HOT 5
- Reordering constructors breaks intercepted factory bean compilation
- Beans created by factories have their interceptor(s) from factory method rather than the bean classes HOT 4
- NettyHttpClient fails in tests with MockBean(HttpClient.class) due to casting error
- Can't find micronautserviceconfigs when running on the modulepath HOT 1
- Http filter recieves null response in a case of an error HOT 2
- "Multiple possible bean candidates found" error in IntelliJ HOT 1
- StreamingFileUpload with Multipart Form Data materialises in RAM when QueryParam is used in Controller and query param is not sent
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from micronaut-core.