当前位置: 首页 > 知识库问答 >
问题:

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

廖夜洛
2023-03-14

我使用XJC从HTNG支付系统模式生成Java类,可以在这个zip的/schemas目录中找到。

如果我在不传递 -p 参数的情况下运行 XJC,则生成工作正常,并且在org.htng._2009b包下生成类:

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

我想做的只是将生成的类的包名改为更适合项目的名称,例如< code>com.justin.htng:

$ cd schemas
$ xjc -mark-generated -no-header -target 2.1 -npa -p com.justin.htng .

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

有人能解释为什么会发生这种情况吗?是否有办法用XJC解决它?我觉得如果JAXB是通过第一种方法工作的,那么它应该通过第二种方法工作,因为需要做的只是简单地用String替换包名。我想我可以使用第二种方法,并通过.xjb绑定文件处理所有冲突,但考虑到错误的数量,这会很繁琐。

共有1个答案

王俊哲
2023-03-14

当我奔跑的时候

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

我得到了两组生成的类,一组在名为 generate 的包中,另一组在org.htng._2009b中。HTNG_CommonTypes.xsd 架构没有目标命名空间,因此在直接编译时,其类型将最终出现在生成的包中。但是HTNG_CommonTypes也由其他架构导入,这些架构声明了目标命名空间。在导入的事例中编译常见类型时,它们最终会org.htng._2009b

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

我怀疑这里正确的解决方案不是独立编译CommonTypes模式,而是只编译导入它的模式。以下内容对我有效:

xjc -mark-generated -no-header -target 2.1 -npa -p com.justin.htng HTNG_P*.xsd
 类似资料:
  • 问题内容: 实际上,我已经找到导致问题的原因。我的问题是为什么现在加入到你的断? 原始问题 对我来说,最简单的CSS任务似乎失败了:不保持元素相对于视点的位置。考虑以下样式表: 首次加载页面时,定位正确。但是,视口的任何更改(例如滚动或调整大小)都不会影响元素的位置。可以这么说,它无法使其位置适应新的视口。 足够奇怪的是,该站点显示了如何工作,实际上在我的浏览器中正常工作,没有任何问题! 因此,问

  • 问题内容: 在我的本地路由http:// localhost:9000 /#/ deviceDetail /中, 我有一个控制器来管理该视图。在进入该视图之前,我将一些变量设置为( 例如)。 一旦进入该视图,我就可以访问仪表盘属性,但是例如当我用键刷新页面时,该属性仪表盘就会丢失。 我试图将localSave变量保存,但是该方法遇到了循环引用问题。 有什么技巧可以解决吗? 问题答案: Angula

  • 下面是两张PNG图片: 从视觉上看,它们是完全一样的--唯一的区别是一个在某些像素中有半透明的背景(你可以下载图像来检查)。 但是当我在JavaFX节点上使用这些图像作为图像光标时,我得到了以下结果: 在与问题搏斗了一会之后,我发现了解释这种差异--混合模式的算法: > “预期”的方法(例如,您可以在此浏览器中看到)是取每个通道的值之和,并用alpha值加权:。 “JavaFX游标”给出了不同的公

  • 简而言之,主类是,它是的扩展。还有另一个非常重要的类,称为,它充当主类的。 我注意到的第一个奇怪的事情是查看器没有对控制器的引用。构造函数实例化的匿名实例,如下所示: 在我看来,这似乎是一个糟糕的设计选择,因为控制器有大量的方法(选项、切换等--如下所示的示例),这些方法现在根本无法访问,那么它们有什么好处呢? 然而,后来我想到了更奇怪的事情!如果监听器的这个匿名实例没有引用,为什么还允许它生存呢

  • 我有以下xml类型: FaxNumber类型如下所示: 生成的xml应该如下所示: 运行JAXB XJC从XSD生成java类时,它会生成以下类: 但是,我想绑定FaxNumber到这样的复合类: 有没有办法在JAXB绑定xml中定义这样的绑定? 注意:不幸的是,我无法控制并且无法更改XSD

  • 我注意到一个问题,当从shell脚本循环运行多个adb命令时,大多数命令都不会执行。 这是一个示例脚本。 脚本名称:: 注释掉adb命令的输出 我连接了5台设备。在不使用theadab命令的情况下从bash文件运行时,这是输出。它遍历5个循环中的每一个。 包含ADB命令的循环输出 当取消注释adb shell命令时,它只会正确地迭代第一个循环的行。这是未注释adb命令时的输出: 有人能解释一下这种