【问题标题】:Exception when initializing new PlatformClient()初始化 new PlatformClient() 时出现异常
【发布时间】:2013-07-10 21:45:07
【问题描述】:

我正在使用 intuit (ipp-java-devkit-2.0.11-jar-with-dependencies.jar) 提供的 jar 并且遇到了一些困难。我能够创建我的 PlatformSessionContext,所以我知道它并没有完全损坏。调用 new PlatformClient() 时出现以下异常:

16:29:58,204 ERROR [[requestHandlerBlueDot]] Servlet.service() for servlet requestHandlerBlueDot threw exception java.lang.IllegalStateException: org.slf4j.LoggerFactory could not be successfully initialized. See also http://www.slf4j.org/codes.html#unsuccessfulInit
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:288)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
    at com.intuit.platform.util.LoggerImpl.getLogger(LoggerImpl.java:48)
    at com.intuit.platform.util.LoggerImpl.getInstance(LoggerImpl.java:32)
    at com.intuit.platform.client.PlatformClient.<clinit>(PlatformClient.java:52)
    at com.jt.quickbooks.BlueDotMenuServlet.doGet(BlueDotMenuServlet.java:66)

有什么我错过的吗?

【问题讨论】:

    标签: intuit-partner-platform


    【解决方案1】:

    想通了。问题是 slf4j 日志记录 jar 是较新的版本,并且与我已经在我的服务器上运行的不兼容。发现了一个我之前没有注意到的(jBoss)部署错误:

    16:27:26,172 错误 [STDERR] SLF4J:slf4j-api 1.6.x(或更高版本)与此绑定不兼容。
    16:27:26,173 错误 [STDERR] SLF4J:您的绑定是 1.5.5 或更早版本。
    16:27:26,173 错误 [STDERR] SLF4J:将绑定升级到版本 1.6.x。或 2.0.x

    修复是删除 ipp-java-devkit-2.0.11-jar-with-dependencies.jar 并替换为 ipp-java-devkit-2.0.11.jar 然后为缺少的依赖项添加几个 jar。
    我需要添加的罐子是:
    org.apache.felix.bundlerepository-1.0.3.jar 用于 xmlpull.v1.xmlpullparser、xmlpull.v1.xmlserializer、kdom.Document 用于 OAuth 的 signpost-core-1.2.1.1.jar

    【讨论】:

      【解决方案2】:

      请检查您的 menuproxy 网址是否正确。这可能会产生这个问题。 参考: https://developer.intuit.com/docs/0025_quickbooksapi/0010_getting_started/0020_connect/0010_from_within_your_app/add_the_connect_button

      【讨论】:

      • 我相信是对的。 menuproxy 指向我的 servlet,它处理获取蓝点菜单。这是正确的吗?
      【解决方案3】:

      它对我来说很好用。请您尝试以下方法。

      final PlatformSessionContext context = getPlatformContext(accesstoken,
              accessstokensecret, realmID, dataSource);
      
      PlatformClient client = new PlatformClient();
      
      System.out.println("User's email " + client.getUserInfo(context).getEmail());
      

      JavaDoc 参考 - http://developer-static.intuit.com/SDKDocs/QBV2Doc/ipp-java-devkit-2.0.10-SNAPSHOT-javadoc/ (com.intuit.platform.client.PlatformClient)

      如果它适合你,请告诉我。

      import com.intuit.platform.client.PlatformClient;
      import com.intuit.platform.client.PlatformServiceType;
      import com.intuit.platform.client.PlatformSessionContext;
      import com.intuit.platform.client.security.OAuthCredentials;
      
      
      public class Test {
      
          String accesstoken = "keys ****";
          String accessstokensecret = "keys ****";
          String realmID = "*********";
          String dataSource = "QBD";
      
          String appToken = "keys ****";
          String oauth_consumer_key = "keys ****";
          String oauth_consumer_secret = "keys ****";
      
          Test(){
              final PlatformSessionContext context = getPlatformContext(accesstoken,
                      accessstokensecret, realmID, dataSource);
              System.out.println(context);
              PlatformClient client = new PlatformClient();
              System.out.println("User's email " + client.getUserInfo(context).getEmail());
          }
      
          public PlatformSessionContext getPlatformContext(final String accessToken,
                  final String accessTokenSecret, final String realmID,
                  final String dataSource) {
      
              PlatformServiceType serviceType;
              if (dataSource.equalsIgnoreCase("QBO")) {
                  serviceType = PlatformServiceType.QBO;
              } else {
                  serviceType = PlatformServiceType.QBD;
              }
      
              final OAuthCredentials oauthcredentials = new OAuthCredentials(
                      oauth_consumer_key, oauth_consumer_secret,
                      accessToken, accessTokenSecret);
      
              final PlatformSessionContext context = new PlatformSessionContext(
                      oauthcredentials, appToken, serviceType, realmID);
      
              return context;
          }
      
          public static void main(String args[]){
              Test test = new Test();
          }
      }
      

      谢谢

      【讨论】:

      • 添加日志没有任何作用。从上面的堆栈跟踪中可以看出,代码没有通过“new PlatformClient()”。
      • 你能分享你得到这个异常的那段代码吗?我会尝试重新创建它。
      • 是的,我的类路径中都有,但两者都是必需的吗?
      • 这里是代码:final PlatformSessionContext context = webutils.getPlatformContext(accesstoken, accessstokensecret, realmID); PrintWriter out = response.getWriter();尝试 { PlatformClient pClient = new PlatformClient(); StringBuffer sb = new StringBuffer(); List menuList = pClient.getAppMenu(context); if (menuList != null) { for (String mItem : menuList) { sb.append(mItem); out.println(mItem); } } } catch (Exception e) { _log.error("BlueDotMenuServlet 中的异常" + e.getMessage()); }
      • 对不起。我的最后一条评论被错误地删除了。我在我的原始帖子中添加了一个独立的代码。 Loggerfactory 一直在初始化。我无法重现这种情况。您能否使用您的 oauth 密钥尝试使用独立的 pgm。请告诉我进展如何。
      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多