2012-02-10 6 views
2

選択肢私はそれを動作させるために、このコードを変更する必要がありますどのようhttp://scalaxb.org/scalaxbおよびxsd:

<xsd:complexType name="Address"> 
    <xsd:choice> 
     <xsd:element ref="ExternalAddress" /> 
     <xsd:element ref="InternalAddress" /> 
    </xsd:choice> 
    </xsd:complexType> 


val internalAddrress = InternalAddress(...); // this works. 
val address : Address = internalAddrress;  // error: type mismatch 

を使用していますか?

ここにいくつかの情報があり、私はDataRecordなどで演奏しましたが、うまくいきませんでした。 http://scalaxb.org/narrower-choice

答えて

3

質問が誤って策定されました。ここで 正しい質問と答え:

<xsd:complexType name="Address"> 
    <xsd:choice> 
     <xsd:element name="externalAddress" type="ExternalAddress" /> 
     <xsd:element name="internalAddress" type="InternalAddress" /> 
    </xsd:choice> 
    </xsd:complexType> 


val internalAddress = InternalAddress(...); // this works. 
val address = Address(scalaxb.DataRecord(None, Some("internalAddress"), internalAddress)); // now this works. 

をXSDが私に与えられているhttps://github.com/eed3si9n/scalaxb/issues/138#issuecomment-3943088

+0

'InternalAddress'とは何ですか?私はあなたが 'InternalAddress(...) 'を通してどのように構築しているのか混乱しています。 –

1

具体的には<xs:choice>と表現していますか? xs:choiceは、ExternalAddressまたはInternalAddressのいずれかの複合型の子要素を宣言します。しかし、Scalaコードから判断すると、外部または内部のいずれかのアドレスタイプを表現しようとしている可能性があります。

この場合、複雑な型の拡張が行われます。 USAddressの例をAddressに拡張する場合は、http://scalaxb.org/running-scalaxbを参照してください。これにより、AddressUSAddressの両方のスーパータイプであるAddressable形質が生成されます。

+0

、私はそれを変更することはできませんを参照してください。 –

関連する問題