2016-05-18 3 views
3

xsdファイルにリストを宣言する必要があります。何を変更する必要があるかわからない私は単純な型を使ってみましたが、必要な型は生成されません。私のようにデータ型を持っている私のPOJOを必要XSDでオブジェクトリストを表現する

-

@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 

> 現在、POJOは次のように生成される -

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

変更する必要があることを教えてください

答えて

1

XSDのリストを表すには、xs:listではなくcomplexTypeを使用してください。 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要素の目的は、コレクション型を表すのではなく、次のような類似の型の要素のみをリストします。

<?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」要素は、この(リストは、4つのリスト項目を持っていることを告知 )のようになります。中にはjava.util.Listを表現するには、

<stringvalues>I love XML Schema</stringvalues> 

XSD、以下の例を使用してください。 Listは、maxOccurs属性の値が無制限の複合型です。

<?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> 

これが役立ちます。

+0

ありがとう...しかし、提案したように私のxsdを変更しようとしています。上記のpojoが私の必要としているものでないようになっています。また、私はリストをオブジェクト型にしたいと思っています。あなたはそれに対して何の変更があるのか​​教えてください。 – themaster

+0

XSDを編集しました。試してみてください。 –

+0

「LoyaltyJourneyIdentifierには名前空間がないことが検出されましたが、ターゲット名前空間のないコンポーネントはスキーマ 文書から参照できませんでした」というエラーが表示されます。file:/// D:/ ILoyalty_WS/Loyalty_WS/src/main/config/'LoyaltyJourneyIdentifier'に名前空間がない場合は、接頭辞を付ける必要があります。 は、 'LoyaltyJourneyIdentifier'に名前空間がないことを意図している場合は、 "namespace"属性を 'file:/// D:/ ILoyalty_WS/Loyalty_WS/src/main/config/properties/contract/xsds / – themaster

関連する問題