swagger-api/swagger-codegen

[Spring] Bug - Xml examples do not get deserialized correctly

Open

#5,415 建立於 2017年4月18日

在 GitHub 查看
 (0 留言) (0 反應) (0 負責人)HTML (12,701 star) (5,474 fork)batch import
Issue: BugServer: Springhelp wanted

描述

Description

The changes done in #5310 have caused Xml Examples not be deserialized correctly during runtime. We actually get an exception

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: <Pet>  <id>123456789</id>  <name>doggie</name>  <photoUrls>    <photoUrls>aeiou</photoUrls>  </photoUrls>  <tags>  </tags>  <status>aeiou</status></Pet>; line: 1, column: 2]
	com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702)
	com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558)
	com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:456)
	com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1906)
	com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:749)
	com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3834)
	com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3783)
	com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842)
	com.bestbuy.serviceinterceptor.stubs.controller.PetApiController.findPetsByStatus(PetApiController.java:50)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Swagger-codegen version

2.2.3-SNAPSHOT

Command line used for generation

language = 'spring' inputFile = file('src/main/resources/swagger.json') configFile = file('src/main/resources/config.json')

Steps to reproduce

Autogenerate the apiControllers, build a war and run in tomcat. The api endpoints fail to deserialize when used with 'application/xml'. Works fine with 'application/json'

Related issues

https://github.com/swagger-api/swagger-codegen/issues/5310

Suggest a Fix

Should use XmlMapper instead of ObjectMapper for application/xml content type.

貢獻者指南

[Spring] Bug - Xml examples do not get deserialized correctly · swagger-api/swagger-codegen#5415 | Good First Issue