2013-11-22 110 views
0

我正在嘗試使用Apache CXF從Exact Target SOAP API檢索3000條記錄。 它們每個響應返回2500條記錄。因此我得到「MoreDataAvailable」,但我無法獲得剩餘的數據。從SOAP API檢索數據

下面是代碼:

// Retrieve data 
RetrieveRequestMsg retrieveRequestMsg = new RetrieveRequestMsg(); 
retrieveRequestMsg.setRetrieveRequest(retrieveRequest); 
RetrieveResponseMsg retrieveResponseMsg = stub.retrieve(retrieveRequestMsg); 
//System.out.println("\n [Sends][overall status message] " + retrieveResponseMsg.getOverallStatus()); 
results = retrieveResponseMsg.getResults(); 

while (retrieveResponseMsg.getOverallStatus().equals("MoreDataAvailable")) 
{ 
    // FIXME: THis does not work for some reason :(
    retrieveResponseMsg = stub.retrieve(retrieveRequestMsg);   
    results.addAll(retrieveResponseMsg.getResults()); 
} 

它不工作 - 只是增加了更多的舊記錄...

任何幫助,不勝感激!

回答

0

原來我要做一個完全新的要求和setContinueRequest以前的響應消息的ID:

if (retrieveResponseMsg.getOverallStatus().equals(
     "MoreDataAvailable")) { 
    RetrieveRequest retrieveRequestCont = new RetrieveRequest(); 
    retrieveRequestCont.setContinueRequest(retrieveResponseMsg 
      .getRequestID()); 
    RetrieveRequestMsg retrieveRequestMsgCont = new RetrieveRequestMsg(); 
    retrieveRequestMsgCont.setRetrieveRequest(retrieveRequestCont) ; 

    RetrieveResponseMsg retrieveResponseMsgCont = stub 
      .retrieve(retrieveRequestMsgCont); 
    System.out.println("[overall status message] " 
      + retrieveResponseMsgCont.getOverallStatus()); 
    apiObjectArray = retrieveResponseMsgCont.getResults(); 
} else { 
    cont = false; 
} 

我在這裏找到: https://code.exacttarget.com/question/how-get-more-2500-records-using-java