请求DropletInvoker.invokeDroplet无法识别的参数

时间:2014-01-25 17:24:26

标签: java atg atg-dust atg-droplet

我试图通过使用下面的代码来使用DUST的DropletInvoker来调用RQLQueryForEach droplet。

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:必需参数'存储库'未传递给Droplet。”任何人都可以指出我正确的方向,我做错了什么?

这是完整的堆栈跟踪......

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 个答案:

答案 0 :(得分:0)

您是否正确构建了防尘密码?该错误仅表明请求中未发送输入参数repository

当您的代码中没有以下行时,是否有一点。如果您已添加它,可能还没有构建您的更改。你可以清理你的项目,然后再试一次。除此之外,我认为您的代码没有任何问题。此外,如果您使用的是eclipse,则可能未选中“项目”菜单下的自动构建

wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository");
相关问题