XmlAdapter を HashMap に機能させようとしていますが、例外が発生し続けます。私はこのブログのエントリを非常に注意深くフォローしており、コードを何度も見直しましたが、問題は見られません。
の最新バージョンをorg.eclipse.persistence.jaxb.JAXBContextFactory
JAXB プロバイダーとして使用しています。
これが私の XML のサンプルです。
<test>
<myName>Paul</myName>
<mappings>
<entry key="man">manufacturer</entry>
<entry key="prod">product</entry>
</mappings>
<test>
上記のブログ投稿の手順に従います。
1.マッピング不可能なクラスを特定する
をマッピングしようとしていますjava.util.HashMap
。
2. マッピング可能な同等のクラスを作成する
public class MappingType
{
public List<MappingEntryType> entry = new ArrayList<MappingEntryType>();
}
public class MappingEntryType
{
@XmlAttribute
public String key;
@XmlValue
public String value;
}
3. マップ不可オブジェクトとマップ可能オブジェクトを変換する XmlAdapter を作成する
public class MappingAdapter extends XmlAdapter<MappingType,
HashMap<String, String>>
{
@Override
public HashMap<String, String> unmarshal(MappingType v> throws Exception
{
HashMap<String, String> hashMap = new HashMap<String, String>();
for (MappingTypeEntry mappingEntry : v.entry)
{
hashMap.put(mappingEntry.key, mappingEntry.value);
}
return hashMap;
}
// marshal is here but I'm just working on unmarshalling now
}
4. XmlAdapter を指定する
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test")
public class TestEntity
{
@XmlElement
private String myName;
@XmlJavaTypeAdapter(MappingAdapter.class)
HashMap<String, String> mappings;
// getters & setters omitted in a feeble attempt at brevity
}
次のステップを追加しました。これを 5 と呼びます。スタック トレース
Exception [EclipseLink-3001](Eclipse Persistence Services-2.3.0.v20110604-r9504):
org.eclipse.persistence.exceptions.ConversionException
ExceptionDescription: The object [mypackage.MappingType@145d424], of class
[class mypackage.MappingType],could not be converted to [class java.util.HashMap]
at etc etc
MappingType
例外の説明は非常に明確ですが、 を に変換しようとしている場所がわかりませんHashMap
。質問を入力すると答えにたどり着くことがありますが、今回はそうではありません。
簡単なことだと思います - 私の間違いに気づいたら、指摘してください!
ありがとう!
ところで、Blaise Doughan のブログには JAXB と MOXy に関する素晴らしい情報が満載で、チェックする価値があります。