QuickBooks不适用于Google App Engine [英] QuickBooks NOT working on Google App Engine

查看:150
本文介绍了QuickBooks不适用于Google App Engine的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  OAuthCredentials oauthcredentials = new 

我试图通过谷歌应用程序引擎连接到quickbooks。 OAuthCredentials(consumerKey,consumerSecret,accessToken,accessTokenSecret);

PlatformSessionContext context = new PlatformSessionContext(oauthcredentials,appToken,PlatformServiceType.QBO,realmID);

QBCustomerService customerService = QBServiceFactory.getService(context,QBCustomerService.class);

QBIdType idType = new QBIdType(context);

idType.setValue(2);

QBCustomer c = customerService.findById(context,idType);

System.err.println(c.getName());

它始终引发此错误:

  com.intuit.ds.qb.IDSException:java.net.SocketException:操作失败:未知错误。 
at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:105)
at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:118)
at com.google.appengine.api.socket.SocketApiHelper.makeSyncCall(SocketApiHelper.java:82)
at com.google.appengine.api.socket.AppEngineSocketImpl.setSocketOptionAsBytes(AppEngineSocketImpl.java:229)
at com.google.appengine.api.socket.AppEngineSocketOptions $ BooleanCheckFunction.apply(AppEngineSocketOptions.java:168)
at com.google.appengine.api.socket.AppEngineSocketOptions $ Option.validateAndApply(AppEngineSocketOptions。 java:358)
at com.google.appengine.api.socket.AppEngineSocketOptions $ Option.validateAndApply(AppEngineSocketOptions.java:373)
at com.google.appengine.api.socket.AppEngineSocketImpl.setOption( AppEngineSocketImpl.java:144)
,位于com.google.appengine.api.socket.AppEngineSocketImpl.setOption(AppEngineSocketImpl.java:171)
at java.net.Socket.setTcpNoDelay(Socket.java:950)
at sun.security.ssl.BaseSSLSocketImpl.setTcpNoDelay(BaseSSLSocketImpl.java:330)
at org.apache.http .impl.conn.DefaultClientConnectionOperator.prepareSocket(DefaultClientConnectionOperator.java:222)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:153)
at org.apache.http .impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http .impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http .impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at com.intuit.ds.qb.IDSRestClient.sendRequest(IDSRestClient.java:557)
at com.intuit.ds.qb.IDSRestClient.get(IDSRestClient.java:160)
at com.intuit.ds.qb.qbo.QBOService.getQBOBaseURI(QBOService.java:24)
at com .intuit.ds.qb.IDSRestClient.setServiceTypeProperty(IDSRestClient.java:698)
at com.intuit.ds.qb.qbo.QBORequestCreator.doIDSGet(QBORequestCreator.java:41)
com.intuit .ds.qb.qbo.AbstractQBOBaseDataService.findById(AbstractQBOBaseDataService.java:185)
at com.intuit.ds.qb.qbo.QBOCustomerService.findById(QBOCustomerService.java:153)
at com.xyz .server.tasks.SyncCustomerTask.runMethod(SyncCustomerTask.java:85)
at com.xyz.server.tasks.SyncCustomerTask.run(SyncCustomerTask.java:33)
com.google.apphosting.utils .servlet.DeferredTaskServlet.performRequest(DeferredTaskServlet.java:136)
,com.google.app hosting.utils.servlet.DeferredTaskServlet.service(DeferredTaskServlet.java:99)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet。 ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)
位于com.google.apphosting.utils.servlet。 ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty。 SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
位于org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.apphosting.utils.servlet。 JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
at com.goog le.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
at org。 mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty。 servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext。处理(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
at org.mortbay.jetty.handler.HandlerWrapper.handle( HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnecti on $ RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection。通过com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)处理(HttpConnection.java:404)
;在com.google.apphosting.runtime.JavaRuntime $ RequestRunnable处处理
。运行(JavaRuntime.java:438)
,位于com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:480)
,位于com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext .java:487)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:774)
at com.google.tracing.TraceContext $ DoInTraceContext.runInContext(TraceContext.java:751)
,位于com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342)
,位于com.google.tracing.TraceConte xt $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334)
at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:484)
at com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:722)

其中at com.xyz.server.tasks.SyncCustomerTask.runMethod(SyncCustomerTask.java:85) findbyId (2)在我的代码行。
有什么建议如何解决这个问题?
任何帮助都将真正实现appricng

解决方案

AppEngine只提供有限的套接字API 。特别是,你不能使用大多数 getsockopt / setsockopt 调用,在你的情况下会抛出错误( setTcpNoDelay(..))。



QuickBooks SDK似乎是封闭源代码,所以没有办法绕过它。



更新:



GAE Java SDK 1.8.1 ,可以使用套接字选项方法:它们是无操作的,但它们不会抛出以前的例外:

Sockets API现在允许客户端代码针对套接字调用get / set选项。以前,调用提出了未实现例外。当调用java.net.Socket.get< option>()时,将返回一个模拟值,调用set< option>()将被忽略。


I was trying to connect to quickbooks online from google app engine by just running this simple code:

OAuthCredentials oauthcredentials = new OAuthCredentials(consumerKey, consumerSecret, accessToken, accessTokenSecret);

PlatformSessionContext context = new PlatformSessionContext(oauthcredentials, appToken, PlatformServiceType.QBO, realmID);

QBCustomerService customerService = QBServiceFactory.getService(context, QBCustomerService.class);

QBIdType idType = new QBIdType(context);

idType.setValue("2");

QBCustomer c = customerService.findById(context, idType);

System.err.println(c.getName());

and it always throws me this error:

com.intuit.ds.qb.IDSException: java.net.SocketException: Operation failure: Unknown error.
    at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:105)
    at com.google.appengine.api.socket.SocketApiHelper.translateError(SocketApiHelper.java:118)
    at com.google.appengine.api.socket.SocketApiHelper.makeSyncCall(SocketApiHelper.java:82)
    at com.google.appengine.api.socket.AppEngineSocketImpl.setSocketOptionAsBytes(AppEngineSocketImpl.java:229)
    at com.google.appengine.api.socket.AppEngineSocketOptions$BooleanCheckFunction.apply(AppEngineSocketOptions.java:168)
    at com.google.appengine.api.socket.AppEngineSocketOptions$Option.validateAndApply(AppEngineSocketOptions.java:358)
    at com.google.appengine.api.socket.AppEngineSocketOptions$Option.validateAndApply(AppEngineSocketOptions.java:373)
    at com.google.appengine.api.socket.AppEngineSocketImpl.setOption(AppEngineSocketImpl.java:144)
    at com.google.appengine.api.socket.AppEngineSocketImpl.setOption(AppEngineSocketImpl.java:171)
    at java.net.Socket.setTcpNoDelay(Socket.java:950)
    at sun.security.ssl.BaseSSLSocketImpl.setTcpNoDelay(BaseSSLSocketImpl.java:330)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.prepareSocket(DefaultClientConnectionOperator.java:222)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:153)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
    at com.intuit.ds.qb.IDSRestClient.sendRequest(IDSRestClient.java:557)
    at com.intuit.ds.qb.IDSRestClient.get(IDSRestClient.java:160)
    at com.intuit.ds.qb.qbo.QBOService.getQBOBaseURI(QBOService.java:24)
    at com.intuit.ds.qb.IDSRestClient.setServiceTypeProperty(IDSRestClient.java:698)
    at com.intuit.ds.qb.qbo.QBORequestCreator.doIDSGet(QBORequestCreator.java:41)
    at com.intuit.ds.qb.qbo.AbstractQBOBaseDataService.findById(AbstractQBOBaseDataService.java:185)
    at com.intuit.ds.qb.qbo.QBOCustomerService.findById(QBOCustomerService.java:153)
    at com.xyz.server.tasks.SyncCustomerTask.runMethod(SyncCustomerTask.java:85)
    at com.xyz.server.tasks.SyncCustomerTask.run(SyncCustomerTask.java:33)
    at com.google.apphosting.utils.servlet.DeferredTaskServlet.performRequest(DeferredTaskServlet.java:136)
    at com.google.apphosting.utils.servlet.DeferredTaskServlet.service(DeferredTaskServlet.java:99)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:438)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487)
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774)
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    at java.lang.Thread.run(Thread.java:722)

where at com.xyz.server.tasks.SyncCustomerTask.runMethod(SyncCustomerTask.java:85) is the findbyId("2") line in my code. Any suggestions how to get around this issue? Any help will be really really appriciated

解决方案

AppEngine provides only a limited Socket API. In particular, you cannot use most getsockopt/setsockopt calls, which in your case throw the error (setTcpNoDelay(..)).

QuickBooks SDK seems to be closed-source, so there is no way around it.

Update:

As of GAE Java SDK 1.8.1., it's possible to use socket options methods: they are a no-op, but they do not throw exceptions as they used to:

The Sockets API now allows client code to call get/set options against sockets. Previously, calls raised "Not Implemented" exceptions. When java.net.Socket.get<option>() is called, a mock value is returned, calls to set<option>() will be silently ignored.

这篇关于QuickBooks不适用于Google App Engine的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆