Skip to content

java.lang.NoSuchMethodException is logged on Text.text expression with length parameter #1617

@valfirst

Description

@valfirst

To Reproduce

import net.datafaker.Faker;

public class Test
{
    public static void main(String[] args)
    {
        Faker faker = new Faker();

        // Passed
        System.out.println(faker.text().text(7));

        // Failed
        System.out.println(faker.expression("#{Text.text '7'}"));
    }
}

Actual behavior
The error is logged (the output is created using 2.4.1 version):

twrdeyi
Aug 19, 2025 10:41:45 PM net.datafaker.service.FakeValuesService coerceArguments
SEVERE: Unable to coerce 7 to TextRuleConfig via TextRuleConfig(String) constructor
net.datafaker.service.FakeValuesService$NoSuchMethodRuntimeException: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)
	at net.datafaker.service.FakeValuesService.getConstructorWithString(FakeValuesService.java:1202)
	at net.datafaker.service.FakeValuesService.coerceArguments(FakeValuesService.java:1085)
	at net.datafaker.service.FakeValuesService.accessor(FakeValuesService.java:984)
	at net.datafaker.service.FakeValuesService.lambda$retrieveMethodAccessor$25(FakeValuesService.java:949)
	at java.base/java.util.Map.computeIfAbsent(Map.java:1067)
	at net.datafaker.service.FakeValuesService.retrieveMethodAccessor(FakeValuesService.java:949)
	at net.datafaker.service.FakeValuesService.resolveFakerObjectAndMethod(FakeValuesService.java:931)
	at net.datafaker.service.FakeValuesService.resolveExpression(FakeValuesService.java:808)
	at net.datafaker.service.FakeValuesService.resExp(FakeValuesService.java:722)
	at net.datafaker.service.FakeValuesService.resolveExpression(FakeValuesService.java:646)
	at net.datafaker.service.FakeValuesService.expression(FakeValuesService.java:521)
	at net.datafaker.providers.base.BaseFaker.expression(BaseFaker.java:411)
	at Test.main(Test.java:13)
Caused by: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)
	at java.base/java.lang.Class.getConstructor0(Class.java:3833)
	at java.base/java.lang.Class.getConstructor(Class.java:2501)
	at net.datafaker.service.FakeValuesService.getConstructorWithString(FakeValuesService.java:1200)
	... 12 more
Caused by: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)


jyjkwiwgccvvdchmgjyjdggbdxhgrnoaskzxkzoxjvmmyhdactsjmnqyzbfpqammoxhakisjglmhbc

Expected behavior
No errors is logged.

Versions:
This is a regression bug introduced in datafaker 2.4.1 (reproduced in 2.4.2, 2.4.3, 2.4.4).

Additional context
The bug is not reproduced in 2.4.0, but the result in this version is incorrect as well:

dgjciuz
kwnunlhctbggvxteqyoofbpotllbeyofqlqgtuirerwptelembbtjxlyekdbebzbvk

Pay attention to the second string generated, its length is not equal to 7.

However the issue with the length is fixed in 2.4.3:

rqsaarc
Aug 19, 2025 10:53:40 PM net.datafaker.service.FakeValuesService coerceArguments
SEVERE: Unable to coerce 7 to TextRuleConfig via TextRuleConfig(String) constructor
net.datafaker.service.FakeValuesService$NoSuchMethodRuntimeException: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)
	at net.datafaker.service.FakeValuesService.getConstructorWithString(FakeValuesService.java:1247)
	at net.datafaker.service.FakeValuesService.coerceArguments(FakeValuesService.java:1130)
	at net.datafaker.service.FakeValuesService.accessor(FakeValuesService.java:987)
	at net.datafaker.service.FakeValuesService.lambda$retrieveMethodAccessor$25(FakeValuesService.java:950)
	at java.base/java.util.Map.computeIfAbsent(Map.java:1067)
	at net.datafaker.service.FakeValuesService.retrieveMethodAccessor(FakeValuesService.java:950)
	at net.datafaker.service.FakeValuesService.resolveFakerObjectAndMethod(FakeValuesService.java:932)
	at net.datafaker.service.FakeValuesService.resolveExpression(FakeValuesService.java:809)
	at net.datafaker.service.FakeValuesService.resExp(FakeValuesService.java:723)
	at net.datafaker.service.FakeValuesService.resolveExpression(FakeValuesService.java:647)
	at net.datafaker.service.FakeValuesService.expression(FakeValuesService.java:522)
	at net.datafaker.providers.base.BaseFaker.expression(BaseFaker.java:411)
	at Test.main(Test.java:13)
Caused by: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)
	at java.base/java.lang.Class.getConstructor0(Class.java:3833)
	at java.base/java.lang.Class.getConstructor(Class.java:2501)
	at net.datafaker.service.FakeValuesService.getConstructorWithString(FakeValuesService.java:1245)
	... 12 more

Caused by: java.lang.NoSuchMethodException: net.datafaker.providers.base.Text$TextRuleConfig.<init>(java.lang.String)

laixilu

Pay attention to the last string generated, its length is equal to 7.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions