XSD 映射到 Java POJO

XSD mapping to Java POJOs

假设我有一个来自 Web 服务的 XML 源,我无法控制它,具有以下结构:

<wrapper>
    <baz>content</baz>
    <foo>
        <bar>content</bar>
        <bar>content</bar>
    </foo>
</wrapper>

对应的XSD如下:

<xsd:complexType name="wrapper">
    <xsd:element name="baz" type="xsd:string"/>
    <xsd:element name="foo" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="bar" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:complexType>

从 XSD JAXB 生成以下 Java class:

@XmlType(name = "wrapper")
public class Wrapper {

    @XmlElement
    protected String baz;

    @XmlElement
    protected Foo foo;

    @XmlType(name = "foo")
    public static class Foo {

        @XmlElement
        protected List<String> bar;
    }
}

是否有可能 refactor/annotate POJO,而不是 Wrapper 有一个 Foo 对象,它包含列表 个对象?

如果有帮助,我目前正在使用 Spring-WS 的 Web 服务并使用默认的 Jaxb2Marshaller。

尝试添加 @XmlElementWrapper 注释。查看此 answer 了解更多信息。

@XmlRootElement    
@XmlAccessorType(XmlAccessType.FIELD)
public class Wrapper {
    @XmlElement
    protected String baz;

    @XmlElement(name = "bar")
    @XmlElementWrapper(name = "foo")
    protected List<String> bars;

    public String getBaz() {
        return baz;
    }

    public void setBaz(String baz) {
        this.baz = baz;
    }

    public List<String> getBars() {
        return bars;
    }

    public void setBars(List<String> bars) {
        this.bars = bars;
    }
}