You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I searched in the issues and found nothing similar.
Describe the bug
问题描述
在 Spring Boot 项目中,使用 POI 版本 5.4.1 和 Jackson-databind 版本 2.15.3 时,出现 java.Lang.IllegalArgumentException 错误,具体错误信息为:
java.lang.IllegalArgumentException: Conflicting setter definitions for property "charSet": org.apache.poi.ss.usermodel.Font#setCharSet(byte) vs org.apache.poi.ss.usermodel.Font#setCharSet(int)
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder._selectSetterFromMultiple(POJOPropertyBuilder.java:561) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:492) ~[jackson-databind-2.15.3.jar:2.15.3]
at io.swagger.v3.core.jackson.ModelResolver.ignore(ModelResolver.java:1250) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:631) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:736) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:736) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:736) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:488) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:736) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:158) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:123) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at io.swagger.v3.core.converter.ModelConverters.resolveAsResolvedSchema(ModelConverters.java:191) ~[swagger-core-jakarta-2.2.25.jar:2.2.25]
at org.springdoc.core.utils.SpringDocAnnotationsUtils.extractSchema(SpringDocAnnotationsUtils.java:133) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.calculateSchema(GenericResponseService.java:563) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.buildContent(GenericResponseService.java:541) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.buildContent(GenericResponseService.java:522) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.buildApiResponses(GenericResponseService.java:595) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.buildApiResponses(GenericResponseService.java:476) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:264) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:610) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:801) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:222) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:203) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:173) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:152) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:370) ~[springdoc-openapi-starter-common-2.7.0.jar:2.7.0]
at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:127) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:117) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at org.springdoc.webmvc.api.MultipleOpenApiWebMvcResource.openapiJson(MultipleOpenApiWebMvcResource.java:97) ~[springdoc-openapi-starter-webmvc-api-2.7.0.jar:2.7.0]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.5.jar:6.2.5]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.5.jar:6.2.5]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.39.jar:6.0]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.5.jar:6.2.5]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.39.jar:6.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.5.jar:6.2.5]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.5.jar:6.2.5]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.5.jar:6.2.5]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.5.jar:6.2.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.5.jar:6.2.5]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.39.jar:10.1.39]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
此错误表明 Jackson 在序列化和反序列化过程中,无法处理 org.apache.poi.ss.usermodel.Font 类中两个同名但参数类型不同的 setCharSet 方法。
The POI library is designed for parsing and writing Excel files and other Microsoft file formats. It is not designed to be used to return Font information in REST APIs. Find another library or write your own Font class.
For actual reproduction (which should not, like @pjfanning pointed out, depend on other libraries), we'd need to see class definitions.
Also: should test against newer version than 2.15.3 (2.18.3, ideally).
@cowtowncoder I am an Apache POI committer and the OP seems to be using Jersey or Swagger (or both) to expose an API that exposes a POI Font instance in a REST API. This is a POI class used for parsing/writing Excel and/or M$ formats. The Font class is not designed to be Jackson serializable/deserializable.
I still don't regard this as a priority. The OP could create a Mixin for this Font class because they can't change the POI Font class - but I cannot, for the life of me, work why they are exposing this POI class in a REST API.
Search before asking
Describe the bug
问题描述
在 Spring Boot 项目中,使用 POI 版本 5.4.1 和 Jackson-databind 版本 2.15.3 时,出现 java.Lang.IllegalArgumentException 错误,具体错误信息为:
此错误表明 Jackson 在序列化和反序列化过程中,无法处理 org.apache.poi.ss.usermodel.Font 类中两个同名但参数类型不同的 setCharSet 方法。
复现步骤
启动springboot项目,添加相关依赖,并集成springdoc-openapi-starter-webmvc-ui,当访问swagger时刷新swagger页面后台报上面错误,系统中相关的导出功能正常,只有访问swagger页面时才报错。
期望的解决方案
希望能够找到一个兼容的 POI 和 Jackson-databind 版本组合,或者提供一种有效的解决方法来避免 Jackson 在处理 org.apache.poi.ss.usermodel.Font 类的 setCharSet 方法时出现冲突。
环境信息
操作系统:win11
Java 版本:1.8
Spring Boot 版本:3.4.4
POI 版本:5.4.1
Jackson-databind 版本:2.15.3
Version Information
2.15.3
Reproduction
<-- Any of the following
-->
// Your code here
Expected behavior
No response
Additional context
No response
The text was updated successfully, but these errors were encountered: