gpt4 book ai didi

java - 为什么更改传递给 XJC 的包名称会破坏 JAXB 生成?

转载 作者:行者123 更新时间:2023-12-04 05:29:26 24 4
gpt4 key购买 nike

我正在使用 XJC 从 HTNG 支付系统模式生成 Java 类,该模式位于 this zip 的/schemas 目录中。 .

如果我在没有通过 -p 的情况下运行 XJC参数,生成工作正常,并且在 org.htng._2009b 下生成类包裹:

$ cd schemas
$ xjc -mark-generated -no-header -target 2.1 -npa .

我要做的就是将生成的类的包名称更改为更适合项目的名称,例如 com.justin.htng :
$ cd schemas
$ xjc -mark-generated -no-header -target 2.1 -npa -p com.justin.htng .

但是,这样做会极大地破坏 JAXB 生成,几乎在每个元素上都会引发碰撞错误。我可以通过第一种方法生成类,然后将它们重构为 com.justin.htng 来解决这个问题。包,但这不是很可维护,并且不能很好地移植到 maven-jaxb2-plugin。

有人可以解释为什么会发生这种情况,以及是否有办法使用 XJC 解决它? 我觉得如果 JAXB 通过第一种方法工作,它应该通过第二种方法工作,因为需要做的只是对包名称进行简单的字符串替换。我想我可以使用第二种方法并通过 .xjb 绑定(bind)文件处理所有冲突,但考虑到错误的数量,这将是乏味的。

最佳答案

当我跑

xjc -mark-generated -no-header -target 2.1 -npa .

我得到了两组生成的类,一组在名为 generated 的包中。另一个在 org.htng._2009b . HTNG_CommonTypes.xsd架构没有 targetNamespace ,所以当它被直接编译时,它的类型最终会出现在 generated包裹。但是 HTNG_CommonTypes也被其他模式导入,它们确实声明了 targetNamespace .在导入的案例中编译公共(public)类型时,它们最终会出现在 org.htng._2009b 中。 .

现在,如果您指定 -p xjc 的选项,它覆盖了所有命名空间的命名空间到包的映射,因此命名空间类型和非命名空间类型都映射到同一个包,因此名称冲突。

我怀疑这里正确的解决方案是不编译 CommonTypes架构独立,但仅编译导入它的架构。以下对我有用:
xjc -mark-generated -no-header -target 2.1 -npa -p com.justin.htng HTNG_P*.xsd

关于java - 为什么更改传递给 XJC 的包名称会破坏 JAXB 生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12803117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com