DropletInvoker.invokeDroplet无法识别的请求参数
问题描述:
我想通过使用下面的代码来调用使用DUST的DropletInvoker的RQLQueryForEach小滴。DropletInvoker.invokeDroplet无法识别的请求参数
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);
答
你正确地构建你的尘土代码?该错误仅表明输入参数repository
未在请求中发送。
有没有一点,当下面的行不在你的代码。如果您添加了它,可能您的更改尚未建立。你能清理你的项目,然后再试一次。除此之外,我没有看到你的代码有任何问题。另外,如果您使用的是Eclipse,可能您的Build Automatically在“项目”菜单下未被选中。
wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository");
不建设不是问题。我甚至在这个setParameter之后写了一个sysout,并且做了一个getParameter,它导致打印我放入的存储库值。所以,代码正在建立。 – Buddha
好的,你可以尝试使用'ServletTestUtil.createDynamoRequest(params,buffer,method)' 如http://atgdust.sourceforge.net/servlet-test.html 可能你设置参数的方式不是正确的一个。 – boyintello
我的方式可能并不正确。我会阅读这个页面并给出一个镜头。但是,我发现了一个使用invokeDroplet的additionalParameters属性传递参数的解决方法。 – Buddha