Я пытаюсь заставить 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
. Иногда ввод вопроса приводит меня к ответу, но не в этот раз.
Я уверен, что это что-то простое - если вы видите мою ошибку, пожалуйста, укажите на это!
Спасибо!
Кстати, Блог Блеза Дафана полон отличной информации о JAXB и MOXy, которую стоит проверить.