Saving File application/octet-stream issue a MIME type may not contain reserved characters

Hi community !!

I configured CMDBuild to use a sharepoint as DMS.

New class with a FILE attribute. Try to save different files, pdf, xlsx, docx, txt, …everything runs smoothly until I try to save a file that has a MIME type as “application/octet-stream”

This causes an error and does not save the card.

The error is
java.lang.IllegalArgumentException: MIME type may not contain reserved characters

Any Help ?!?

Here come some logs…


2026-10-14T09:07:30.273Z [req:b7718e] ERROR o.c.s.r.v.p.ExceptionHandlerService - ws processing error
org.cmdbuild.utils.ws3.utils.Ws3Exception: error processing request =< ws4rest:put:classes/XXXXXXX/cards/XXXXXXX>
at org.cmdbuild.utils.ws3.servlet.WsRestRequestHandlerServlet.handleRequest(WsRestRequestHandlerServlet.java:32) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
at org.cmdbuild.utils.ws3.servlet.WsAbstractHandlerServlet.service(WsAbstractHandlerServlet.java:105) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[servlet-api.jar:6.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-websocket.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.cmdbuild.webapp.filters.AsyncJobFilter.doFilterInternal(AsyncJobFilter.java:49) ~[classes/:4.2.0]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.cmdbuild.webapp.security.SessionTokenFilter.doFilterInternal(SessionTokenFilter.java:176) ~[classes/:4.2.0]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.4.2.jar:6.4.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.cmdbuild.webapp.filters.LanguageFilter.doFilterInternal(LanguageFilter.java:54) ~[classes/:4.2.0]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.cmdbuild.webapp.filters.RequestTrackingFilter.doFilterInternal(RequestTrackingFilter.java:189) ~[classes/:4.2.0]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.cmdbuild.webapp.filters.BootCheckFilter.doFilterAfterBootCheck(BootCheckFilter.java:111) ~[classes/:4.2.0]
at org.cmdbuild.webapp.filters.BootCheckFilter.doFilterInternal(BootCheckFilter.java:70) ~[classes/:4.2.0]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.2.2.jar:6.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[catalina.jar:10.1.43]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:598) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) ~[catalina.jar:10.1.43]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[catalina.jar:10.1.43]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:666) ~[catalina.jar:10.1.43]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:10.1.43]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[catalina.jar:10.1.43]
at org.apache.coyote.http2.StreamProcessor.service(StreamProcessor.java:476) ~[tomcat-coyote.jar:10.1.43]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-coyote.jar:10.1.43]
at org.apache.coyote.http2.StreamProcessor.process(StreamProcessor.java:102) ~[tomcat-coyote.jar:10.1.43]
at org.apache.coyote.http2.StreamRunnable.run(StreamRunnable.java:35) ~[tomcat-coyote.jar:10.1.43]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) ~[tomcat-util.jar:10.1.43]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) ~[tomcat-util.jar:10.1.43]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-util.jar:10.1.43]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Caused by: org.cmdbuild.utils.ws3.utils.Ws3Exception: error processing request with handler = Ws3RequestMethodHanlder{service=org.cmdbuild.service.rest.v4.endpoint.CardWs, method=update}
at org.cmdbuild.utils.ws3.inner.WsRequestHandlerImpl.handleRequest(WsRequestHandlerImpl.java:82) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
at org.cmdbuild.utils.ws3.servlet.WsRestRequestHandlerServlet.handleRequest(WsRestRequestHandlerServlet.java:30) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
… 89 common frames omitted
Caused by: org.cmdbuild.utils.ws3.utils.Ws3Exception: error processing ws request = WsRestRequest{uri=ws4rest:put:classes/SecurCerts/cards/52566921}
at org.cmdbuild.utils.ws3.inner.WsRequestMethodHandler.handleRequest(WsRequestMethodHandler.java:86) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
at org.cmdbuild.utils.ws3.inner.WsRequestHandlerImpl.handleRequest(WsRequestHandlerImpl.java:80) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
… 90 common frames omitted
Caused by: org.cmdbuild.dao.DaoException: java.lang.IllegalArgumentException: MIME type may not contain reserved characters
at org.cmdbuild.dms.sharepoint.SharepointDmsProviderService.doWithHelper(SharepointDmsProviderService.java:296) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.sharepoint.SharepointDmsProviderService.create(SharepointDmsProviderService.java:176) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.core.DmsServiceImpl.doCreate(DmsServiceImpl.java:486) ~[cmdbuild-dms-core-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.core.DmsServiceImpl.createAndReplaceExisting(DmsServiceImpl.java:372) ~[cmdbuild-dms-core-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardFileServiceImpl.prepareFileAttribute(UserCardFileServiceImpl.java:74) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardServiceImpl$ClassHelper.prepareFileAttribute(UserCardServiceImpl.java:858) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.utils.lang.CmMapUtils$FluentMapCollector.lambda$accumulator$0(CmMapUtils.java:601) ~[cmdbuild-utils-lang-4.2.0.jar:4.2.0]
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) ~[na:na]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na]
at org.cmdbuild.utils.lang.CmCollectionUtils$FluentList.collect(CmCollectionUtils.java:469) ~[cmdbuild-utils-lang-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardServiceImpl$ClassHelper.prepareCardFileAttributes(UserCardServiceImpl.java:853) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardServiceImpl$ClassHelper.prepareCardValuesForUpdate(UserCardServiceImpl.java:847) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardServiceImpl$ClassHelper.updateCard(UserCardServiceImpl.java:810) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.classe.access.UserCardServiceImpl.updateCard(UserCardServiceImpl.java:249) ~[cmdbuild-core-access-4.2.0.jar:4.2.0]
at org.cmdbuild.service.rest.v4.command.CardWsCommand.doUpdate(CardWsCommand.java:55) ~[cmdbuild-services-rest-v4-4.2.0.jar:4.2.0]
at org.cmdbuild.service.rest.v4.endpoint.CardWs.update(CardWs.java:224) ~[cmdbuild-services-rest-v4-4.2.0.jar:4.2.0]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.cmdbuild.utils.ws3.inner.WsRequestMethodHandler.handleRequest(WsRequestMethodHandler.java:82) ~[cmdbuild-utils-ws3-4.2.0.jar:4.2.0]
… 91 common frames omitted
Caused by: java.lang.IllegalArgumentException: MIME type may not contain reserved characters
at org.apache.http.util.Args.check(Args.java:36) ~[httpcore-4.4.16.jar:4.4.16]
at org.apache.http.entity.ContentType.create(ContentType.java:229) ~[httpcore-4.4.16.jar:4.4.16]
at org.apache.http.entity.ContentType.create(ContentType.java:241) ~[httpcore-4.4.16.jar:4.4.16]
at org.cmdbuild.dms.sharepoint.SharepointGraphApiClientImpl.doSetItem(SharepointGraphApiClientImpl.java:394) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.sharepoint.SharepointGraphApiClientImpl.setItem(SharepointGraphApiClientImpl.java:253) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.sharepoint.SharepointDmsProviderService.lambda$create$11(SharepointDmsProviderService.java:176) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]
at org.cmdbuild.dms.sharepoint.SharepointDmsProviderService.doWithHelper(SharepointDmsProviderService.java:292) ~[cmdbuild-dms-sharepoint-4.2.0.jar:4.2.0]


Going further in analisys, form the browser’s tools I get that the mime type starts to be detected as

application/x-pkcs12

application/x-x509-ca-cert

Hi,

thank you for reporting this issue.

We can confirm that the bug has been fixed and is no longer present in CMDBuild 4.3.0.

Best regards, The CMDBuild Team

Hi,

thank you for quick patch and release :smiley: