2017-02-21 61 views
0

Я получаю следующее исключение при попытке получить объект из моего веб-сервиса:javax.xml.bind.UnmarshalException: неожиданный элемент (URI: "", местные: "HTML")

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"html"). Expected elements are <{}user> 

класс пользователя помечается @XmlRootElement, доступ к веб-сервиса через браузер отображает XML-представление пользователя

код клиента (я использую MediaType.TEXT_HTML потому MediaType.APPLICATION_XML причиной RestClientException):

RestTemplate restTemplate = new RestTemplate(); 
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter(); 
List<MediaType> mediaTypes = new ArrayList<MediaType>(); 
mediaTypes.add(MediaType.TEXT_HTML); 
jaxbMessageConverter.setSupportedMediaTypes(mediaTypes); 
messageConverters.add(jaxbMessageConverter); 
restTemplate.setMessageConverters(messageConverters); 
User x = restTemplate.getForObject("http://localhost:8080/Online_Shopping/dispatcher/rest/hello",User.class); 

Web Сервис-код:

@Controller 
@RequestMapping(value = "/rest") 
public class RESTController { 

    @RequestMapping(value = "/hello", 
    method = RequestMethod.GET, 
    produces = MediaType.APPLICATION_XML_VALUE) 
    public @ResponseBody User getUser() { 
     return new User("paymon","123",true); 
    } 
} 
+0

Можете ли вы предоставить более подробную информацию о RestClientException, которое вы получаете с приложением/xml? Я заметил, что вы не передаете заголовок Accept. Поэтому, если вы получаете 406 недопустимых; отсутствие заголовка Accept является причиной –

+0

org.springframework.web.client.RestClientException: не удалось извлечь ответ: нет подходящего HttpMessageConverter для типа ответа [class com.shopping.model.User] и типа содержимого [text/html; charset = ISO-8859-1] –

+0

Paymon, можете ли вы добавить это: 'mediaTypes.add (MediaType.APPLICATION_XML_VALUE);' в свой код RestTemplate и предоставить мне RestClientException, которое вы сейчас получаете? –

ответ

0

Оказывается, у меня не было доступа к веб-службы из-перехватчика безопасности. <intercept-url pattern="/dispatcher/rest/**" access="hasRole('ROLE_ADMIN')"/> После комментирования перехватчика мой веб-сервис работает правильно. Проблема только в том, что мне интересно, как защитить мой веб-сервис, чтобы получить доступ к нему через Java-код.