私はJaxB Worldの新しいコーナーであり、私は1つの問題w.r.tに直面しています。格納されたXMLコンテンツをJavaクラスオブジェクトにアンマーシャリングします。問題の説明は次のとおりです。私はこれが解ける であれば、私は次の内容が含まれている私のXSDファイル(これは単なる一例です) 学生情報 具体的なインスタンスに基づくアンマーシャリング
<xs:complexType name="specialization" abstract="true">
</xs:complexType>
<xs:complexType name="Engineering">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="percentage" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Medical">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="grade" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
今、すべての対応するJavaを持って知ってみましょうクラスはxsdをコンパイルすることによって生成されます。私のアプリケーションでは、エンジニアリングのクラスインスタンスを構築することによって、学生情報の専門化属性を設定することを前提とします。私は を保存するときに、すべての操作の後に保存されますxmlファイルは、上記の内容は、非整列化のために行くとき
以下<Student>
<Name>Name1</Name>
<Specialization>
<percentage>78<percentage>
</Specialization>
</Student>
のようなエントリは今、非整列化が予想外の要素を言って失敗しています。私はこれがb'cosだと推測します。Specialization要素は、格納されている派生オブジェクトではなく、それ自身でアンマーシャリングを呼び出すタイプの特殊化です。
私の説明は明らかです。派生クラスのインスタンス型に基づいてアンマーシャリングできる方法はありますか? xsdとbindings.xjbファイルは完全に私のコントロールの下にあるので、派生クラスのアンマーシャリングのためにアンマーシャルルールに伝えるすべてのエントリ/情報を追加または変更できます。
あなたの提案に感謝しますが、まだ私のために働いていません。タイプ
私のXSDを例に説明したものと同じに見えますが、それでもXSI:タイプが結果のXMLには来ないのxsi - ここ
は私が
オプション#1を試してみましたものです。コンパイル時に他の設定を追加する必要がありますか?これにはどのJaxBバージョンを使用しますか?
オプション#2 - 置換グループ
xsdに置換エントリの部分を追加すると、XSDのコンパイルで "Engineering"と "Medical"の重複した名前が表示されませんでした。私は、要素名と型名は同じコンパイルベビーベッドであると考えています(すべてのエンジニアリング、医療、特殊化は型定義と要素名で同じです)
モデル駆動型アーキテクチャを使用しているので、手元にあるのはxsdだけです。 xsdの変更は許可されています。理想的には最初のオプションが働いていたはずです。しかし、それがなぜ機能していないのか理解できません。問題を絞り込むための提案があれば教えてください。
ご提案をお寄せいただきありがとうございますが、それはまだ動作しません私のために。 これは私が試したものです オプション#1 - xsi:type 私のxsdは例で説明したものと同じように見えますが、Xsi:typeは結果のxmlに含まれていません。コンパイル時に他の設定を追加する必要がありますか?これにはどのJaxBバージョンを使用しますか? – user1110282
オプション#2 - 置換グループ xsdで置換エントリの部分を追加したとき、XSDのコンパイルで "Engineering"と "Medical"の重複した名前が表示されませんでした。私は要素名と型が同じコンパイルベビーベッドであることを推測します(すべてのエンジニアリング、医療、専門は型定義と要素名の両方で同じです) モデル駆動型アーキテクチャを使用しているので、手元にあるのはxsdだけです。 xsdの変更は許可されています。理想的には最初のオプションが働いていたはずです。しかし、それがなぜ機能していないのか理解できません。あなたが持っている場合私に教えていくつかの提案 – user1110282