为什么 xjc 在这个 RelaxNG 紧凑模式上会阻塞?
Why does xjc choke on this RelaxNG compact schema?
我正在尝试使用 xjc
从 OpenGL API Registry 的 RelaxNG 模式生成 JAXB 绑定。它正在抛出 NullPointerException
:
$ xjc -cp jaxb-extra-osgi-2.2.7.jar -relaxng-compact registry.rnc
parsing a schema...
Exception in thread "main" java.lang.NullPointerException
at com.sun.tools.internal.xjc.reader.Ring.get(Ring.java:82)
at com.sun.tools.internal.xjc.model.CPropertyInfo.<init>(CPropertyInfo.java:110)
at com.sun.tools.internal.xjc.model.CSingleTypePropertyInfo.<init>(CSingleTypePropertyInfo.java:57)
at com.sun.tools.internal.xjc.model.CAttributePropertyInfo.<init>(CAttributePropertyInfo.java:58)
at com.sun.tools.internal.xjc.reader.relaxng.ContentModelBinder.onAttribute(ContentModelBinder.java:119)
at com.sun.tools.internal.xjc.reader.relaxng.ContentModelBinder.onAttribute(ContentModelBinder.java:55)
at com.sun.xml.internal.rngom.digested.DAttributePattern.accept(DAttributePattern.java:58)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onContainer(DPatternWalker.java:66)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onGroup(DPatternWalker.java:87)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onGroup(DPatternWalker.java:51)
at com.sun.xml.internal.rngom.digested.DGroupPattern.accept(DGroupPattern.java:59)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.bindContentModel(RELAXNGCompiler.java:150)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.compile(RELAXNGCompiler.java:143)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.build(RELAXNGCompiler.java:108)
at com.sun.tools.internal.xjc.ModelLoader.loadRELAXNG(ModelLoader.java:592)
at com.sun.tools.internal.xjc.ModelLoader.loadRELAXNGCompact(ModelLoader.java:580)
at com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:151)
at com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:104)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:318)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:185)
at com.sun.tools.internal.xjc.Driver._main(Driver.java:108)
at com.sun.tools.internal.xjc.Driver.access[=10=]0(Driver.java:65)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:88)
我的类路径中还缺少其他东西吗?
我知道 RelaxNG 支持是实验性的,所以它可能刚刚失效。作为解决方法,我使用 Trang:
将模式转换为 XSD
$ java -jar trang.jar -I rnc -O xsd registry.rnc registry.xsd
您的堆栈跟踪似乎与独立版本的 JAXB RI 中的一个已知缺陷 (JAXB-1066) 匹配。也许这与 JDK 中的问题相同。错误报告提出了一个补丁,但还没有人对此发表评论。
我正在尝试使用 xjc
从 OpenGL API Registry 的 RelaxNG 模式生成 JAXB 绑定。它正在抛出 NullPointerException
:
$ xjc -cp jaxb-extra-osgi-2.2.7.jar -relaxng-compact registry.rnc
parsing a schema...
Exception in thread "main" java.lang.NullPointerException
at com.sun.tools.internal.xjc.reader.Ring.get(Ring.java:82)
at com.sun.tools.internal.xjc.model.CPropertyInfo.<init>(CPropertyInfo.java:110)
at com.sun.tools.internal.xjc.model.CSingleTypePropertyInfo.<init>(CSingleTypePropertyInfo.java:57)
at com.sun.tools.internal.xjc.model.CAttributePropertyInfo.<init>(CAttributePropertyInfo.java:58)
at com.sun.tools.internal.xjc.reader.relaxng.ContentModelBinder.onAttribute(ContentModelBinder.java:119)
at com.sun.tools.internal.xjc.reader.relaxng.ContentModelBinder.onAttribute(ContentModelBinder.java:55)
at com.sun.xml.internal.rngom.digested.DAttributePattern.accept(DAttributePattern.java:58)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onContainer(DPatternWalker.java:66)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onGroup(DPatternWalker.java:87)
at com.sun.xml.internal.rngom.digested.DPatternWalker.onGroup(DPatternWalker.java:51)
at com.sun.xml.internal.rngom.digested.DGroupPattern.accept(DGroupPattern.java:59)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.bindContentModel(RELAXNGCompiler.java:150)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.compile(RELAXNGCompiler.java:143)
at com.sun.tools.internal.xjc.reader.relaxng.RELAXNGCompiler.build(RELAXNGCompiler.java:108)
at com.sun.tools.internal.xjc.ModelLoader.loadRELAXNG(ModelLoader.java:592)
at com.sun.tools.internal.xjc.ModelLoader.loadRELAXNGCompact(ModelLoader.java:580)
at com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:151)
at com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:104)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:318)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:185)
at com.sun.tools.internal.xjc.Driver._main(Driver.java:108)
at com.sun.tools.internal.xjc.Driver.access[=10=]0(Driver.java:65)
at com.sun.tools.internal.xjc.Driver.run(Driver.java:88)
我的类路径中还缺少其他东西吗?
我知道 RelaxNG 支持是实验性的,所以它可能刚刚失效。作为解决方法,我使用 Trang:
将模式转换为 XSD$ java -jar trang.jar -I rnc -O xsd registry.rnc registry.xsd
您的堆栈跟踪似乎与独立版本的 JAXB RI 中的一个已知缺陷 (JAXB-1066) 匹配。也许这与 JDK 中的问题相同。错误报告提出了一个补丁,但还没有人对此发表评论。