如何解决 Java Sap Hybris 中的 NoSuchElement: null?
How to resolve NoSuchElement: null in Java Sap Hybris?
我创建了一个将值修改为一个或多个项目(订单)的操作,状态为“等待手动导出”的订单变为“导出”,现在当我选择订单并单击操作按钮时,没有任何变化并且进入日志我有这个错误:
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);
}
}
下面几行:
...
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);
}
}
...
我创建了一个将值修改为一个或多个项目(订单)的操作,状态为“等待手动导出”的订单变为“导出”,现在当我选择订单并单击操作按钮时,没有任何变化并且进入日志我有这个错误:
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);
}
}
下面几行:
...
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);
}
}
...