javaee / jaxb-v2

Other
210 stars 99 forks source link

NPE with reference property referencing a CClassRef #1097

Open glassfishrobot opened 8 years ago

glassfishrobot commented 8 years ago

I've encountered an XJC bug in the following report:

https://github.com/highsource/maven-jaxb2-plugin/issues/90

Minimal reproducing test case attached. Just run

xjc two.xsd -extension -b one.xjb

To get an NPE:

Caused by: java.lang.NullPointerException
    at com.sun.tools.xjc.generator.bean.field.AbstractField.annotateReference(AbstractField.java:198)
    at com.sun.tools.xjc.generator.bean.field.AbstractField.annotate(AbstractField.java:161)
    at com.sun.tools.xjc.generator.bean.field.AbstractListField.generate(AbstractListField.java:129)
    at com.sun.tools.xjc.generator.bean.field.UntypedListField.<init>(UntypedListField.java:112)
    at com.sun.tools.xjc.generator.bean.field.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:77)
    at com.sun.tools.xjc.generator.bean.field.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:82)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:777)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:558)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:261)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:169)
    at com.sun.tools.xjc.model.Model.generateCode(Model.java:288)
    at org.jvnet.mjiip.v_2_2.XJC22Mojo.generateCode(XJC22Mojo.java:66)
    at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:41)
    at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:28)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:505)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:328)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
    ... 20 more

The problem is that when we have a reference property which references the element one. If this element is made a CClassRef via binding. The CClassRef returns null as elementName so this lines:

https://github.com/gf-metro/jaxb/blob/master/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/generator/bean/field/AbstractField.java#L198-L200

are giving an NPE.

The solution would be to extract element name from the tt>@XmlRootElement</tt annotation of the CClassRef's class.

glassfishrobot commented 8 years ago

Reported by lexi

glassfishrobot commented 8 years ago

File: one.xjb Attached By: lexi

glassfishrobot commented 8 years ago

File: one.xsd Attached By: lexi

glassfishrobot commented 8 years ago

File: two.xsd Attached By: lexi

glassfishrobot commented 8 years ago

Was assigned to yaroska

glassfishrobot commented 7 years ago

This issue was imported from java.net JIRA JAXB-1097