我正在尝试使用 JAXB 从 XML 模式生成 java 文件。模式中的一种数据类型是具有大约 300 个可能值的字符串。由于这超过 256,默认情况下 xjc 不会为此类型生成枚举,而是使用字符串。由于我想生成枚举,因此我创建了一个具有以下内容的 bindings.xml:

<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb">
  <globalBindings typesafeEnumMaxMembers="1000" />
</bindings>

由于未知原因,这不起作用。 xjc 没有给我任何线索。起初我以为我没有包含文件,所以我检查了。我还试图故意将元素名称(如 globalBindings)拼错为 globalBinding,发现 xjc 提示无效元素——这显然意味着 xjc 读取了绑定(bind)文件。

但是,当我将 globalBindings 放在 xsd 中时,它工作得很好——生成了枚举。
<xs:schema ....>
  <xs:annotation>
    <xs:appinfo>
      <jaxb:globalBindings typesafeEnumMaxMembers="1000" />
    </xs:appinfo>
  </xs:annotation>
...
...
</xs:schema >

所以我的问题是如何不使用bingings.xml(由xjc读取)中设置的选项来自定义编译?我在这里想念什么?

非常感谢您的帮助。

最佳答案

我意识到当前目录的长度导致 xjc 忽略绑定(bind)配置。

执行以下命令失败或成功(与绑定(bind)相关)取决于项目的基目录:

xjc -extension  src/main/resources/schema/schema.xsd -b src/main/resources/schema/bindings.xjb  -d target/tmp

所以项目目录越短,成功的可能性就越大:
FAILS: C:/anydir/tstaaaaaaaaaaaaaaaa/asubdirectory/_this_is_any_project_directory_
FAILS: C:/anydir/tstaaaaaaaa/asubdirectory/_this_is_any_project_directory_
FAILS: C:/anydir/tstaaa/asubdirectory/_this_is_any_project_directory_
FAILS: C:/anydir/tstaa/asubdirectory/_this_is_any_project_directory_
WORKS: C:/anydir/tsta/asubdirectory/_this_is_any_project_directory_
WORKS: C:/anydir/tst/asubdirectory/_this_is_any_project_directory_

我的同事使用类似的环境(也是 Windows、相同的 JDK、相同的项目源)没有如此严格的长度限制。
所以我不知道是什么导致了这种限制。但是在我找到靠近根目录的项目源后,它对我有用。

关于jaxb2 - JAXB : globalBindings in bindings. xml 被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9367725/

10-10 14:59