不重写jaxb生成

时间:2016-09-07 14:18:55

标签: eclipse jaxb

我正在尝试生成一堆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同时想要一个合并的课程,而不是一个被覆盖的课程我希望解决方案也可以防止重复一些如何。

1 个答案:

答案 0 :(得分:0)

由于缺乏答案,我实施了一种解决方法,即手动添加缺少/需要的成员。

我确定ulab上面的评论也可以,但我真的不想编辑xsd的

我看到但没有实现的另一个选项是包装器。扩展这些公共类,使所有成员都在sdk生成的文件之上的另一层中。这将确保即使有新版本和新一代文件,也不需要触摸sdk。