0

我正在尝试使用以下代码从使用 DUST 的 DropletInvoker 调用 RQLQueryForEach 液滴。

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:所需参数'repository'未传递给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); 
4

1 回答 1

0

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

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

wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository");
于 2014-01-27T08:00:00.817 回答