You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java Sap Hybris中出现的NoSuchElement: null报错问题

错误根因

java.util.NoSuchElementException 是调用空集合的迭代器next()方法导致,你第37行的链式调用存在2处未校验的空集合风险,同时代码本身未适配多选订单的业务需求:

  • 未校验选中的订单集合hashSet是否为空,若用户未选中任何订单直接点击按钮,第一个hashSet.iterator().next()直接抛出异常
  • 未校验单个订单关联的流程集合getOrderProcess()是否为空,若选中的订单没有绑定对应的业务流程实例,第二个iterator().next()会抛出异常
  • 现有逻辑仅会处理选中的第一个订单,即使选了多个订单也不会批量触发状态修改,不符合需求要求

修复方案

  1. 新增非空校验,分别校验选中订单集合、单个订单的流程集合是否为空
  2. 新增循环逻辑,批量处理所有选中的符合条件的订单
  3. 异常处理细化,避免单个订单处理失败导致整批操作终止

注意:如果你的业务场景中一个订单可能关联多个业务流程,不要直接调用iterator().next()取第一个流程,需要增加逻辑筛选出你需要触发事件的对应流程实例。

修正后代码参考

@Resource(name = "businessProcessService")
private BusinessProcessService businessProcessService;

@Override
public ActionResult<Object> perform(ActionContext<Object> actionContext){
    HashSet<OrderModel> hashSet = (HashSet<OrderModel>) actionContext.getData();
    // 校验选中订单集合非空
    if (hashSet == null || hashSet.isEmpty()) {
        Messagebox.show("请先选择需要导出的订单");
        return new ActionResult<>(ActionResult.ERROR);
    }
    int successCount = 0;
    try {
        for (OrderModel order : hashSet) {
            // 校验订单关联流程非空
            if (order.getOrderProcess() == null || order.getOrderProcess().isEmpty()) {
                LOG.warn("订单{}未关联业务流程,跳过导出处理", order.getCode());
                continue;
            }
            // 触发流程事件
            String eventCode = order.getOrderProcess().iterator().next().getCode() + "_SaitManualExportEvent";
            businessProcessService.triggerEvent(eventCode);
            successCount++;
        }
        Messagebox.show(String.format("导出操作执行完成,成功处理%s个订单", successCount));
        return new ActionResult<>(ActionResult.SUCCESS);
    } catch (final Exception ex) {
        LOG.error("手动导出订单操作失败: ", ex);
        Messagebox.show("操作失败,请联系管理员查看后台日志");
        return new ActionResult<>(ActionResult.ERROR);
    }
}

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:24:00