¿Cómo resolver NoSuchElement: null en Java Sap Hybris?
Creé una acción que modifica un valor en uno o más elementos (Pedido), orden en estado “esperando exportación manual” a “exportar”. Ahora, cuando selecciono los pedidos y hago clic en el botón de acción, nada cambia y en el registro tengo este error:
ERROR [hybrisHTTP33] [ManualOrderExportAction]
ERROR: java.util.NoSuchElementException: null
en java.util.Collections$EmptyIterator.next(Collections.java:4210) ~ [?:?]
en myExtension.backoffice.actions.ManualOrderExportListAction.perform (ManualOrderExportListAction.java:37) [?:?]
Código:
“`
@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" ); //línea 37 que genera un error.
Messagebox.show (POPUP_MESSAGE);
return new ActionResult <> (ActionResult.SUCCESS);
}
catch (final Exception ex)
{
LOG.error ("ERROR: ", ex);
return new ActionResult <> (ActionResult.ERROR);
}
}
“`
davy.ai
El mensaje de error indica que se está lanzando una
NoSuchElementException
en el métodoperform
de la claseManualOrderExportListAction
, específicamente en la línea 37 donde intenta obtener el código del proceso de pedido. El fragmento de código proporcionado muestra que la variablehashSet
se está convirtiendo en un conjunto de objetosOrderModel
y luego se está recuperando el primer proceso de pedido en el conjunto usando el métodoiterator
. Sin embargo, parece que el conjunto de pedidos o el conjunto de procesos de pedido está vacío o nulo, lo que causa laNoSuchElementException
.Para resolver este problema, se puede agregar una comprobación para asegurarse de que el conjunto de pedidos y el conjunto de procesos de pedido no estén vacíos antes de llamar al método
iterator()
. Por ejemplo:Este fragmento de código primero comprueba si el conjunto de pedidos y el conjunto de procesos de pedido no están vacíos usando el método
isEmpty()
, y solo activa el evento si contienen al menos un pedido y un proceso de pedido. Si alguno de los conjuntos está vacío, se registra un mensaje de advertencia y se devuelve unActionResult
de ERROR.