JAXB 2 Maven插件 - 强制java源代码生成,为孩子使用集合?

时间:2014-12-30 17:02:00

标签: java xml jaxb xsd

我在XSD文件中有2种复杂类型,我可能不会更改。一个有多个子文件“filepath”出现,另一个有1个“filepath”子文件。

JAXB以不同方式生成其中任何一个,一个放在实体列表中,另一个放在单个JAXB实体中。 这对我来说是个问题,因为我希望JAXB为了继承而给我2个相等的类。 (我正在使用JAXB继承插件)

有没有办法让JAXB生成“EntitySingleFile”complextype的filepaths子属性作为列表,可能使用JAXB绑定?

这些是XSD定义:

<xs:element name="EntitySingleFile">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="filePaths" type="bgl:FilePaths" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="EntityMultiFile">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="filePaths" type="bgl:FilePaths" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

这是我目前从这些XSD文件中获取的内容:

@XmlRootElement(name = "EntitySingleFile")
public class EntitySingleFile
    implements IDrawConfiguration
{
    @XmlElement(required = true, type = FilePaths.class)
    protected IFilePaths filePaths;
....

对于multifile:

@XmlRootElement(name = "EntityMultiFile")
public class EntityMultiFile
    implements IDrawConfiguration
{
    @XmlElement(required = true, type = FilePaths.class)
    protected List<IFilePaths> filePaths;

1 个答案:

答案 0 :(得分:1)

由于您可能只需要集合方法来实现某个接口,我认为最简单的方法是使用Code Injector插件之类的东西来生成额外的getFilePaths()方法。

请参阅以下关于使用hinst的答案:

您可能还需要jaxb:property自定义以避免在getter中命名冲突,但我希望您能看到它是如何解决的。