我正在尝试生成一堆xml带注释的pojos。为此,我将所有xsd文件放在项目的资源文件夹中(它们来自polycom rmx sdk,RmxSdkApiV7_8-EMA_EMA-V7_8_0_303)。然后我右键单击每个(超过150个)去生成并单击JAXB类。我选择项目并给它一个命名空间而不是完成向导。执行此操作后,会发出警告,任何新生成的类都将覆盖现有类。这是我的问题,因为一些常用对象在不同的xsd文件中会有不同的定义。因此,当覆盖发生时,任何被定义的东西都会丢失。
例如,response_trans_conf.xsd将GET定义为
<xsd:element name="GET">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="CONFERENCE" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
其他模式文件(如trans_conf_2.xsd)将GET定义为
<xsd:element name="GET">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="ID"/>
<xsd:element ref="OBJ_TOKEN"/>
<xsd:any processContents="skip" minOccurs="0" maxOccurs="unbounded" namespace="##other"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
所以我最终会得到一个看起来像
的Get对象public class GET {
@XmlElement(name = "CONFERENCE")
protected ConferenceContent conference;
OR(分别)
public class GET {
@XmlElement(name = "ID", required = true)
protected BigInteger id;
@XmlElement(name = "OBJ_TOKEN", required = true)
protected String objtoken;
@XmlAnyElement
protected List<Element> any;
我需要的是一个两者结合的对象。就像我说的那样,这个sdk中有超过150个xsd文件。所以这个问题乘以其他几个常见的对象 FYI同时想要一个合并的课程,而不是一个被覆盖的课程我希望解决方案也可以防止重复一些如何。
答案 0 :(得分:0)
由于缺乏答案,我实施了一种解决方法,即手动添加缺少/需要的成员。
我确定ulab上面的评论也可以,但我真的不想编辑xsd的
我看到但没有实现的另一个选项是包装器。扩展这些公共类,使所有成员都在sdk生成的文件之上的另一层中。这将确保即使有新版本和新一代文件,也不需要触摸sdk。