Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "uri":"\foo\dosomthing",
- "action":"POST",
- "queryParameters":[
- "$filter=aaa",
- "$orderby=bbb"
- ],
- "requestData":{
- "data1":{
- "key1":"value1",
- "key2":"value2"
- },
- "ids":[
- "1234",
- "0294"
- ]
- }
- }
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.bind.annotation.XmlAccessType;
- import javax.xml.bind.annotation.XmlAccessorType;
- import javax.xml.bind.annotation.XmlElement;
- import javax.xml.bind.annotation.XmlElementWrapper;
- import javax.xml.bind.annotation.XmlRootElement;
- import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
- import org.eclipse.persistence.oxm.annotations.XmlPath;
- @XmlRootElement
- @XmlAccessorType(XmlAccessType.FIELD)
- public class CustomerReqeust
- {
- public CustomerReqeust() {}
- public CustomerReqeust(String uri, String action, List<String>
- queryParameters, Map<String, Object> reqeustData)
- {
- this.uri = uri;
- this.action = action;
- this.queryParameters = queryParameters;
- this.requestData = reqeustData;
- }
- public String getUri()
- {
- return uri;
- }
- public String getAction()
- {
- return action;
- }
- public List<String> getQueryParameters()
- {
- return Collections.unmodifiableList(queryParameters);
- }
- public Map<String, Object> getRequestData()
- {
- return Collections.unmodifiableMap(requestData);
- }
- @XmlElement
- private String uri;
- @XmlElement
- private String action;
- @XmlElementWrapper
- private List<String> queryParameters = new ArrayList<String>();
- @XmlPath(".")
- @XmlJavaTypeAdapter(StringObjectMapAdapter.class)
- private Map<String, Object> requestData = new HashMap<String, Object>();
- }
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import javax.xml.bind.annotation.XmlTransient;
- import javax.xml.bind.annotation.XmlValue;
- import javax.xml.bind.annotation.adapters.XmlAdapter;
- import org.eclipse.persistence.oxm.annotations.XmlVariableNode;
- public class StringObjectMapAdapter extends
- XmlAdapter<StringObjectMapAdapter.AdaptedMap, Map<String, Object>>
- {
- public static class AdaptedEntry
- {
- @XmlTransient
- public String key;
- @XmlValue
- public Object value = new Object();
- }
- public static class AdaptedMap
- {
- @XmlVariableNode("key")
- List<AdaptedEntry> entries = new ArrayList<AdaptedEntry>();
- }
- @Override
- public AdaptedMap marshal(Map<String, Object> map) throws Exception
- {
- AdaptedMap adaptedMap = new AdaptedMap();
- for (Entry<String, Object> entry : map.entrySet())
- {
- AdaptedEntry adaptedEntry = new AdaptedEntry();
- adaptedEntry.key = entry.getKey();
- adaptedEntry.value = entry.getValue();
- adaptedMap.entries.add(adaptedEntry);
- }
- return adaptedMap;
- }
- @Override
- public Map<String, Object> unmarshal(AdaptedMap adaptedMap) throws Exception
- {
- List<AdaptedEntry> adapatedEntries = adaptedMap.entries;
- Map<String, Object> map = new HashMap<String, Object>(adapatedEntries.size());
- for (AdaptedEntry adaptedEntry : adapatedEntries )
- {
- map.put(adaptedEntry.key, adaptedEntry.value);
- }
- return map;
- }
- import javax.xml.bind.JAXBContext;
- import javax.xml.bind.Unmarshaller;
- import javax.xml.transform.stream.StreamSource;
- import org.eclipse.persistence.jaxb.MarshallerProperties;
- import org.testng.annotations.Test;
- public class TestStringObjectMapAdapter {
- @Test
- public void testUnmarshalFromJson() throws Exception
- {
- JAXBContext jc = JAXBContext.newInstance(CustomerReqeust.class);
- Unmarshaller unmarshaller = jc.createUnmarshaller();
- unmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
- unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
- StreamSource json = new StreamSource("test-data.json");
- CustomerReqeustr = unmarshaller.unmarshal(json,
- CustomerReqeust.class).getValue();
- assert(request.getUri().equals("\foo\dosomthing"));
- assert(request.getAction().equals("POST"));
- }
- }
- FAILED: testUnmarshalFromJson
- java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DocumentImpl cannot be cast to org.w3c.dom.Element
- at org.eclipse.persistence.internal.oxm.XMLCompositeObjectMappingNodeValue.endSelfNodeValue(XMLCompositeObjectMappingNodeValue.java:468)
- at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.endDocument(UnmarshalRecordImpl.java:606)
- at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.endElement(UnmarshalRecordImpl.java:1084)
- at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:304)
- at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parseRoot(JSONReader.java:179)
- at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:125)
- at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:140)
- at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:857)
- at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:707)
- at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:655)
- at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:301)
- at com.absolute.asb.urp.services.domain.TestStringObjectMapAdapter.testUnmarshalFromJson(TestStringObjectMapAdapter.java:21)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
- at java.lang.reflect.Method.invoke(Unknown Source)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement