多年前,我编写了一个使用JAXB为XML模式生成Java绑定的应用程序。多年来,应用程序代码和模式已经进行了很多更新,但是自2008年以来JAXB jar仍然保持不变,那时我就开始在这个应用程序中使用JAXB。我一直在使用Ant来构建应用程序,包括生成和编译绑定,并且在至少两台XP Pro开发机器上一切正常。我对架构做了一些更改,从来没有考虑过JAXB。
最近,我尝试在新笔记本电脑上从头开始重建应用程序,并且构建仍然失败。新的64位笔记本电脑运行的是Windows 7 Pro,它有一个较新的JDK(1.7.0_45)和一个新版本的Ant(1.9.3)。通过切换到更新版本的ant(1.9.4)并切换到最新的JAXB jar,我能够解决一些奇怪的问题。在这一点上,我甚至不记得那些问题是什么(但我可以通过恢复到SVN中较旧的JAXB jar来重新创建它们。)
升级JAXB后,我遇到了新问题。首先,ant中的xjc任务似乎是以不同的方式解释target
属性;它抛出了一些错误,显然destdir
具有target
曾经具有的语义含义。
其次,此任务不再生成具有名称应以Type结尾的实现类的impl
包,因此我的其余代码会因一堆编译问题而失败。
有没有办法让新的JAXB版本向后兼容?我的其他选择是尝试更新代码以使用新绑定,这似乎是很多不必要的工作,或者恢复到旧的JDK和Ant。
答案 0 :(得分:1)
这是对原帖的迟回复。但作为其他人的参考应该是好的。我遇到了同样的问题。在尝试使用以后的JDK(8和7)重建JAXB 1.0方案/绑定的大部分尝试之后,这对我有用。
<xjc>
抛出ClassCastException,因此无法使用JAXB 1.0进行构建。然而,JDK 5&amp; 6工作。<xjc>
任务,将 target 属性替换为 deskdir <jxb:globalBindings>
中删除 - 我们使用 modelGroupBinding <xjc>
任务支持 source 属性的版本规范。然而,正如原始海报所发现的那样,支持&#34; 1.0&#34;在以后的JAXB发行版中删除了<xjc>
时出现错误消息
<xjc>
任务<xjc>
&#34; target&#34; 属性转换为此版本中&#34; deskdir&#34; 答案 1 :(得分:0)
您的旧项目似乎使用JAXB 1,而所有工具现在都默认使用JAXB 2.x.
在XJC任务中尝试以下操作:
source="1.0"
target="1.0"
请参阅以下文件: