Параметры запроса не распознаются DropletInvoker.invokeDroplet

Я пытаюсь вызвать дроплет RQLQueryForEach от использования DUST DropletInvoker с помощью приведенного ниже кода.

HeadPipelineServlet dynamoHandler = (HeadPipelineServlet) Nucleus.getGlobalNucleus().resolveName("/atg/dynamo/servlet/dafpipeline/DynamoHandler");
DynamoHttpServletRequest request = dynamoHandler.getRequest(null); 

ByteBuffer buffer = ByteBuffer.allocate(1024);
TestingDynamoHttpServletRequest wrappedRequest = new TestingDynamoHttpServletRequest(request, buffer);
TestingDynamoHttpServletResponse wrappedResponce = new TestingDynamoHttpServletResponse(request.getResponse());

DynamoServlet droplet = (DynamoServlet) wrappedRequest.resolveName("/atg/dynamo/droplet/RQLQueryForEach");

wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository");
wrappedRequest.setParameter("itemDescriptor", "user");
wrappedRequest.setParameter("transactionManager", "/atg/dynamo/transaction/TransactionManager");
wrappedRequest.setParameter("queryRQL", "ALL");

DropletInvoker mDropletInvoker = new DropletInvoker(Nucleus.getGlobalNucleus());
DropletResult result = mDropletInvoker.invokeDroplet(droplet, null, wrappedRequest, wrappedResponce);

assertNotNull("Check that output got rendered",result.getRenderedOutputParameter("output"));

Метод invokeDroplet завершается ошибкой с исключением: "javax.servlet.ServletException: обязательный параметр" хранилище "не передан в дроплет". Может ли кто-нибудь указать мне правильное направление, что я делаю неправильно?

Вот полная трассировка стека...

javax.servlet.ServletException: required parameter 'repository' not passed to droplet
    at atg.repository.servlet.RQLQueryForEach.getRangeResults(RQLQueryForEach.java:254)
    at atg.repository.servlet.RQLQueryForEach.getResults(RQLQueryForEach.java:220)
    at atg.repository.servlet.RQLQueryForEach.service(RQLQueryForEach.java:179)
    at atg.servlet.DynamoServlet.service(DynamoServlet.java:152)

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

Обходной путь, который я нашел

HeadPipelineServlet dynamoHandler = (HeadPipelineServlet) Nucleus.getGlobalNucleus().resolveName("/atg/dynamo/servlet/dafpipeline/DynamoHandler");
Map<String,Object> additionalParams = new HashMap<>();
additionalParams.put("repository", "/atg/userprofiling/ProfileAdapterRepository");
additionalParams.put("itemDescriptor", "user");
additionalParams.put("queryRQL", "ALL");
DropletInvoker mDropletInvoker = new DropletInvoker(Nucleus.getGlobalNucleus());
DropletResult result = mDropletInvoker.invokeDroplet("/atg/dynamo/droplet/RQLQueryForEach",additionalParams); 

1 ответ

Вы правильно строите свой код пыли? Ошибка только предполагает, что входной параметр repository не отправлено в запросе.

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

wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository");
Другие вопросы по тегам