我正在实现一些IHE ITI HL7配置文件,并且我已经生成了JaxB类的可用模式。最近我发现不同版本的架构之间存在一些差异。特别是,一些XML元素现在是XML属性。
以前,typeCode属性已映射到XML元素,请参阅下面的示例:
<acknowledgement>
<typeCode code="AE"/>
</acknowledgement>
现在,typecode属性被映射到XML属性,请参见下面的示例:
<acknowledgement typeCode="AE"/>
有没有什么方法可以让一个类使用任何注释或其他可能来处理带有这些形式中的任何一种形式的类型代码的消息?更好的是,有没有办法让XJC生成器自动为我做,也许有某种绑定?
目前它只是一个带有@XmlAttribute注释的字段。
答案 0 :(得分:2)
如果你愿意让自己的手变得有点脏,你可以使用XJC插件很好地完成这个任务。 XJC有一个插件工具,允许您在使用Sun Codemodel API构建模型类时访问它们。需要进行一些争论才能开始,但是一旦你弄清楚基础知识,在JAXB模型生成过程中做各种有用的事情并不难。有一个很好的教程here。
现在,假设您有一些配置告诉您哪些元素现在是属性,我想您可以修改模型类,使其看起来像:
public class MyModel
{
// this part is automatically generated by xjc
@XmlAttribute
public String foo;
// you add this with your custom xjc plugin
@XmlElement(name="foo")
public String getFooElement() { return foo; }
public void setFooElement(String newFoo) { foo = newFoo; }
}
我实际上没有测试过这个理论,但是手动修改模型类以查看一般的想法是否有效应该非常容易。