JAXB を使用して、一部の XML を Java マップに非整列化しようとしています。
Sun/Oracle が提供する JAXB 参照実装 (com.sun.xml.internal.bind...) を使用していると思います。
以下は、インスタンス ファイルからの関連する XML の (省略された) 部分です。
<Report
xmlns="http://www.escholar.com/eReports"
path="Books" reportName="BooksRead" eTag="eTag value">
<SelectList>
<entry>
<key>DOC</key>
<value>Microsoft Word (DOC)</value>
</entry>
<entry>
<key>PDF</key>
<value>Adobe Portable Document Format (PDF)</value>
</entry>
</Selectlist>
.
.
.
</Report>
ご覧のとおり、すべての要素が名前空間にあります。
selectList の注釈付き Java フィールドは次のとおりです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "InputSelectionType", namespace=ReportJAXB.NAMESPACE, propOrder = {
"selectList"
})
public class InputSelectionTypeJAXB extends InputParameterTypeJAXB
implements InputSelectionType
{
@XmlElementWrapper(name="SelectList", namespace=ReportJAXB.NAMESPACE)
protected LinkedHashMap<String, String> selectList;
ReportJAXB.NAMESPACE の定義は次のとおりです (インスタンス ファイル @xmlns と同じ)。
protected final static String NAMESPACE = "http://www.escholar.com/eReports";
selectListマップに要素がなくなることを除いて、アプリケーション内のすべてが非整列化に関して正常に機能しています。
名前空間を追加するまで、これはすべて正常に機能したことにも言及する価値があります。
問題はentry、key、およびvalueタグに関係していると思います。これらは私が選んだタグ名ではありません。これらは、Java Map に非整列化するときに JAXB が想定するタグ名です。名前空間を導入する前に、マーシャリングされた出力を調べることでそれらを発見しました。
したがって、これらのタグがインスタンスファイルの名前空間にあるため、これが機能しない理由が最も推測されますが、 @XmlElementWrapper 注釈で提供する名前空間は、それらの暗黙のタグによって継承されません。
これが他のコレクション (リストなど) である場合は、グループ化リスト要素の直接の子に @XmlElement で注釈を付けることができます。ただし、マップにはこれらの暗黙のサブ構造/サブ要素があります。
これを修正するにはどうすればよいですか?