Skip to content

XJC: DTD: Regression: MessageBundle.properties contains an illegal format for MessageFormat #1841

@asbachb

Description

@asbachb

Introduced by ccae74a #1805

When a dtd contains a list and xjc tries to generate code from that schema the creation fails due to an illegal format: can't parse argument number: @code set

(I guess this problem is not limited to dtd model generation)

Test to reproduce:

    @Test
    public void javadocRegression() throws Exception {
        final OptionsEx opt = new OptionsEx();
        opt.setSchemaLanguage(Language.DTD);
        opt.compatibilityMode = Options.EXTENSION;

        opt.addGrammar(
            new InputSource(
                new ByteArrayInputStream("<!ELEMENT AnElement1 (#PCDATA)>\n<!ELEMENT AnElement2 (#PCDATA)>\n<!ELEMENT AnElement (AnElement1 | AnElement2)>".getBytes())
            )
        );

        Model model = ModelLoader.load(
            opt,
            new JCodeModel(),
            null
        );
        model.generateCode(opt, null);
        
        //model.codeModel.build(Files.createTempDirectory("jaxb").toFile());
    }

Full stracktrace for test:

java.lang.IllegalArgumentException: can't parse argument number: @code set
	at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1485)
	at java.base/java.text.MessageFormat.applyPattern(MessageFormat.java:512)
	at java.base/java.text.MessageFormat.<init>(MessageFormat.java:383)
	at java.base/java.text.MessageFormat.format(MessageFormat.java:883)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.Messages.format(Messages.java:37)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.AbstractListField.appendJavadoc(AbstractListField.java:153)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.UntypedListField.generateAccessors(UntypedListField.java:108)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.AbstractListField.generate(AbstractListField.java:108)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.UntypedListField.<init>(UntypedListField.java:83)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:48)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.field.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:53)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:781)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:551)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:233)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:141)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.model.Model.generateCode(Model.java:259)
	at org.glassfish.jaxb.xjc@4.0.6-SNAPSHOT/com.sun.tools.xjc.XjcDtdPluginTest.javadocRegression(XjcDtdPluginTest.java:102)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: java.lang.NumberFormatException: For input string: "@code set"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Integer.parseInt(Integer.java:662)
	at java.base/java.lang.Integer.parseInt(Integer.java:778)
	at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1483)
	... 42 more

/cc @laurentschoelens

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions