1

更新 1:我用三个最小的 XSD 文件创建了这个问题的缩小范围,并在这个 SO question 中发布了一个关注问题本身(而不是xjc行为的随机性)的新问题。

更新 2:在此处发布了关于 JAXB 的错误跟踪器的问题报告。

我在一个设置中使用xjc的最新 2.2.7 JAXB RI实现,其中包含许多使用情节编译的xsd模式文件。我使用Ant进行构建,所以一切都是可重现的,对吗?错误的!事实证明,xjc代码生成失败并显示如下消息:

  [xjc] [ERROR] compiler was unable to honor this schemaBinding customization. It is attached to a wrong place, or its inconsistent with other bindings.
  [xjc]   line 581 of file:/home/boohaha/unableToHonorSchemaBinding/CEABase.xsd.episode
  [xjc] 
  [xjc] [ERROR] (the above customization is attached to the following location in the schema)
  [xjc]   line 9 of file:/home/boohaha/unableToHonorSchemaBinding/src/_int/esa/esavo/ivoa/jaxb/schemas/VOResource-v1.0.xsd
  [xjc] 

真正令人震惊的是xjc task( ant clean && ant)的连续 Ant 调用会产生不同的结果。编译再次失败,在同一目标(jaxb-vo.ceaservice)失败,消息的类型相同(无法兑现)但消息的细节不同(它抱怨其他文件中的其他行)。我做了一些实验,发现它抱怨有 4 或 5 个不同的位置(多次运行)。在所有情况下,它都是文件中的最后一个绑定,对我来说这表明xjc解析代码中存在错误。

但是,无论我的设置中的错误或错误是什么,代码生成器会表现出这种随机行为是不可想象的!我变得偏执并多次测试一切,没有互联网连接。同样的事情,随机性仍然存在(有趣的是,有些行比其他行出现得更频繁,但它始终是最后一个绑定)。您可以获取用例并自己尝试:

git clone https://github.com/mperdikeas/unable_to_honor.git && cd unable_to_honor && ant

我的问题是:

  1. 为什么我会收到此错误
  2. 代码生成器怎么可能xjc以随机方式失败,除非它使用一些“聪明”的线程来加快速度

更新 请参阅帖子顶部的更新说明。

4

0 回答 0