es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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);
}
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que se está lanzando una NoSuchElementException en el método perform de la clase ManualOrderExportListAction, 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 variable hashSet se está convirtiendo en un conjunto de objetos OrderModel y luego se está recuperando el primer proceso de pedido en el conjunto usando el método iterator. Sin embargo, parece que el conjunto de pedidos o el conjunto de procesos de pedido está vacío o nulo, lo que causa la NoSuchElementException.

    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:

    HashSet<ordermodel> hashSet = (HashSet<ordermodel>) actionContext.getData();
    try {
        if (!hashSet.isEmpty() && !hashSet.iterator().next().getOrderProcess().isEmpty()) {
            businessProcessService.triggerEvent(hashSet.iterator().next().getOrderProcess().iterator().next().getCode() + "_SaitManualExportEvent");
            Messagebox.show(POPUP_MESSAGE);
            return new ActionResult<>(ActionResult.SUCCESS);
        } else {
            LOG.warn("El conjunto de pedidos o el conjunto de procesos de pedido está vacío");
            return new ActionResult<>(ActionResult.ERROR);
        }
    } catch (final Exception ex) {
        LOG.error("ERROR: ", ex);
        return new ActionResult<>(ActionResult.ERROR);
    }
    

    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 un ActionResult de ERROR.

Comments are closed.