-
Notifications
You must be signed in to change notification settings - Fork 227
Open
Description
Description
The reachability-metadata.json in DataFaker 2.5.3 is incomplete for GraalVM native-image support. Expression resolution like #{IDNumber.ssn_valid} fails in native images because several inner classes of FakeValuesService are not registered.
Error
java.lang.RuntimeException: Unable to resolve #{IDNumber.ssn_valid} directive for FakerContext
Missing Classes
The following inner classes are essential for expression resolution but are not included in META-INF/native-image/reachability-metadata.json:
net.datafaker.service.FakeValuesService$MethodResolvernet.datafaker.service.FakeValuesService$MethodAndCoercedArgsnet.datafaker.service.FakeValuesService$MethodAndCoercedArgsResolvernet.datafaker.service.FakeValuesService$ValueResolvernet.datafaker.service.FakeValuesService$SafeFetchResolvernet.datafaker.service.FakeValuesService$ConstantResolvernet.datafaker.service.FakeValuesService$RegExpContext
Reproduction
- Use DataFaker 2.5.3 in a Spring Boot 3.x application
- Call
faker.idNumber().valid()which uses#{IDNumber.ssn_valid}expression - Compile to native image with GraalVM
- Run native tests - expression resolution fails
Workaround
Add Spring RuntimeHintsRegistrar with the missing classes:
String[] serviceClasses = {
"net.datafaker.service.FakeValuesService$MethodResolver",
"net.datafaker.service.FakeValuesService$MethodAndCoercedArgs",
"net.datafaker.service.FakeValuesService$MethodAndCoercedArgsResolver",
"net.datafaker.service.FakeValuesService$ValueResolver",
"net.datafaker.service.FakeValuesService$SafeFetchResolver",
"net.datafaker.service.FakeValuesService$ConstantResolver",
"net.datafaker.service.FakeValuesService$RegExpContext"
};
for (String className : serviceClasses) {
hints.reflection().registerType(
classLoader.loadClass(className),
MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS,
MemberCategory.INVOKE_DECLARED_METHODS,
MemberCategory.INVOKE_PUBLIC_METHODS,
MemberCategory.DECLARED_FIELDS,
MemberCategory.PUBLIC_FIELDS
);
}Environment
- DataFaker version: 2.5.3
- GraalVM version: 21+
- Spring Boot: 3.4.x
- Java: 21
Expected Behavior
Expression resolution like #{IDNumber.ssn_valid} should work in native images without requiring additional configuration.
Metadata
Metadata
Assignees
Labels
No labels