I am doing following
List<Campaign> campaigns = queryResultCampaign.getElements();
List<Campaign> campaigns = campaigns.stream().filter(campaign -> campaign.getCurrentStatus() !="deleted")
.map(campaign -> (Campaign) campaign).collect(Collectors.toList());
and get error
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.banoent.eloquaapi.client.campaign.model.Campaign
I have almost tried everything over the weekend and no solution worked for me.
If I remove this streaming part from the code then everything works fine, I wanted to filter objects with certain status but then it started to give this error
@GetMapping(path = "/campaign/retrieve/list")
public String retrieveCampaigns(@QueryParam(value = "offset") Integer offset,
@QueryParam(value = "count") Integer count,
@QueryParam(value = "page") Integer page,
Model model,
RedirectAttributes redirectAttributes,
HttpServletRequest request) {
String site = (String) request.getSession().getAttribute(EloquaApiConstants.SITE);
String oauthError = (String) request.getSession().getAttribute(EloquaApiConstants.OAUTH_ERROR);
model.addAttribute(EloquaApiConstants.SITE, site);
model.addAttribute(EloquaApiConstants.OAUTH_ERROR, oauthError);
offset = offset == null ? 0 : offset;
count = count == null ? recordsPerPage.get(0) : count;
page = page == null ? 1 : page;
CookieDefinition cookieDefinitionLoginDetails = CookieDefinition.builder()
.cookies(request.getCookies())
.cookiePrefix(CookiePrefix.SOURCE)
.build();
LoginDetails loginDetails = oauthService.createLoginDetails(cookieDefinitionLoginDetails);
try {
loginDetails = oauthService.verifyToken(loginDetails);
} catch (LoginException e) {
model.addAttribute(EloquaApiConstants.OAUTH_TOKEN_VERIFICATION_ERROR, true);
redirectAttributes.addFlashAttribute(EloquaApiConstants.OAUTH_ERROR, false);
redirectAttributes.addFlashAttribute(EloquaApiConstants.OAUTH_TOKEN_VERIFICATION_ERROR, true);
return "redirect:/login/oauth/login-with-eloqua";
}
EloquaTaskQueryParameterDefinition countQueryParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.COUNT)
.eloquaTaskQueryParameterValue(count)
.build();
EloquaTaskQueryParameterDefinition depthParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.DEPTH)
.eloquaTaskQueryParameterValue("minimal")
.build();
EloquaTaskQueryParameterDefinition lastUpdatedParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.LAST_UPDATED_AT)
.eloquaTaskQueryParameterValue(0L)
.build();
EloquaTaskQueryParameterDefinition pageQueryParameterDefinition = EloquaTaskQueryParameterDefinition.builder()
.eloquaTaskQueryParameter(EloquaTaskQueryParameter.PAGE)
.eloquaTaskQueryParameterValue(page)
.build();
EloquaTaskDefinition taskDefinition = EloquaTaskDefinition.builder()
.service(EloquaService.CAMPAIGN)
.serviceType(QueryResult.class)
.task(EloquaTask.RETRIEVE_MULTIPLE)
.queryParametersDefinitions(Arrays.asList(countQueryParameterDefinition,
depthParameterDefinition,
lastUpdatedParameterDefinition,
pageQueryParameterDefinition))
.credentials(loginDetails)
.build();
QueryResult<Campaign> queryResultCampaign = (QueryResult<Campaign>) taskService.executeTask(taskDefinition);
List<Campaign> campaigns = queryResultCampaign.getElements();
List<Campaign> collect = campaigns.stream().filter(campaign -> campaign.getCurrentStatus() !="deleted")
.map(campaign -> (Campaign) campaign).collect(Collectors.toList());
PaginationModel pager = PaginationViewHelper.getPaginationModel(queryResultCampaign.getTotal(),
offset,
count,
page,
recordsPerPage);
model.addAttribute("paginationModel", pager);
model.addAttribute("campaigns", campaigns);
return CAMPAIGNS_RETRIEVE_CAMPAIGN;
}
Any help will be appreciated. --Maria
let's get rid of Stream
-s then:
List<Campaign> filteredCompaigns = new ArrayList<>();
for (Campaign campaign: campaigns) {
if (!campaign.getCurrentStatus().equals("deleted")) {
filteredCompaigns.add(campaign);
}
}
/// use filteredCompaigns from here
ok, I fixed as follow, First from executeTask() returned json string initially I was returning Body.
String jsonString = (String)taskService.executeTask(taskDefinition);
ObjectMapper objectMapper = new ObjectMapper();
QueryResult<Campaign> queryResultCampaign = objectMapper.readValue(jsonString, new TypeReference<QueryResult<Campaign>>() {});
List<Campaign> campaigns = queryResultCampaign.getElements();
campaigns = campaigns.stream().filter(campaign -> extracted(campaign)).collect(Collectors.toList());
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.