2017-02-21 4 views
0

je reçois l'exception suivante lorsque je tente de faire l'objet de mon service web:javax.xml.bind.UnmarshalException: élément inattendu (uri: "", local: "html")

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

Une classe d'utilisateur est annotées avec @XmlRootElement, l'accès au service Web via le navigateur affiche la représentation XML de l'utilisateur

code client (j'utilise MediaType.TEXT_HTML parce que la cause MediaType.APPLICATION_XMLRestClientException):

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); 

Code Web Service:

@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

Pouvez-vous fournir plus de détails sur l'exception RestClientException que vous obtenez avec application/xml? Je remarque que vous ne passez pas Accept header. Donc, si vous obtenez un 406 non acceptable; l'absence de l'en-tête Accept est la raison –

+0

org.springframework.web.client.RestClientException: Impossible d'extraire la réponse: aucun HttpMessageConverter trouvé pour le type de réponse [class com.shopping.model.User] et le type de contenu [text/html; charset = ISO-8859-1] –

+0

Paymon, Pouvez-vous vous assurer que vous ajoutez ceci: 'mediaTypes.add (MediaType.APPLICATION_XML_VALUE);' dans votre code RestTemplate et me donnez le RestClientException que vous obtenez maintenant? –

Répondre

0

s'avère que je n'ai pas eu accès au service Web en raison d'un intercepteur de sécurité. <intercept-url pattern="/dispatcher/rest/**" access="hasRole('ROLE_ADMIN')"/> Après avoir commenté l'intercepteur, mon service Web fonctionne correctement. Le seul problème est que je me demande comment sécuriser mon service web pour y accéder via le code Java.