【问题标题】:How to resolve NoSuchElement: null in Java Sap Hybris?如何解决 Java Sap Hybris 中的 NoSuchElement: null?
【发布时间】:2021-12-31 22:10:10
【问题描述】:

我创建了一个将值修改为一个或多个项目(订单)的操作,将状态“等待手动导出”的订单变为“导出”,现在当我选择订单并单击操作按钮时,没有任何变化并进入记录我有这个错误:

ERROR [hybrisHTTP33] [ManualOrderExportAction] 
ERROR: java.util.NoSuchElementException: null
at java.util.Collections$EmptyIterator.next(Collections.java:4210) ~[?:?]
at myExtension.backoffice.actions.ManualOrderExportListAction.perform(ManualOrderExportListAction.java:37) [?:?]

代码:

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

@Override
public ActionResult<Object> perform(ActionContext<Object> actionContext){
    HashSet<OrderModel> hashSet = (HashSet<OrderModel>) actionContext.getData();
    try
    {
        businessProcessService.triggerEvent(hashSet.iterator().next().getOrderProcess().iterator().next().getCode() + "_" + "SaitManualExportEvent" ); //line 37 that generate error.
        Messagebox.show(POPUP_MESSAGE);
        return new ActionResult<>(ActionResult.SUCCESS);
    }
        catch (final Exception ex)
    {
        LOG.error("ERROR: ", ex);
        return new ActionResult<>(ActionResult.ERROR);
    }

}

【问题讨论】:

  • 您的hashSet.iterator() 中没有元素
  • 或者hashSet.iterator().next().getOrderProcess().iterator()没有元素。
  • 我激活 debug 并且 hashSet 具有我选择到 Backoffice 应用程序中的元素。
  • @kiner_shah 我该如何解决?
  • 那么在这种情况下,请执行while(iterator.hasNext()){ iterator.next());,这样您在调用.next()之前首先验证您有一个“nextElement”

标签: java spring iterator hybris


【解决方案1】:

以下几行:

...
businessProcessService.triggerEvent(hashSet.iterator().next().getOrderProcess().iterator().next().getCode() + "_" + "SaitManualExportEvent" ); //line 37 that generate error.
Messagebox.show(POPUP_MESSAGE);
return new ActionResult<>(ActionResult.SUCCESS);
...

应该改为:

...
if (hashSet.iterator().hasNext())
{
    // NOTE: Don't know the data type returned by getOrderProcess(), so
    //       assumed a dummy data type OrderProcess 
    OrderProcess o = hashSet.iterator().next().getOrderProcess();
    if (o.iterator().hasNext())
    {
        businessProcessService.triggerEvent(o.iterator().next().getCode() + "_" + "SaitManualExportEvent" );
        Messagebox.show(POPUP_MESSAGE);
        return new ActionResult<>(ActionResult.SUCCESS);
    }
}
...

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2017-03-31
    • 2019-05-13
    • 1970-01-01
    • 2021-08-18
    • 2020-06-01
    相关资源
    最近更新 更多