Как использовать getCommandContext() в классе обработчика в WCS?

Я использую приведенный ниже код для выполнения команды из класса обработчика, который использует контекст команды.

CheckUserInMemberGroupCmd checkGrpCmd = (CheckUserInMemberGroupCmd) 
                            CommandFactory.createCommand(
                                    CheckUserInMemberGroupCmd.Name, 
                                    Integer.valueOf(storeId));
            checkGrpCmd.setUser(memberId);
            checkGrpCmd.setMemberGroupName(mbrName);
            checkGrpCmd.setCommandContext(getCommandContext());
            checkGrpCmd.execute();

Я явно вызываю метод getCommandContext() в том же классе обработчика, что приводит к нулевому значению, и поэтому генерируется исключение NullPointerException.

public CommandContext getCommandContext()
{
  String METHODNAME = "getCommandContext";
  if (this.viewCommandContext != null) {
    ECTrace.trace(0L, super.getClass().getName(), "getCommandContext", "use viewCommandContext");
    return this.viewCommandContext;
  }
  ECTrace.trace(0L, super.getClass().getName(), "getCommandContext", "use commandContext if any");
  return this.commandContext;
}

Теперь, что я могу сделать, чтобы сделать этот код исполняемым?


person Srithar    schedule 23.10.2015    source источник
comment
Рискну предположить, что в вашем классе обработчика контекст команды равен нулю. Контекст команды должен быть установлен в обработчике из команды, которая его использует. Если отсутствует вызов для его установки в любом месте стека вызовов, вам будет не хватать ссылки. Попробуйте отладить и просмотреть стек, пока не найдете команду, в которой он установлен.   -  person Michael Rasmussen    schedule 25.10.2015
comment
@MichaelRasmussen Я думаю, что это должен быть ответ, поскольку это, безусловно, причина, по которой класс обработчика не имеет установленного контекста.   -  person Sutty1000    schedule 26.10.2015


Ответы (2)


Рискну предположить, что в вашем классе обработчика контекст команды равен нулю. Контекст команды должен быть установлен в обработчике из команды, которая его использует. Если отсутствует вызов для его установки в любом месте стека вызовов, вам будет не хватать ссылки. Попробуйте отладить и просмотреть стек, пока не найдете команду, в которой он установлен.

person Michael Rasmussen    schedule 03.02.2016

    CommandContext commandContext = null;
    BusinessContextService bcs = null;
    Boolean localBinding = Boolean.valueOf(false);

    try {
        Object localBindingValue = request.getAttribute("com.ibm.commerce.foundation.inLocalBinding");
        localBinding = Boolean.valueOf(Boolean.TRUE.equals(localBindingValue));
        bcs = BusinessContextServiceFactory.getBusinessContextService();
        ActivityData activityData = getTempActivityData(businessContext);
        ActivityToken activityToken = getActivityToken(bcs, activityData,activityTokenCallbackHandler);
        bcs.startRequest(activityToken, activityData);
        commandContext = ContextHelper.createCommandContext(activityToken);
        logger.logp(Level.INFO, CLASSNAME, methodName, "Sap1 context" + commandContext.getCurrency());
        logger.logp(Level.INFO, CLASSNAME, methodName, "Sap2 context" + commandContext);
    }catch(Exception ex){
        logger.logp(Level.FINE, CLASSNAME, methodName, "command context is null");
    }finally {
        if ((!(localBinding.booleanValue())) && (bcs != null)) {
            bcs.flushCache();
        }
    }

Метод обработчика: getCommandContext(this.businessContext,this.activityTokenCallbackHandler,this.request)

person Sapna Jayavel    schedule 30.05.2018