Я использовал следующий код для создания корзины и добавления одной cartEntry внутри этой модели CartModel:
final CartModel cartModel = cartFactory.createCart() ;
OrderEntryModel orderEntryModel = new OrderEntryModel();
List<AbstractOrderEntryModel> entryModel = new ArrayList<>();
final ProductModel product = productService.getProductForCode(productCode); // came from another method
orderEntryModel.setProduct(product);
entryModel.add(orderEntryModel);
cartModel.setEntries(entryModel);
cartModel.setUser(userService.getCurrentUser());
cartService.setSessionCart(cartModel);
Когда я пытаюсь получить эту корзину из сессии, примените эту корзину и передайте эту корзину следующей OOTB метод, я получаю следующее исключение:
DefultAbstractOrderEntryPreparer@1090ef7e]: unexpected preparer error: null] with root cause
java.lang.NullPointerException
at de.hybris.platform.order.interceptors.DefaultAbstractOrderEntryPreparer.onPrepare(DefaultAbstractOrderEntryPreparer.java:97)
После отладки я узнал, что эта проблема возникает, потому что я добавляю записи заказа иначе, чем мы использовали в обычном потоке оформления заказа (первый код блок, третья последняя строка).
Итак, есть ли какой-либо OOTB-метод или любой другой способ создать orderEntry и добавить его во вновь созданную корзину?
Я проверил нормальную корзину, созданную во время проверки, и эта проблема не возникает. Итак, я пришел к выводу, что это происходит из-за следующего кода из первого блока кода:
OrderEntryModel orderEntryModel = new OrderEntryModel();
List<AbstractOrderEntryModel> entryModel = new ArrayList<>();
final ProductModel product = productService.getProductForCode(productCode); // came from another method
orderEntryModel.setProduct(product);
entryModel.add(orderEntryModel);
cartModel.setEntries(entryModel);