2011-04-15 9 views
7

मैं Spring RestTemplate उपयोग करने के लिए इस तरह के रूप कर्मचारी रिकॉर्ड, की सूची प्राप्त करने के लिए कोशिश कर रहा हूँ की सूची के साथ उपयोग करें:स्प्रिंग RestTemplate और XMLStream वस्तुओं

public List<Employee> getEmployeesByFirstName(String firstName) { 
return restTemplate.getForObject(employeeServiceUrl + "/firstname/{firstName}", List.class, firstName); 
} 

समस्या है कि वेब सेवाओं (बुलाया जा रहा है) है, निम्न XML रिटर्न प्रारूप:

<employees> <employee> .... </employee> <employee> .... </employee> </employees>

तो जब उपरोक्त विधि को क्रियान्वित करने, मैं त्रुटि निम्न हो:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read [interface java.util.List]; nested exception is org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.mapper.CannotResolveClassException: **employees : employees** 
+0

एक ही समस्या है:/ – DomreiRoam

+0

मैंने "कर्मचारियों" जैसे मूल्य के एक सेट वाले मानचित्र में संपत्ति "उपनाम" स्थापित की है और वह परिणाम जो हम चाहते हैं "संगठन ... ... कर्मचारी"। उम्मीद है कि मदद कर सकते हैं। – DomreiRoam

उत्तर

0

मैं एक ऐसी ही समस्या थी और इस उदाहरण में इसे हल:

public List<Employee> getEmployeeList() { 
    Employee[] list = restTemplate.getForObject("<some URI>", Employee[].class); 
    return Arrays.asList(list); 
} 

यही चाहिए मार्शल सही ढंग से, ऑटो मार्शलिंग का उपयोग:

http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/

16

आप शायद कुछ इस तरह की तलाश में हैं ।

1

सुनिश्चित करें कि मास्टलर और अनमारशेलर जो आप RestTemplate कन्स्ट्रक्टर के पैरामीटर में गुजर रहे हैं, डिफ़ॉल्ट कार्यान्वयन सेट है।

उदाहरण:

XStreamMarshaller marshaller = new XStreamMarshaller(); 
marshaller.getXStream().addDefaultImplementation(ArrayList.class,List.class); 

XStreamMarshaller unmarshaller = new XStreamMarshaller(); 
unmarshaller.getXStream().addDefaultImplementation(ArrayList.class,List.class); 

RestTemplate template = new RestTemplate(marshaller, unmarshaller); 
0

मैं एक RestClient रूप RestTemplate उपयोग करने के लिए कोशिश कर रहा था और निम्न कोड की सूची प्राप्त करने के लिए काम करता है:

public void testFindAllEmployees() { 
    Employee[] list = restTemplate.getForObject(REST_SERVICE_URL, Employee[].class); 
    List<Employee> elist = Arrays.asList(list); 
    for(Employee e : elist){ 
     Assert.assertNotNull(e); 
    } 
} 

सुनिश्चित करें कि आपके डोमेन वस्तुओं ठीक से एनोटेट कर रहे हैं और XMLStream जार में classpath। इसे उपरोक्त स्थिति से संतुष्ट होने के साथ काम करना है।