我想知道是否有办法强制JAXB创建与XSD架构相同的名称空间前缀。即使我从其中包含xmlns:cts =“http://cts.com”的模式创建JAXB类,在编组该类之后,我得到一个带有xmlns:ns1前缀的XML。我知道我可以通过使用NamespacePrefixMapper类来覆盖它们,但是当我的XSD明确定义默认前缀时,为什么我需要手动执行此操作?我在当前的XML中有大量的前缀,因此在初始xjc生成之后,手动更改包级声明或类注释也是一个巨大的返工。我正在处理具有10+ XSD导入和5000多个元素的基础XSD,以及数十个根元素。
端点系统不受我们控制,因此我必须关心XML中使用的前缀,因为它们没有正确的XML处理实现。
这有什么捷径吗?感谢您的所有投入。
此致 GOKHAN
答案 0 :(得分:2)
最简单的捷径是XML的生产者和使用者使用标准的XML处理工具。你说这在你的情况下不起作用。
结果是,为了防止您的数据消费者学习使用现有的现成XML工具,您将不得不努力生成不仅正确的XML而且正确的XML在大多数XML软件旨在隐藏的抽象层次上满足额外的任意临时约束。如果他们是非常好的客户,这可能是值得的。
具体来说,我要么(1)找到一种方法来自动化你想要对JaxB生成的类进行的配置更改,或者(2)编写一个简单的SAX过滤器来规范化名称空间前缀,并运行数据过滤出门的过滤器。第二种方法的优点是可以将您的数据消费者的关注点转移到您自己处理的外围,让您更专注于您更关心的事情。