Skip to content

POI 5.4.1 和 Jackson-databind 2.15.3 的 Font 类 setCharSet 方法冲突问题 #5104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
1 task done
blydd opened this issue Apr 24, 2025 · 4 comments
Open
1 task done
Labels
to-evaluate Issue that has been received but not yet evaluated

Comments

@blydd
Copy link

blydd commented Apr 24, 2025

Search before asking

  • 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 方法。

复现步骤

启动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

  1. Brief code sample/snippet: include here in preformatted/code section
  2. Longer example stored somewhere else (diff repo, snippet), add a link
  3. Textual explanation: include here
    -->
// Your code here

Expected behavior

No response

Additional context

No response

@blydd blydd added the to-evaluate Issue that has been received but not yet evaluated label Apr 24, 2025
@pjfanning
Copy link
Member

We only accept test scenarios that involve Jackson code and Jackson only. No 3rd party dependencies.

@pjfanning
Copy link
Member

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.

@cowtowncoder
Copy link
Member

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

@pjfanning
Copy link
Member

pjfanning commented Apr 24, 2025

@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.

These are the 2 overloaded versions of setCharset that seem to upset Jackson.
https://github.com/apache/poi/blob/fe0a4f11661162bb60753f17dee62023ec57b02d/poi/src/main/java/org/apache/poi/ss/usermodel/Font.java#L250-263

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
to-evaluate Issue that has been received but not yet evaluated
Projects
None yet
Development

No branches or pull requests

3 participants