我試圖刷新所有網站的某個用戶帳戶(有時當用戶輸入特定類型的賬戶,他們沒有得到完全刷新,所以我們琬做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