- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
(是的,我意识到这个问题与another question posted类似;但是,这个问题从未得到回答。)
目的
我试图将Clojure与Axis 2一起使用QuickBooks WebConnector(从现在开始使用QBWC)访问QuickBooks数据。 QBWC使用SOAP与外部应用程序进行通信,因此这就是我的Clojure应用程序使用Axis 2作为SOAP接口的原因。我使用来自GitHub的micha's clj-soap来提供与Axis 2的Java调用的更高级别(抽象)的Clojure互操作。
问题
问题在于通过QBWC对我的SOAP Web服务进行身份验证。使用我的SOAP Web服务的authenticate
方法,QBWC引发错误。在QBWC日志文件中,它表示以下内容:
QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: Authentication failed due to following error message: Object reference not set to an instance of an object.
StackTrace = at QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)
Source = QBWebConnector
developer.intuit.com.SOCAccess
的类,并定义了与QBWC通信所需的许多方法(包括
authenticate
,
serverVersion
等)。指示返回值或参数类型。Clojure编译成Java字节码,默认情况下不使用强类型,这转化为大多数类型提示
Object
,但是由于Java2WSDL的工作方式,因此需要强类型。例如:
^String
最终显示为
<xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
^Object
最终显示为
<xs:element minOccurs="0" name="return" nillable="true" type="xs:anyType"/>
^"[Ljava.lang.String;"
与
String[]
相同,并以
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/>
结尾)
(soap/defservice developer.intuit.com.SOCAccess
(authenticate2 ^"[Ljava.lang.String;" [^String username ^String password]
(authenticate2* username password))
(authenticate ^"[Ljava.lang.String;" [^String username ^String password]
(authenticate* username password))
(prefix35authenticate ^"[Ljava.lang.String;" [^String username ^String password]
(authenticate* username password))
(sendRequestXML ^Object
[^String ticket ^String hcp-response ^String company-file-name ^String qb-xml-country
^Integer qb-xml-major-vers, ^Integer qb-xml-minor-vers]
(send-request-xml ticket hcp-response company-file-name qb-xml-country qb-xml-major-vers qb-xml-minor-vers))
(receiveResponseXML ^Integer [^String ticket ^String response ^String hresult ^String message]
(receive-response-xml ticket response hresult message))
(connectionError ^Object [^String ticket ^String hresult ^String message]
(connection-error ticket hresult message))
(getLastError ^String [^String ticket]
(get-last-error ticket))
(closeConnection ^String [^String ticket]
(close-connection ticket))
(getServerVersion ^String [^String ticket] (server-version ticket))
(serverVersion ^String [^String ticket] (server-version ticket))
(clientVersion ^String [^String version] (client-version version))
(interactiveDone ^String [^String ticket] (interactive-done ticket))
(interactiveRejected ^String [^String ticket ^String reason] (interactive-rejected ticket reason)))
AxisServer
并使用类名称
.addService
调用
"developer.intuit.com.SOCAccess"
后,输出窗口将输出以下内容:该类名称是从上面的代码编译的类:
Jul 07, 2014 11:22:20 AM org.apache.axis2.transport.http.server.DefaultConnectionListener run
INFO: Listening on port 6060
(authenticate "my-username" "my-password")
时,返回值应该是
String[]
,并且println()输出表明它确实是
String[]
,但是返回值仅显示为数组的第一个元素,这很奇怪。我的猜测是这是QBWC中
Object reference not set to an instance of an object
错误的原因,因为它试图获取
String
的第n个元素,就好像它是一个数组一样。
20140707.20:06:40 UTC : QBWebConnector.WebServiceManager.DoUpdateSelected() : updateWS() for application = 'SOCAccess' has STARTED
20140707.20:06:40 UTC : QBWebConnector.RegistryManager.getUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock = FALSE
20140707.20:06:40 UTC : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock has been set to True
20140707.20:06:40 UTC : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session locked *********************
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.instantiateWebService() : Initiated connection to the following application.
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.instantiateWebService() : AppName: SOCAccess
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.instantiateWebService() : AppUniqueName (if available): SOCAccess
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.instantiateWebService() : AppURL: http://localhost:6060/axis2/services/SOCAccess
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_serverVersion() : *** Calling serverVersion().
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_serverVersion() : Received from serverVersion() following parameter:<serverVersionRet="">
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_serverVersion() : This application sent a null for server version. Allowing update operation.
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_clientVersion() : *** Calling clientVersion() with following parameter:<productVersion="2.1.0.27">
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_clientVersion() : Received from clientVersion() following parameter:<clientVersionRet="">
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_clientVersion() : This application agrees with the current version of QBWebConnector. Allowing update operation.
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_authenticate() : Authenticating to application 'SOCAccess', username = 'alexandergunnarson'
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="alexandergunnarson"><password=<MaskedForSecurity>
20140707.20:06:40 UTC : QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: Authentication failed due to following error message.
Object reference not set to an instance of an object.
More info:
StackTrace = at QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)
Source = QBWebConnector
20140707.20:06:40 UTC : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock has been set to False
20140707.20:06:40 UTC : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session unlocked *********************
20140707.20:06:40 UTC : QBWebConnector.WebServiceManager.DoUpdateSelected() : Update completed with errors. See log (QWClog.txt) for details.
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
<soapenv:Body>
<axis2ns34:authenticate xmlns:axis2ns34=\"http://developer.intuit.com/\">
<axis2ns35:args0 xmlns:axis2ns35=\"http://developer.intuit.com/\">
alexandergunnarson
</axis2ns35:args0>
<axis2ns36:args1 xmlns:axis2ns36=\"http://developer.intuit.com/\">
password
</axis2ns36:args1>
</axis2ns34:authenticate>
</soapenv:Body>
</soapenv:Envelope>
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
<soapenv:Body>
<ns:authenticateResponse xmlns:ns=\"http://developer.intuit.com/\">
<return>my-session-token</return>
<return>none</return>
<return>60</return>
<return>60</return>
</ns:authenticateResponse>
</soapenv:Body>
</soapenv:Envelope>
QBWebConnectorSvcStub
类的源代码,特别关注某些方法(首先编辑
authenticate
,
serverVersion
和
clientVersion
,因为这是QBWC首先调用的)。对于这些方法,我将返回值绑定到Clojure类中的函数,将QBWebConnectorSvcStub方法的输入传递给相应的Clojure函数,并返回所述函数的输出。基本上,我让Clojure函数完成了工作,而
QBWebConnectorSvcStub
充当了SOAP中间人。
clientVersion
可以按预期工作,如日志所示:
Received from clientVersion() following parameter:<clientVersionRet="">
:
QBWebConnector.SOAPWebService.do_authenticate() : Authenticating to application 'QBWebConnectorSvcStub', username = 'alexandergunnarson'
QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="alexandergunnarson"><password=<MaskedForSecurity>
QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: Authentication failed due to following error message.
Object reference not set to an instance of an object.
<ns:authenticateResponse xmlns:ns="http://developer.intuit.com/">
<return xmlns:ax22="http://io.java/xsd" xmlns:ax21="http://rmi.java/xsd" xmlns:ax25="http://developer.intuit.com/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax25:QBWebConnectorSvcStub_AuthenticateResponse">
<authenticateResult>
<string xmlns="http://developer.intuit.com/">
my-session-token
</string>
<string xmlns="http://developer.intuit.com/">
nvu
</string>
<string xmlns="http://developer.intuit.com/">
60
</string>
<string xmlns="http://developer.intuit.com/">
60
</string>
</authenticateResult>
<authenticateResultSpecified>
true
</authenticateResultSpecified>
</return>
</ns:authenticateResponse>
最佳答案
我不确定您的QBC文件是什么样(为Quickbooks Web Connector定义应用程序的xml文件),但是我通过将样式设置从更改为解决了类似的问题<Style>RPC</Style>
至<Style>DocWrapped</Style>
如果未定义,请尝试使用“ DocWrapped”或“ RPC”值。 QBWC_proguide中的样式的详细信息:
Web服务使用的SOAP编码样式。如果未提供,
默认使用的是文档。
文档是.NET在以下情况下使用的标准编码样式:
[WebMethod]属性应用于函数声明。
(可选)您可以指定值DocWrapped。 DocWrapped
与我们构建的Axis Web服务可以很好地互操作
建议使用WSDL2Java从中生成Java Web类
Web连接器使用的标准WSDL(http://
developer.intuit.com/uploadedFiles/Support/
QBWebConnectorSvc.wsdl)
或者,可以选择指定值RPC。 RPC样式是
Java类为Axis时,Axis使用的标准编码样式
通过JWS或自动将其转换为SOAP服务
Java2WSDL工具。
关于java - 使用QuickBooks Web Connector的身份验证问题:对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618311/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!