2014-05-20 91 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