Hello World для Intuit Anywhere Java найти клиентов, которые не работают

#java #quickbooks #intuit-partner-platform #quickbooks-online #intuit

#java #quickbooks #quickbooks-онлайн #intuit-партнерская платформа

Вопрос:

После установления успешного подключения к Intuit с помощью OpenID и нажатия ссылки «Найти всех клиентов» (убедившись, что клиенты (только 2 клиента) существуют в моей учетной записи Intuit), в которой используется следующий набор кода на JSP:

 QBCustomerService customerService = null;
    try {
        // Create the customer service.
        customerService = QBServiceFactory.getService(context,
                QBCustomerService.class);
    } catch (QBInvalidContextException e) {
        System.out.println("(QBInvalidContextException thrown by getService: "   e.getMessage());
    }

     try {
        // Using the service, retrieve all customers and display their names.
        List<QBCustomer> customers = customerService
            .findAll(context, 1, 100);

    } catch (Exception e) {
         System.out.println("Exception thrown by findAll: "   e.getMessage());
     }
  

Я получаю следующую ОШИБКУ:

 SEVERE: Error: 500 
Exception thrown by findAll: com.intuit.ds.qb.IDSException: 
    at com.intuit.ds.qb.IDSRestClient.sendRequest(IDSRestClient.java:521)
    at com.intuit.ds.qb.IDSRestClient.post(IDSRestClient.java:164)
    at com.intuit.ds.qb.qbo.QBORequestCreator.doIDSPost(QBORequestCreator.java:28)
    at com.intuit.ds.qb.qbo.AbstractQBOBaseDataService.findAll(AbstractQBOBaseDataService.java:170)
    at com.intuit.ds.qb.qbo.QBOCustomerService.findAll(QBOCustomerService.java:127)
    at org.apache.jsp.findallcustomers_jsp._jspService(findallcustomers_jsp.java:131)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
  

Пожалуйста, дайте мне знать, если я чего-то не хватает или делаю что-то неправильно. Кроме того, дайте мне знать, если вы хотите узнать больше о какой-либо конфигурации, которую я делаю для настройки этого приложения.

Редактировать

Даже после компиляции приложения V3, предложенного Manas Ref — https://github.com/IntuitDeveloperRelations/QuickbooksV3API-Java

во время запуска этого приложения я получаю эту ошибку:

 SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: com/intuit/ipp/exception/FMSException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getDeclaredConstructors(Unknown Source)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:229)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:962)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:935)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.intuit.ipp.exception.FMSException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    ... 40 more

Jul 07, 2014 1:20:19 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet qbapiv3
java.lang.ClassNotFoundException: com.intuit.ipp.exception.FMSException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getDeclaredConstructors(Unknown Source)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:229)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:962)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:935)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
  

Я дважды проверил, что класс FMSException все еще присутствует в библиотеке, которую я загрузил и сделал доступной по пути к классу отсюда
.

РЕДАКТИРОВАТЬ Я каким-то образом настроил QuickBooks версии 2 для целей подключения и использования библиотек версии 3 для выполнения DML в QuickBooks (создание / выборка клиента — работает нормально). Однако я не могу понять, почему я не могу настроить QuickBooks версии 3 в качестве Java-приложения.

Мой главный девиз, стоящий за использованием QuickBooks, заключается в том, чтобы внешнее приложение выполнялось всякий раз, когда в QuickBooks есть DML. Я не знаю, есть ли такая возможность в QuickBooks:

  1. Написание триггера для определенных объектов или,
  2. Какие-то push-уведомления для клиентов (модель издатель — подписчик) — Здесь издателем будет учетная запись QuickBooks, а Подписчиком будет наше зарегистрированное приложение. (срабатывает всякий раз, когда происходит какой-либо DML).

Пожалуйста, дайте мне знать ваши предложения по этому поводу.

Комментарии:

1. ошибка 500 обычно возникает, когда срок действия токенов истек или закончилась подписка компании. Проверьте, так ли это. Попробуйте восстановить свои токены OAuth.

Ответ №1:

Вы используете образец приложения JAVA V2. API версии V2 устарели, и вы не можете получить доступ к данным глобальной компании, используя версию V2.

Пожалуйста, используйте образец приложения V3, ссылка — https://github.com/IntuitDeveloperRelations/QuickbooksV3API-Java

Инструкция по установке доступна здесь — https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/sample_code/spring_sample_app_for_quickbooksapi/0002_creating_the_app

Команда Maven —

 mvn install:install-file -DgroupId=com.intuit.code.devkit.v3 -DartifactId=ipp-v3-java-devkit -Dversion=2.3.1 -Dpackaging=jar -Dfile=<JarFilePath>ipp-v3-java-devkit-2.3.1-jar-with-dependencies.jar
  

PN — При необходимости, пожалуйста, измените номер версии в соответствии с имеющейся у вас версией devkit.
Последняя версия devkit доступна здесь — https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits

Повторные запросы на Push-уведомления На данный момент эта услуга недоступна в рабочей среде. Есть пара существующих решений, о которых вы должны узнать, немного погуглив.

Imp — Вам не следует использовать устаревшее приложение версии V2.

Спасибо

Комментарии:

1. спасибо, что вернулись. Похоже, что при настройке API Quickbooks V3 он не компилировал POM и не смог удовлетворить зависимость, и даже после подготовки pom я не могу его выполнить. Пожалуйста, ознакомьтесь с моими обновлениями в starting V3 API в самом моем вопросе.

2. Установили ли вы зависимости, как указано в следующем руководстве по установке? developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/… В команде mvn, пожалуйста, используйте последний номер версии devkit (т.е. 2.3.1). ipp-java-qbapihelper jar доступен как часть архива devkit. Это должно сработать. Пожалуйста, сообщите нам, если вы все еще сталкиваетесь с какой-либо проблемой. Спасибо

3. Манас, я также не могу установить зависимости с помощью команды mvn. Дайте мне знать, поможет ли вам трассировка стека ошибок понять. Смотрите результат здесь: pastebin.com/S5njS8Lm (Вывод Mvn QuickBooks)

4. После внесения некоторых поправок в POM (здесь: pastebin.com/H9aJdY9J ), Я получаю другую ошибку, и, похоже, она также загрузила некоторую информацию. Ошибка, которую я получаю сейчас, такова: pastebin.com/UdRWSZVH . Пожалуйста, дайте мне знать об этом. Я также упомянул в POM, что 3 зависимости не работают (не компилируются)

5. Пожалуйста, ознакомьтесь с моими правками и дайте мне знать, есть ли возможность настроить приложение (в качестве фонового приложения). Это означает, что пользователь будет взаимодействовать только со стандартными страницами QuickBooks, а за экраном наше приложение настройки будет прослушивать события DML, происходящие для этой конкретной учетной записи QuickBooks (например, служба push-уведомлений). Есть идеи!