JAXBを使用して、スキーマがDTDによって定義されているXMLファイルをアンマーシャリングしようとしています(うーん!)。
DTDの外部プロバイダーは、要素属性の1つを次のように指定していますxml:lang
。
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
これは、xjcで生成されたクラス(標準生成、*。xjbマジックなし)に次のように組み込まれます。
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
ただし、JAXBを使用して有効なXMLファイルをアンマーシャリングする場合、xmlLang
属性は常にnull
です。
XMLファイルを編集し、に置き換えxml:lang
て一致するようlang
に変更する@XmlAttribute
と、アンマーシャリングが成功しました(つまり、属性が非でしたnull
)。
私はこれをhttp://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.htmlで見つけました。しかし、そこでの解決策はXMLスキーマなどに変換することでした。私の強い好みは、変更されていないDTDから直接移行することです(外部から提供され、ISO標準によって定義されているため)。
これはJAXBのバグですか?属性名の「名前空間」について何かが足りませんか?
FWIW、java -version
="ビルド1.6.0_20-b02"およびxjc -version
="xjcバージョン"JDK6のJAXB2.1.10 ""