2014-05-20 136 views
0

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

+0

,才應使用startSiteRefresh和你得到405 HTTP錯誤代碼或響應Yodlee公司的錯誤代碼?如果你在Yodlee的迴應中,那麼你能否請你檢查你是否在調用stopSiteRefresh,那麼請不要使用它,因爲它會導致405(用戶中止刷新)。 –

+0

錯誤代碼是不是在Yodlee公司的反應發生,其一般的HTTP錯誤Yodlee公司拋出(經由軸的SOAP API,它級聯),請編輯更多信息 這是發起刷新的代碼所示準確,在完成各種'addSite'調用之後,它也會相對不久完成,但根據文檔,它應該工作,無論如何, – mdedetrich

回答

0

能否請您檢查您是否使用正確的服務名稱?

雖然我對你的幫助,提供一些Java代碼,這可能會有幫助。

RefreshServiceLocator locator = new RefreshServiceLocator(); 
String serviceName = locator.getRefreshServiceWSDDServiceName(); 
serviceName = serviceName + getSDKVersion(); //SDKversion which you are using 
locator.setRefreshServiceEndpointAddress(System.getProperty("com.yodlee.soap.services.url") 
+ "/" + serviceName1); 
refresh = locator.getRefreshService(); 

除了這個你能不能也請檢查您的所有配置是正確的? Here是另一個可以幫助的線程(與Yodlee無關,但通常爲405)。

+0

對原始文章進行了編輯,獲取定位符的代碼與其他代碼相同定位器,所以除非有什麼特定的'RefreshServiceLocator'我不認爲這是原因,將嘗試搞砸它,雖然 – mdedetrich

+0

我認爲你錯過了將SDKVersion附加到你的serviceName的末尾,這是強制性的。請檢查那部分。 –

+0

追加的SDK版本沒有什麼區別,仍然得到同樣的錯誤 – mdedetrich