JAXBを使用してオブジェクトをXMLにマーシャリングする際に問題が発生しています。 JAXB継承問題 - 名前空間の破損
- 親:私たちのコード例では、我々は三種類を持っている(https://github.com/fbe/JaxbIssueTracker、簡単なMavenプロジェクトは、テスト・ケースは、何が間違って起こっているの実証します)具体的な
のXSDは、ここで見つけることができます:github
親の型は抽象であり、具体的には親を拡張し、親はハイジャックされた型をシーケンスで参照します。これらのxsdファイルから、JAXB(xjc)によって警告またはエラーメッセージなしでJAVAファイルが生成されています。
次のXML出力は、JAXBで生成されている具体的なタイプのマーシャリング時:あなたはハイジャック型が誤って親の名前空間を参照しNS2-接頭辞を使用している見ることができるように
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:concreteType xmlns:ns2="http://www.felixbecker.name/parent" xmlns="http://www.felixbecker.name/hijacked" xmlns:ns3="http://www.felixbecker.name/concrete">
<ns2:hijacked>
<value>foobar</value>
</ns2:hijacked>
</ns3:concreteType>
を代わりに、ハイジャックされた名前空間を参照するデフォルトの名前空間を使用する必要があります。
JAXBは、生成されたxmlを非マーシャルすることはできませんが、アクティブ化されたスキーマ検証では生成されます。
ここで何が問題になりますか? XMLスキーマは壊れていますか?または、JAXBは継承を正しく処理できませんか?
parent.xsdから抽象属性を削除しても、直面している問題に影響はありませんでした。
ご協力いただければ幸いです。 :-)
使用されたバージョン(両方の破壊):
- JAXB JDK 1.6 から
- JAXB-RI 2.2.5
よろしく、
FBE & ollinux