[英]JAXB with inheritance but without using child element names
我正在使用无法更改的供应商系统中的XML,并且正在尝试将JAXB与它一起使用。 XML用于REST之类的API。 请参阅下面的几个消息示例。 每个请求/消息都具有称为MsgRequest的相同根元素名称,它包含每个请求中的几个公共元素,但也包含依赖于消息类型的元素。
<!-- request 1 -->
<MsgRequest>
<SubType>GetUser</SubType>
<RequestID>1</RequestID>
<UserName>joe</UserName>
</MsgRequest>
<!-- request 2 -->
<MsgRequest>
<SubType>GetCompany</SubType>
<RequestID>2</RequestID>
<CompanyName>joe</CompanyName>
</MsgRequest>
从Java的角度来看,我可以使用继承对其进行建模。
class BaseMessage {
String subType;
Integer requestID;
};
class GetUserMessage {
String userName;
};
class GetCompanyMessage {
String companyName;
};
我不明白如何使用JAXB表示此XML。 我做了一些研究,发现XMLElementRef,但是它将封送被引用元素的名称,这不是我想要的。
希望我缺少明显的东西。 任何建议表示赞赏。
XML并非旨在适合任何特定语言甚至范式。 这意味着,但是您可以设计一个可以由Java类层次结构表示的XML,但不能保证您所使用的某些XML结构可以映射到类层次结构。 考虑到XML解析器必须能够根据元素的标记名确定XML元素的(复杂)类型。 因此,如果您有两个标记为<MsgRequest>
元素,则必须将它们映射到单个Java类型。
您可以使用必需的字段subType和requestID以及可选的(minOccurs = 0)字段userName和companyName为单个复杂类型编写XML Schema。 它不是很好的OO风格,但是会生成您的XML。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.