Advertisement
Guest User

Untitled

a guest
Nov 25th, 2014
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. {
  2. "uri":"\foo\dosomthing",
  3. "action":"POST",
  4. "queryParameters":[
  5. "$filter=aaa",
  6. "$orderby=bbb"
  7. ],
  8. "requestData":{
  9. "data1":{
  10. "key1":"value1",
  11. "key2":"value2"
  12. },
  13. "ids":[
  14. "1234",
  15. "0294"
  16. ]
  17. }
  18. }
  19.  
  20. import java.util.ArrayList;
  21. import java.util.Collections;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25.  
  26. import javax.xml.bind.annotation.XmlAccessType;
  27. import javax.xml.bind.annotation.XmlAccessorType;
  28. import javax.xml.bind.annotation.XmlElement;
  29. import javax.xml.bind.annotation.XmlElementWrapper;
  30. import javax.xml.bind.annotation.XmlRootElement;
  31. import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
  32.  
  33. import org.eclipse.persistence.oxm.annotations.XmlPath;
  34.  
  35. @XmlRootElement
  36. @XmlAccessorType(XmlAccessType.FIELD)
  37. public class CustomerReqeust
  38. {
  39. public CustomerReqeust() {}
  40.  
  41. public CustomerReqeust(String uri, String action, List<String>
  42. queryParameters, Map<String, Object> reqeustData)
  43. {
  44. this.uri = uri;
  45. this.action = action;
  46. this.queryParameters = queryParameters;
  47. this.requestData = reqeustData;
  48. }
  49.  
  50. public String getUri()
  51. {
  52. return uri;
  53. }
  54.  
  55. public String getAction()
  56. {
  57. return action;
  58. }
  59.  
  60. public List<String> getQueryParameters()
  61. {
  62. return Collections.unmodifiableList(queryParameters);
  63. }
  64.  
  65. public Map<String, Object> getRequestData()
  66. {
  67. return Collections.unmodifiableMap(requestData);
  68. }
  69.  
  70. @XmlElement
  71. private String uri;
  72.  
  73. @XmlElement
  74. private String action;
  75.  
  76. @XmlElementWrapper
  77. private List<String> queryParameters = new ArrayList<String>();
  78.  
  79. @XmlPath(".")
  80. @XmlJavaTypeAdapter(StringObjectMapAdapter.class)
  81. private Map<String, Object> requestData = new HashMap<String, Object>();
  82.  
  83. }
  84.  
  85. import java.util.ArrayList;
  86. import java.util.HashMap;
  87. import java.util.List;
  88. import java.util.Map;
  89. import java.util.Map.Entry;
  90.  
  91. import javax.xml.bind.annotation.XmlTransient;
  92. import javax.xml.bind.annotation.XmlValue;
  93. import javax.xml.bind.annotation.adapters.XmlAdapter;
  94.  
  95. import org.eclipse.persistence.oxm.annotations.XmlVariableNode;
  96.  
  97. public class StringObjectMapAdapter extends
  98. XmlAdapter<StringObjectMapAdapter.AdaptedMap, Map<String, Object>>
  99. {
  100.  
  101. public static class AdaptedEntry
  102. {
  103. @XmlTransient
  104. public String key;
  105.  
  106. @XmlValue
  107. public Object value = new Object();
  108. }
  109. public static class AdaptedMap
  110. {
  111. @XmlVariableNode("key")
  112. List<AdaptedEntry> entries = new ArrayList<AdaptedEntry>();
  113. }
  114.  
  115. @Override
  116. public AdaptedMap marshal(Map<String, Object> map) throws Exception
  117. {
  118. AdaptedMap adaptedMap = new AdaptedMap();
  119.  
  120. for (Entry<String, Object> entry : map.entrySet())
  121. {
  122. AdaptedEntry adaptedEntry = new AdaptedEntry();
  123. adaptedEntry.key = entry.getKey();
  124. adaptedEntry.value = entry.getValue();
  125. adaptedMap.entries.add(adaptedEntry);
  126. }
  127. return adaptedMap;
  128. }
  129.  
  130. @Override
  131. public Map<String, Object> unmarshal(AdaptedMap adaptedMap) throws Exception
  132. {
  133. List<AdaptedEntry> adapatedEntries = adaptedMap.entries;
  134. Map<String, Object> map = new HashMap<String, Object>(adapatedEntries.size());
  135.  
  136. for (AdaptedEntry adaptedEntry : adapatedEntries )
  137. {
  138. map.put(adaptedEntry.key, adaptedEntry.value);
  139. }
  140.  
  141. return map;
  142. }
  143.  
  144. import javax.xml.bind.JAXBContext;
  145. import javax.xml.bind.Unmarshaller;
  146. import javax.xml.transform.stream.StreamSource;
  147.  
  148. import org.eclipse.persistence.jaxb.MarshallerProperties;
  149. import org.testng.annotations.Test;
  150.  
  151. public class TestStringObjectMapAdapter {
  152.  
  153. @Test
  154. public void testUnmarshalFromJson() throws Exception
  155. {
  156. JAXBContext jc = JAXBContext.newInstance(CustomerReqeust.class);
  157.  
  158. Unmarshaller unmarshaller = jc.createUnmarshaller();
  159. unmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
  160. unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
  161. StreamSource json = new StreamSource("test-data.json");
  162. CustomerReqeustr = unmarshaller.unmarshal(json,
  163. CustomerReqeust.class).getValue();
  164.  
  165. assert(request.getUri().equals("\foo\dosomthing"));
  166. assert(request.getAction().equals("POST"));
  167. }
  168. }
  169.  
  170. FAILED: testUnmarshalFromJson
  171. java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DocumentImpl cannot be cast to org.w3c.dom.Element
  172. at org.eclipse.persistence.internal.oxm.XMLCompositeObjectMappingNodeValue.endSelfNodeValue(XMLCompositeObjectMappingNodeValue.java:468)
  173. at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.endDocument(UnmarshalRecordImpl.java:606)
  174. at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.endElement(UnmarshalRecordImpl.java:1084)
  175. at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:304)
  176. at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parseRoot(JSONReader.java:179)
  177. at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:125)
  178. at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:140)
  179. at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:857)
  180. at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:707)
  181. at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:655)
  182. at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:301)
  183. at com.absolute.asb.urp.services.domain.TestStringObjectMapAdapter.testUnmarshalFromJson(TestStringObjectMapAdapter.java:21)
  184. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  185. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  186. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  187. at java.lang.reflect.Method.invoke(Unknown Source)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement