我有一系列XML消息,它们都有自己的模式和名称空间。消息目前使用JAXB(我们仍然生活在Java 1.4环境中)进行编组,并且我们拥有大量的使用JAXB代码的遗留代码,所以任何解决方案都需要最小程度的侵入。
我的问题是,虽然每个消息都有一组公共头标记,但命名空间覆盖了整个消息,因此也使每个消息的头唯一。因此,“common”头部分使用一个公共类加载到命名空间绑定版本中,该公共类使用非常难看的代理类和动态反射代码实现。这个公共类被认为是一些性能问题的根源。
理想情况下,我希望使用以下方法实现替换:
-
使用maven2替换当前的手工jaxb构建过程。
-
为每个消息中重用的“common”头生成一次性jaxb类。
-
将当前动态/代理类转换为使用上述具体头类。
-
为每条消息的unqiue部分生成jaxb类。
不幸的是,我无法控制消息结构,否则我将考虑创建一个单独的“header”命名空间。我想在封送处理之后和解封之前运行一个xslt转换来“重命名”头名称空间,但是如果可能的话,我希望避免额外的加载,即使这意味着更复杂的构建。
我想做的是可行的还是遗漏了一些基本的东西?关于如何实现有什么提示吗?插件版本等?
附录1
:绑定使用
贾瓦提
会做这项工作,但似乎对复杂类型不起作用。
附录2
:绑定使用
班
也差不多,但我希望它指定一个特定的类
和
包以便忽略生成的重复项。