2014-01-25 148 views
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); 

回答

0

你正確地構建你的塵土代碼?該錯誤僅表明輸入參數repository未在請求中發送。

有沒有一點,當下面的行不在你的代碼。如果您添加了它,可能您的更改尚未建立。你能清理你的項目,然後再試一次。除此之外,我沒有看到你的代碼有任何問題。另外,如果您使用的是Eclipse,可能您的Build Automatically在「項目」菜單下未被選中。

wrappedRequest.setParameter("repository", "/atg/userprofiling/ProfileAdapterRepository"); 
+0

不建設不是問題。我甚至在這個setParameter之後寫了一個sysout,並且做了一個getParameter,它導致打印我放入的存儲庫值。所以,代碼正在建立。 – Buddha

+0

好的,你可以嘗試使用'ServletTestUtil.createDynamoRequest(params,buffer,method)' 如http://atgdust.sourceforge.net/servlet-test.html 可能你設置參數的方式不是正確的一個。 – boyintello

+0

我的方式可能並不正確。我會閱讀這個頁面並給出一個鏡頭。但是,我發現了一個使用invokeDroplet的additionalParameters屬性傳遞參數的解決方法。 – Buddha