I'm trying to get a XmlAdapter to a HashMap to work and I keep getting an exception. I followed this blog entry very closely, and I've been over my code many times yet I don't see the issue.
I am using the latest version of org.eclipse.persistence.jaxb.JAXBContextFactory
as my JAXB provider.
Here is a sample of my XML:
<test>
<myName>Paul</myName>
<mappings>
<entry key="man">manufacturer</entry>
<entry key="prod">product</entry>
</mappings>
<test>
Following the steps in the blog post mentioned above:
1. Identify the Unmappable Class
I'm trying to map a java.util.HashMap
.
2. Create an Equivalent Class that is Mappable
public class MappingType
{
public List<MappingEntryType> entry = new ArrayList<MappingEntryType>();
}
public class MappingEntryType
{
@XmlAttribute
public String key;
@XmlValue
public String value;
}
3. Create an XmlAdapter to Convert Between Unmappable and Mappable Objects
public clas开发者_运维技巧s 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. Specify the 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
}
I have added the next step, which I call 5. Stack Trace
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
The exception description is very clear but I can't see where I am trying to convert a MappingType
to a HashMap
. Sometimes typing a question leads me to the answer but not this time.
I'm sure it's something simple - if you see my mistake please point it out!
Thanks!
By the way, Blaise Doughan's blog is full of great JAXB and MOXy information, worth checking out.
I figured how to fix the issue, even if I don't understand what was happening.
I am using the Spring framework with this project and my XmlAdapter
class was marked as @Component
. Removing that annotation made the code work perfectly. For some reason having my adapter managed by Spring prevented my JAXB provider from using the class to unmarshal my XML.
You can refer to officail documentatio for XmlAdapter. They have given same example.
精彩评论