0
我想通過使用下面的代碼來調用使用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);
不建設不是問題。我甚至在這個setParameter之後寫了一個sysout,並且做了一個getParameter,它導致打印我放入的存儲庫值。所以,代碼正在建立。 – Buddha
好的,你可以嘗試使用'ServletTestUtil.createDynamoRequest(params,buffer,method)' 如http://atgdust.sourceforge.net/servlet-test.html 可能你設置參數的方式不是正確的一個。 – boyintello
我的方式可能並不正確。我會閱讀這個頁面並給出一個鏡頭。但是,我發現了一個使用invokeDroplet的additionalParameters屬性傳遞參數的解決方法。 – Buddha