Compatibility Issues with Java 21 and QuickBooks Java SDK
I'm currently working on a Spring Boot project using Java 21, and I've encountered several compatibility issues while integrating the QuickBooks Java SDK.
Issues Encountered: Javax to Jakarta Transition: The SDK is still relying on javax packages, which have been deprecated in favor of jakarta. This presents challenges for compatibility with modern Java applications.
Jackson Databind Version: The SDK uses jackson-databind version 2.9.10, while the latest stable version is 2.17.2. This discrepancy leads to deserialization issues as my project depends on the newer version.
Deserialization Error: While syncing invoices, I encountered the following error:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.intuit.ipp.data.LineDetailTypeEnum from String "SalesItemLineDetail": not one of the values accepted for Enum class: [TDS_LINE_DETAIL, SUB_TOTAL_LINE_DETAIL, SALES_ITEM_LINE_DETAIL, JOURNAL_ENTRY_LINE_DETAIL, TAX_LINE_DETAIL, ITEM_RECEIPT_LINE_DETAIL, DESCRIPTION_ONLY, SALES_ORDER_ITEM_LINE_DETAIL, ITEM_ADJUSTMENT_LINE_DETAIL, ACCOUNT_BASED_EXPENSE_LINE_DETAIL, DEPOSIT_LINE_DETAIL, GROUP_LINE_DETAIL, ITEM_BASED_EXPENSE_LINE_DETAIL, DISCOUNT_LINE_DETAIL, PURCHASE_ORDER_ITEM_LINE_DETAIL, PAYMENT_LINE_DETAIL, REIMBURSE_LINE_DETAIL]
at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.intuit.ipp.data.Invoice["Line"]->java.util.ArrayList[0]->com.intuit.ipp.data.Line["DetailType"])
at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1958) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1245) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:447) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._fromString(EnumDeserializer.java:304) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:273) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:361) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:246) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4881) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3035) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3499) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.intuit.ipp.serialization.QueryResponseDeserializer.deserialize(QueryResponseDeserializer.java:183) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.serialization.QueryResponseDeserializer.deserialize(QueryResponseDeserializer.java:44) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4881) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3035) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3499) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.intuit.ipp.serialization.IntuitResponseDeserializer.getQueryResponse(IntuitResponseDeserializer.java:367) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.serialization.IntuitResponseDeserializer.deserialize(IntuitResponseDeserializer.java:203) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.serialization.IntuitResponseDeserializer.deserialize(IntuitResponseDeserializer.java:54) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3848) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3816) ~[jackson-databind-2.17.2.jar:2.17.2]
at com.intuit.ipp.serialization.JSONSerializer.deserialize(JSONSerializer.java:307) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.interceptors.DeserializeInterceptor.execute(DeserializeInterceptor.java:79) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.interceptors.IntuitInterceptorProvider.executeResponseInterceptors(IntuitInterceptorProvider.java:114) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.interceptors.IntuitInterceptorProvider.executeInterceptors(IntuitInterceptorProvider.java:87) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.services.DataService.executeInterceptors(DataService.java:159) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.intuit.ipp.services.DataService.executeQuery(DataService.java:636) ~[ipp-v3-java-devkit-6.4.1-jar-with-dependencies.jar:na]
at com.fundtap.integration.service.impl.QuickBooksServiceImpl.syncInvoices(QuickBooksServiceImpl.java:177) ~[classes/:na]
at com.fundtap.integration.controller.QuickBooksController.syncInvoices(QuickBooksController.java:142) ~[classes/:na]
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:255) ~[spring-web-6.1.13.jar:6.1.13]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) ~[spring-web-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.13.jar:6.1.13]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.13.jar:6.1.13]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.30.jar:6.0]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.13.jar:6.1.13]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.30.jar:6.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.13.jar:6.1.13]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.13.jar:6.1.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.13.jar:6.1.13]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.13.jar:6.1.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.13.jar:6.1.13]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.13.jar:6.1.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.30.jar:10.1.30]
at java.base/java.lang.Thread.run(Thread.java:1570) ~[na:na]
Request for Recommendations: Could you please provide guidance on:
A recommended version of the QuickBooks Java SDK that is fully compatible with Java 21? Any code snippets or examples that would facilitate smooth integration with this version of Java? Thank you for your attention to this matter. I look forward to your assistance.
Use 6.3.0 which uses Java 17. The higher versions was downgraded back to Java 8.
Hi,
Thank you for your response regarding the use of version 6.3.0. However, I am encountering two deserialization error when integrating with the SDK, which states:
Failed to sync invoices: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.intuit.ipp.data.LineDetailTypeEnum from String "SalesItemLineDetail": not one of the values accepted for Enum class: [TDS_LINE_DETAIL, SUB_TOTAL_LINE_DETAIL, SALES_ITEM_LINE_DETAIL, JOURNAL_ENTRY_LINE_DETAIL, TAX_LINE_DETAIL, ITEM_RECEIPT_LINE_DETAIL, DESCRIPTION_ONLY, SALES_ORDER_ITEM_LINE_DETAIL, ITEM_ADJUSTMENT_LINE_DETAIL, ACCOUNT_BASED_EXPENSE_LINE_DETAIL, DEPOSIT_LINE_DETAIL, GROUP_LINE_DETAIL, ITEM_BASED_EXPENSE_LINE_DETAIL, DISCOUNT_LINE_DETAIL, PURCHASE_ORDER_ITEM_LINE_DETAIL, PAYMENT_LINE_DETAIL, REIMBURSE_LINE_DETAIL]
"com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.intuit.ipp.data.MonthEnum from String "July": not one of the values accepted for Enum class: [OCTOBER, SEPTEMBER, JUNE, MARCH, MAY, APRIL, JULY, JANUARY, FEBRUARY, DECEMBER, AUGUST, NOVEMBER]\n at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.intuit.ipp.data.CompanyInfo["FiscalYearStartMonth"])"
This issue seems to arise from a version mismatch between Jackson libraries used in the SDK (version 2.9.10) and those in my project (version 2.17.2).
Given that the SDK relies on specific Jackson versions, is there any guidance or workaround to handle these deserialization issues without modifying the SDK itself?
Your assistance in resolving this would be greatly appreciated!
@priyanshuKum-are To avoid the deserialization error, please use the Jackson library version specified by the SDK (version 2.9.10). This will ensure compatibility and prevent the deserialization issues you are encountering.
any update here? I am very surprised this sdk is not compatible with Java 17 and up. Any work arounds?
Hi, I am encountering similar issues; as recommended, I am using 6.3.0, but that release has a conflict on the Mail API dependencies. It has both, jakarta.mail and javax.mail; which generates the exception:
java.lang.ClassCastException: class com.sun.mail.handlers.text_plain cannot be cast to class jakarta.activation.DataContentHandler (com.sun.mail.handlers.text_plain and jakarta.activation.DataContentHandler are in unnamed module of loader 'app')
I tried to checkout the source code and rebuild from scratch, it seems that some XSD files are missing or not referenced in the pom.xml file. For example, the Webhooks classes are not generated.
Is there a guideline on how to compile the library? I could help to update all dependencies to make it compatible with modern libraries (i.e., sprintboot 3.x).
Thanks
Juan
Update: Removing the dependency on my project POM (i.e., through exclusions) solves the problem of the two Mail API libraries.
Intuit recently announced discontinuing support for minor version 1 through 74. Version 6.5.0 appears to address this, however is not compatible with Java 17. Will there be a version of the sdk that supports both java 17 and minor version 75 by the July 31st deadline?
https://app.dp.intuit.com/e/es?s=2332625&e=554&elqTrackId=efd74c1a1b7a40299e524d6e5aa03bea&elq=9096f913dfa740d6b404a5e2fbecd423&elqaid=96&elqat=1&elqak=8AF57F0A563EAF7E1D924A80D6B853C858B98DD3E339560A5F3188D6AA2494FC03FC
Hi folks, we just release a version of the QuickBooks Java SDK that's compatible with Java 21 and minor version 75. Check out v6.6.0 and let us know if you have any questions or feedback.
@shweta-intuitdev I am getting the same deserialization error above, even after updating to 6.6.0. Looks like parts of the project are still using outdated versions of the com.fasterxml.jackson packages. SpringBoot relies on newer versions of these packages. Any chance we could update these to the latest release (2.18.x) to make this sdk compatible with spring and eliminate the security vulnerabilities found in the older jackson versions? That would be greatly appreciated.
@NGines88 Could you please provide the details of the deserialization error you're encountering, including for which API it occurs? This information will help us to better understand the issue. Regarding the updating of vulnerable dependencies, we plan to upgrade these in our next release
@ManikaSaiKiran Here is a sample of code that throws the error: DataService service = helper.getDataService(realmId, accessToken); String sql = "select * from Customer where Id = '" + client.getQuickbooksId() + "'"; QueryResult queryResult = service.executeQuery(sql); Customer customer = (Customer) queryResult.getEntities().get(0); sql = "select * from Invoice where CustomerRef = '" + client.getQuickbooksId() + "'"; queryResult = service.executeQuery(sql); Error is thrown on the last line, running the invoice query. Same error log as OP, although my version of SpringBoot is using databind 2.18.2
Error :com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.intuit.ipp.data.LineDetailTypeEnum from String "SalesItemLineDetail": not one of the values accepted for Enum class: [TDS_LINE_DETAIL, SUB_TOTAL_LINE_DETAIL, SALES_ITEM_LINE_DETAIL, JOURNAL_ENTRY_LINE_DETAIL, TAX_LINE_DETAIL, ITEM_RECEIPT_LINE_DETAIL, DESCRIPTION_ONLY, SALES_ORDER_ITEM_LINE_DETAIL, ITEM_ADJUSTMENT_LINE_DETAIL, ACCOUNT_BASED_EXPENSE_LINE_DETAIL, DEPOSIT_LINE_DETAIL, GROUP_LINE_DETAIL, ITEM_BASED_EXPENSE_LINE_DETAIL, DISCOUNT_LINE_DETAIL, PURCHASE_ORDER_ITEM_LINE_DETAIL, PAYMENT_LINE_DETAIL, REIMBURSE_LINE_DETAIL]
at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.intuit.ipp.data.Invoice["Line"]->java.util.ArrayList[0]->com.intuit.ipp.data.Line["DetailType"])
Here is another error thrown when executing this query: "select * from Account"
Exception while json deserialize
Error :com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.intuit.ipp.data.AccountClassificationEnum from String "Liability": not one of the values accepted for Enum class: [EXPENSE, REVENUE, LIABILITY, ASSET, EQUITY]
at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.intuit.ipp.data.Account["Classification"])
@shweta-intuitdev Our application uses Java 1.8, Spring Boot 2.7, and Intuit SDK dependencies for 6.0.5. Here are the Intuit Maven dependencies we depend on:
<dependency>
<groupId>com.intuit.quickbooks-online</groupId>
<artifactId>ipp-v3-java-data</artifactId>
<version>6.0.5</version>
</dependency>
<dependency>
<groupId>com.intuit.quickbooks-online</groupId>
<artifactId>ipp-v3-java-devkit</artifactId>
<version>6.0.5</version>
</dependency>
<dependency>
<groupId>com.intuit.quickbooks-online</groupId>
<artifactId>oauth2-platform-api</artifactId>
<version>6.0.5</version>
</dependency>
We don't pass a parameter called minorversion in your API request. You mentioned that v.6.6.0 could be used, but it's not compatible with an older Java 1.8. This error occurs when we try to run the application: com/intuit/ipp/exception/InvalidTokenException has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 52.0.
We tried switching to version 6.4.0, which let us build and start the application. According to Intuit's requirements, it seems that we have to update to the latest version, which is 6.5.0 or higher. Is it true?
Please tell us how we can meet Intuit's needs.
@kirill-mally If you're currently using Java 1.8, I suggest upgrading to version 6.5.0, which is the latest release including minor version 75. It's important to note that version 6.6.0 is compatible with Java 21
Another vote for getting com.fasterxml.jackson dependencies updated ASAP. We have had to downgrade our main app framework security fixes just to allow organization to be able to post to Quickbooks again. How can a company as big as Intuit take so long to address these urgent issues??
My Java 17 dependency application needed to upgrade jackson dependencies to 2.17.3 or better for CVE resolution.
I don't have a way to patch your SDK without forking it:
ObjectMapper mapper = new ObjectMapper();
mapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
We use Java 21, Spring Boot 2.7.18, and Intuit 6.7.0, and we encountered the same issues.
Our workaround was to switch to the XML API by adding the following file to our classpath:
src/main/resources/intuit-config.xml
<intuit-config>
<message>
<request>
<compression>gzip</compression>
<serialization>xml</serialization>
</request>
<response>
<compression>gzip</compression>
<serialization>xml</serialization>
</response>
</message>
</intuit-config>
Can you please guide me how to generate the access.token.secret mentioned in the ippdevkit.properties as I could not find it after creating an app and searching it on the playground?