【问题标题】:Request parameters not recognised by DropletInvoker.invokeDropletDropletInvoker.invokeDroplet 无法识别请求参数
【发布时间】:2014-01-25 17:24:25
【问题描述】:

我正在尝试使用以下代码从使用 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: required parameter 'repository' not pass to 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); 

【问题讨论】:

    标签: java atg atg-dust atg-droplet


    【解决方案1】:

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

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

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

    【讨论】:

    • 不,建筑不是问题。我什至在这个 setParameter 之后写了一个 sysout 并做了一个 getParameter ,这导致打印我输入的存储库值。所以,代码正在构建。
    • 好的,您可以尝试使用ServletTestUtil.createDynamoRequest(params,buffer,method) 解释atgdust.sourceforge.net/servlet-test.html 可能您设置参数的方式不正确。
    • 我的方法可能不对。我将阅读该页面并试一试。但是,我找到了一种使用 invokeDroplet 的附加参数属性传递参数的解决方法。
    猜你喜欢
    • 2013-02-19
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多