Получение исключения NullPointerException при извлечении свойства из репозитория в ATG

Я пытаюсь получить свойства, такие как имя и фамилия, из репозитория профилей, отображая их в jsp с помощью дроплета. Ниже приведен пример кода: SampleDroplet.java

public class SampleDroplet extends DynamoServlet {

private Repository mProfileRepository;
@Override
public void service(DynamoHttpServletRequest pReq, DynamoHttpServletResponse pRes)
        throws ServletException, IOException {

    String lFirstName = null;
    String lLastName = null;
    String lProfileId = pReq.getParameter("profileId");     
    try {
        RepositoryItem lItem = getProfileRepository().getItem(lProfileId, "user");
        lFirstName = (String) lItem.getPropertyValue("firstName");
        lLastName = (String) lItem.getPropertyValue("lastName");
    } catch (RepositoryException e) {
        e.printStackTrace();
    }
    pReq.setParameter("firstName", lFirstName);
    pReq.setParameter("lastName", lLastName);
    pReq.serviceParameter("output", pReq, pRes);
}

SampleDroplet.properties

$class=com.tap.droplet.SampleDroplet
scope=global
profileRepository=/atg/userProfiling/ProfileAdaptarRepository

SampleDroplet.jsp

<dsp:page>
<dsp:importbean bean="/atg/userprofiling/Profile" var="profile" />
<dsp:importbean bean="/com/tap/droplet/SampleDroplet" />
<dsp:getvalueof var="profileId" bean="Profile.id"/>
    <dsp:droplet name="SampleDroplet">
        <dsp:param name="profileId" value="${profileId}" />
        <dsp:oparam name="output">
            Profile's First Name : <dsp:valueof param="firstName"/>
                      Last Name : <dsp:valueof param="lastName"/>
        </dsp:oparam>
    </dsp:droplet>
</dsp:page>

Я пробовал отображать profileId в jsp, он работает. Но когда я передал его в дроплет, он показывает NullPointerException

java.lang.NullPointerException
at com.tap.droplet.SampleDroplet.service(SampleDroplet.java:26)
at atg.servlet.DynamoServlet.service(DynamoServlet.java:152)
at atg.taglib.dspjsp.DropletTag.invokeServlet(DropletTag.java:420)
at atg.taglib.dspjsp.DropletTag.doAfterBody(DropletTag.java:705)
at     jsp_servlet._test._droplet.__sampledroplet._jsp__tag18(__sampledroplet.java:874)
Truncated. see log file for complete stacktrace

Если кто-нибудь знает, в чем проблема, пожалуйста, помогите мне.

заранее спасибо


person Ramya jois    schedule 22.07.2016    source источник
comment
Проблема в строке 26, и, поскольку у нас есть только фрагмент кода, я не могу сказать вам, где он находится выше. Полагаю, что lProfileId равен нулю...   -  person bated    schedule 22.07.2016
comment
да, в дроплете profileId становится нулевым. Я попытался отобразить profileId в jsp без дроплета, он работает, но значение не передается в дроплет   -  person Ramya jois    schedule 23.07.2016
comment
Можете ли вы подтвердить, является ли профиль временным? Это можно получить с помощью Profile.isTransient в JSP.   -  person bated    schedule 25.07.2016
comment
1. Ваша капля не должна иметь глобальную область видимости (scope=global). По моему опыту, дроплеты обычно ограничены страницей, что является областью действия по умолчанию, если вы не указали свойство $scope. Это избавляет от необходимости беспокоиться о многопоточных проблемах. 2. На самом деле вашим свойством scope должно быть $scope, хотя я не думаю, что проблема в этом. 3. Существует тип; ProfileAdaptarRepository должен быть ProfileAdapterRepository 4. Вы можете упростить ‹dsp:param name=profileId value=${profileId} /› до ‹dsp:param name=profileId bean=Profile.id /›   -  person Matt Sidesinger    schedule 25.07.2016
comment
Капли @MattSidesinger, как правило, должны иметь глобальную область действия, а обработчики форм должны быть ограничены областью запроса (иногда областью действия сеанса).   -  person radimpe    schedule 26.07.2016
comment
@Ramyajois У вас есть методы доступа для вашего mProfileRepository, и, как указал @MattSidesinger, вы неправильно набрали ProfileAdaptarRepository.   -  person radimpe    schedule 26.07.2016
comment
@MattSidesinger да, я сделал орфографическую ошибку. Это должен быть ProfileAdapterRepository. Теперь он работает нормально. Спасибо   -  person Ramya jois    schedule 27.07.2016


Ответы (1)


похоже проблема здесь:

profileRepository=/atg/userProfiling/ProfileAdaptarRepository

Nucleus не может найти этот компонент:

  1. «профилирование пользователя» должно быть в нижнем регистре.
  2. ProfileAdaptarRepository -> ProfileAdapterRepository
person Artsiom Barysevich    schedule 23.08.2016