2013-02-11 87 views
0

我正在尝试使用Spring来解析XML响应。我过去成功实现了Spring来解析JSON响应,但由于某种原因,我遇到了XML问题。Spring for Android - 使用SimpleXML进行XML解析

我下载并将Simple jar添加到我的构建路径。我没有收到任何编译错误,但是当我运行它时,出现问题。这里是我的代码:

HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.setAccept(Collections.singletonList(new MediaType("text","xml"))); 
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); 
String url = "MyURL"; 
RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter()); 
try{ 
    ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); 
    Log.d(TAG, "response - " + responseEntity.getBody()); 

}catch(HttpMessageNotReadableException e){ 
    Log.d(TAG, "message " + e.getMessage()); 
} 

当我运行这段代码我得到的错误是:

02-11 16:49:28.905: E/AndroidRuntime(5454): FATAL EXCEPTION: Thread-126 
02-11 16:49:28.905: E/AndroidRuntime(5454): org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.String] 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:632) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:473) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:438) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:414) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity.getCategories(RRBCatalogueActivity.java:337) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity$7.run(RRBCatalogueActivity.java:395) 
02-11 16:49:28.905: E/AndroidRuntime(5454):  at java.lang.Thread.run(Thread.java:856) 

错误是扔在这条线:ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

只是为了测试,我使用这个:restTemplate.getMessageConverters().add(new StringHttpMessageConverter());从我的消息转换器,我得到了正确的响应作为一个字符串。

任何想法?

回答

1

看起来好像你正在试图将accept头设置为消息的主体。这可能不是你想要的...

ResponseEntity应该包装一个XML序列化的对象(查看转换器代码,好像它正在寻找@Root注释)。无论如何,对于Spring,您(通常)不必担心直接设置接受/内容类型标题,因为这些将由MessageConverters设置。

+0

我注释了设置accept头的行,它没有什么区别......我也是尝试使用几种不同的对象类型作为响应实体,但没有运气。 – coder 2013-02-12 14:18:59

0

您的返回类型需要不是String。我不知道SimpleXml需要什么,但是如果你使用的是JaxB,它将是生成的类