在XSD中表示对象列表

时间:2016-05-18 09:04:02

标签: java xsd

我需要在xsd文件中声明一个列表。不确定我需要做出哪些改变。我尝试使用简单类型,但是没有生成所需的类型。

我需要我的pojo将数据类型设为 -

  @XmlElement(name = "Journeys", required = true)
        protected List<LoyaltyJourneyIdentifier> journeys = new ArrayList<LoyaltyJourneyIdentifier>();

我当前的xsd

                    <xs:complexType name="AccountLoyaltyDetail">
            <xs:sequence>
                <xs:element name="OperatingCompany" type="ns:OperatingCompanyType"
                    minOccurs="0" />
                <xs:element name="Journeys" type="ns:LoyaltyJourneyIdentifier" />
                <xs:element name="Segments" type="ns:LoyaltySegmentIdentifier" />
            </xs:sequence>
</xs:complexType>

<xs:complexType name="LoyaltyJourneyIdentifier">
            <xs:sequence>
                  <xs:element name="JourneyIdentifierId" type="xs:string" maxOccurs="unbounded">
                        <xs:annotation>
                              <xs:documentation>Free form text to be echoed back in the reply.
                                    Used to match requests and replies.</xs:documentation>
                        </xs:annotation>
                  </xs:element>
            </xs:sequence>
</xs:complexType

&GT; 目前pojo生成为 -

@XmlElement(name = "Journeys", required = true)
    protected LoyaltyJourneyIdentifier journeys;

请告诉我需要做出哪些更改

2 个答案:

答案 0 :(得分:1)

要在XSD中表示List,请使用complexType,而不是xs:list。 您的XSD需要更改如下。

<xs:complexType name="AccountLoyaltyDetail">
            <xs:sequence>
                <xs:element name="OperatingCompany" type="ns:OperatingCompanyType"
                    minOccurs="0" />
                <xs:element name="Journeys" type="LoyaltyJourneyIdentifier" />
                <xs:element name="Segments" type="LoyaltySegmentIdentifier" />
            </xs:sequence>
</xs:complexType>

<xs:complexType name="LoyaltyJourneyIdentifier">
            <xs:sequence>
                  <xs:element name="JourneyIdentifierId" type="xs:string" minOccurs="1" maxOccurs="unbounded">
                        <xs:annotation>
                              <xs:documentation>Free form text to be echoed back in the reply.
                                    Used to match requests and replies.</xs:documentation>
                        </xs:annotation>
                  </xs:element>
            </xs:sequence>
</xs:complexType>

现在让我们看看xs:listxs:complexType之间的区别。 xs:list元素的目的不是表示Collection类型,它只列出类似的元素类型,如下所示。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="stringvalues" type="valuelist"/>

<xs:simpleType name="valuelist">
   <xs:list itemType="xs:string"/>
</xs:simpleType>

</xs:schema>

文档中的“stringvalues”元素可能如下所示(注意  列表将有四个列表项:)

<stringvalues>I love XML Schema</stringvalues> 

现在,要在XSD中表示java.util.List,请使用下面的示例。 List只是一个复杂类型,maxOccurs属性值为unbounded。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">       
    <xsd:element name="customer">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="phone-number" type="xsd:string" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

我希望这会有所帮助。

答案 1 :(得分:0)

以下对我有用,您可以从 wsdl 和 xsd 创建

<块引用>

以下是你想要的对象列表

<xs:complexType name="objectClass">
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="city" type="xs:string" />
                nillable="true" />
        </xs:sequence>
    </xs:complexType>
<块引用>

在其他添加最小出现次数和最大值时引用此对象,如下所示

        <xs:sequence>
            <xs:element name="item"
                type="tns:objectClass" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
<块引用>

以上会导致java如下

public class MainClassWhereYouWantListofAboveClass {
       protected List<objectClass> item;
       //.....
}