我试图刷新所有网站的某个用户帐户(有时当用户输入特定类型的账户,他们没有得到完全刷新,所以我们琬做T所有的用户帐户)Yodlee公司 - startSiteRefresh给405(方法不允许)
的完整强制刷新按照startSiteRefresh,我们应该使用startSiteRefresh,但是我对startSiteFresh
实际调用得到一个405
错误,即Locators.refreshService.startSiteRefresh(userContext,id,refreshParameters)
这里是代码(写在scala
中,但使用轴/ soap的java
API),它应该对应于所示的逻辑。
def initiateRefresh(userContext:UserContext)(implicit cobrandContext:CobrandContext) = {
val toRefresh = Locators.siteAccountManagement.getAllSiteAccounts(userContext).list.collect{
case x:SiteAccountInfo if
x.getSiteRefreshInfo.getSiteRefreshStatus == SiteRefreshStatus.REFRESH_NEVER_INITIATED ||
x.getSiteRefreshInfo.getSiteRefreshStatus == SiteRefreshStatus.REFRESH_TIMED_OUT ||
x.getSiteRefreshInfo.getSiteRefreshStatus == SiteRefreshStatus.REFRESH_COMPLETED
=> x.getSiteAccountId
}
val refreshParameters = new RefreshParameters()
refreshParameters.setRefreshPriority(RefreshInitiate.High.id.toInt)
refreshParameters.setRefreshMode(RefreshMode.NORMAL_REFRESH_MODE)
refreshParameters.setForceRefresh(true)
toRefresh.foreach{id =>
Locators.refreshService.startSiteRefresh(userContext,id,refreshParameters)
}
}
RefreshInitiate
在这里被定义
sealed abstract class RefreshInitiate(val id:Long)
object RefreshInitiate {
case object High extends RefreshInitiate(1)
case object Low extends RefreshInitiate(2)
case object StopReasonTimeout extends RefreshInitiate(100)
case object StopReasonUserAborted extends RefreshInitiate(101)
case object StopReasonMFATimeout extends RefreshInitiate(102)
case object StopReasonMFAGathererTimeout extends RefreshInitiate(103)
}
所以RefreshInitiate.High.id.toInt
对应于INT(1),这是从java_soap_example com.yodlee.sampleapps.helper.RefreshHelper
类
其它呼叫等startSiteReferesh2
(其在java_soap_example用于拍摄)和startSiteRefresh7
也返回405
这是从调用堆栈跟踪
<p>
(405)Method Not Allowed
</p>
</div>
<div class="details block">
<pre class="stacktrace">at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)</pre>
<pre class="stacktrace">at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)</pre>
<pre class="stacktrace">at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)</pre>
<pre class="stacktrace">at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)</pre>
<pre class="stacktrace">at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)</pre>
<pre class="stacktrace">at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)</pre>
<pre class="stacktrace">at org.apache.axis.client.Call.invokeEngine(Call.java:2784)</pre>
<pre class="stacktrace">at org.apache.axis.client.Call.invoke(Call.java:2767)</pre>
<pre class="stacktrace">at org.apache.axis.client.Call.invoke(Call.java:2443)</pre>
<pre class="stacktrace">at org.apache.axis.client.Call.invoke(Call.java:2366)</pre>
<pre class="stacktrace">at org.apache.axis.client.Call.invoke(Call.java:1812)</pre>
<pre class="stacktrace">at com.yodlee.soap.core.refresh.refresh.RefreshServiceSoapBindingStub.startSiteRefresh(RefreshServiceSoapBindingStub.java:5079)</pre>
<pre class="stacktrace">at com.monetise.yodlee.login.Sites$$anonfun$initiateRefresh$1.apply(Sites.scala:98)</pre>
所以它似乎是Yodlee公司抛出了405作为一个实际的HTTP错误(而不是实际的网站,Yodlee公司是令人耳目一新,其抛出的错误代码)
EDIT3:正在使用的定义如下
def refreshService = {
def locator = new RefreshServiceLocator()
val serviceName = locator.getRefreshServiceWSDDServiceName + Settings.sdkVersion
locator.setRefreshServiceEndpointAddress(
Settings.soapURL + "/" + serviceName
)
locator.getRefreshService
}
CONFIGS为URL的刷新定位器是如下
export YODLEE_SOAPURL="https://rest.developer.yodlee.com/services/services"
export YODLEE_SDKVERSION="_12_0"
端点最终URL最终被https://rest.developer.yodlee.com/services/services/RefreshService_12_0
,才应使用startSiteRefresh和你得到405 HTTP错误代码或响应Yodlee公司的错误代码?如果你在Yodlee的回应中,那么你能否请你检查你是否在调用stopSiteRefresh,那么请不要使用它,因为它会导致405(用户中止刷新)。 –
错误代码是不是在Yodlee公司的反应发生,其一般的HTTP错误Yodlee公司抛出(经由轴的SOAP API,它级联),请编辑更多信息 这是发起刷新的代码所示准确,在完成各种'addSite'调用之后,它也会相对不久完成,但根据文档,它应该工作,无论如何, – mdedetrich