Java 多个客户端需要不同的JAXB注释
我有一个类可能被多个客户端(即GUI、外部系统等)使用 对于一个客户机,我不希望生成的XML包含类中的所有详细信息,因此我用XmlTransient标记了要隐藏的详细信息Java 多个客户端需要不同的JAXB注释,java,jaxb,Java,Jaxb,我有一个类可能被多个客户端(即GUI、外部系统等)使用 对于一个客户机,我不希望生成的XML包含类中的所有详细信息,因此我用XmlTransient标记了要隐藏的详细信息 @XmlRootElement class A { String field = "Hello World"; @XmlTransient public String getField() { return field; } } 问题是,另一个客户端需要查看该数据,而现在它被隐
@XmlRootElement
class A {
String field = "Hello World";
@XmlTransient
public String getField() {
return field;
}
}
问题是,另一个客户端需要查看该数据,而现在它被隐藏了
如果我有两个客户想要几乎相同的数据,我该如何满足这一要求?我通过扩展A和适当注释来满足每个客户的需求:
@XmlRootElement
class B extends A {
@XmlTransient
public String getField() {
return super.getField();
}
}
@XmlRootElement
class C extends A {
public String getField() {
return super.getField();
}
}
这是可行的,但似乎很麻烦。还有其他的方法吗?我意识到,在我展示的实例中,我可以使用XmlJavaAdapter,但在我的实际代码中,我所指的数据可能是复合对象的一部分,XmlJavaAdapter似乎不合适
希望这一切都有意义 注意:我是专家组的负责人和成员 正如所提到的,您可以使用MOXy扩展来完成这个用例。MOXy提供了将映射元数据表示为XML的能力。这意味着您可以提供一个映射作为注释,再加上其他映射作为XML 下面是一个示例链接,其中单个对象模型映射到Google和Yahoo气象服务的结果:
- 我想莫西没有空(如果我错了,请纠正我)
我的免费解决方案是在JAXB对象中使用一个额外的“version”字段来区分绑定的多个版本。通常,我使用enum作为其类型,即。,
枚举版本{V1,V2,…}
对于原始示例,我将getField()方法定义为
@XmlElement
public String getField() {
if (version == Version.V1) {
return field;
} else if (version == Version.V2) {
return null; // hidden
}
}
对于客户端1,我将版本值设置为version.V1,然后对Java对象进行马歇尔处理;与客户端2相同,我将在编组之前将版本值更改为version.v2 标准JAXB不是实现这一点的合适工具,您需要将映射描述符外部化。不过,像MOXy这样的专有扩展可能能够做到这一点。
@XmlElement
public String getField() {
if (version == Version.V1) {
return field;
} else if (version == Version.V2) {
return null; // hidden
}
}