【问题标题】:how to call another webscript inside webscript in java controller if both are in same repository如果两者都在同一个存储库中,如何在java控制器的webscript中调用另一个webscript
【发布时间】:2016-06-10 01:13:38
【问题描述】:

如果两者都在同一个存储库中,如何在 java 控制器的一个 webscript 中调用另一个 webscript。

//hellowebscript
 public void execute(WebScriptRequest request, WebScriptResponse response)
{

 //need to call another webscript
}

【问题讨论】:

  • 是否在同一层?或者您是否尝试从共享层调用 repo webscript?
  • 第二个网页脚本是做什么的?您应该将逻辑重构为一个服务类,然后两个 webscript 都可以使用该服务类。没有简单的方法可以从另一个存储库 webscript 调用存储库 webscript。
  • 如果它们在同一层,您总是可以为其他 webscript 获取 Java bean 并调用它,但重构是更推荐的方式!
  • 第二个 webscript 只有 get.desc.xml 文件和 ftl 文件。第二个 webscript 没有 Java 控制器和 JS 控制器。在这种情况下,如何从第一个 webscript 调用第二个 webscript。两者都在同一层。
  • 如果我的第二个脚本有点像在这个没有 java/js 控制器的 url 中定义的;babyalfresco.blogspot.in/2014/05/… 这是如何调用第一个 webscript java 控制器;

标签: alfresco alfresco-share alfresco-webscripts


【解决方案1】:

听起来您正试图在同一层调用 Web 脚本,而该 Web 脚本没有 Java 控制器。如果它确实有一个 Java 控制器,您可能只想从您的 Java 类中调用该逻辑。

我同意评论者的观点,即最好的做法是将逻辑移植到 Java 类并调用它。

但是,如果您不能或不想这样做,请获取 HTTP 客户端 (here's one) 并像调用 Java 类中的任何其他 URL 一样调用 URL。根据您调用的 Web 脚本,您可能需要获取用户当前的票证(参见 AuthenticationUtils.getTicket())并使用 alf_ticket 参数将其传递给 Web 脚本。

【讨论】:

    【解决方案2】:

    我的解决方案:

    两个 WebScript,一个调用作为重定向到第二个。

    文件:RedirectHelloWorldWebScript.java:

    public class RedirectHelloWorldWebScript extends AbstractWebScript {
    @Override
    public void execute(WebScriptRequest wsreq, WebScriptResponse wsres)
            throws IOException {
        HttpServletResponse httpResponse = WebScriptServletRuntime
                .getHttpServletResponse(wsres);
    
        httpResponse.sendRedirect("/alfresco/service/helloworld");
    }
    }
    

    文件:HelloWorldWebScript.java:

    public class HelloWorldWebScript extends AbstractWebScript {
    @Override
    public void execute(WebScriptRequest req, WebScriptResponse res)
            throws IOException {
        try {
            JSONObject obj = new JSONObject();
            obj.put("message", "Hello Word!");
            String jsonString = obj.toString();
            res.getWriter().write(jsonString);
        } 
    
        catch (JSONException e) {
            throw new WebScriptException("Unable to serialize JSON");
        }
    
        catch (org.json.JSONException e) {
            e.printStackTrace();
        }
    }
    }
    

    描述符:

    文件:redirecthelloworld.get.desc.xml:

    <webscript>
       <shortname>RedirectHelloWorld</shortname>
       <description>Redirect to Hello World</description>
       <url>/redirecthelloworld</url>
       <authentication>none</authentication>
       <family>Java-Backed WebScripts</family>
    </webscript>
    

    文件:helloworld.get.desc.xml:

    <webscript>
       <shortname>helloworld</shortname>
       <description>Hello World</description>
       <url>/helloworld</url>
       <url>/helloworld.json</url>
       <authentication>none</authentication>
       <family>Java-Backed WebScripts</family>
    </webscript>
    

    还有,Spring 的上下文:

    文件:webscript-context.xml:

    <bean id="webscript.helloworld.get"
      class="com.fegor.HelloWorldWebScript"
      parent="webscript">       
    </bean>
    
    <bean id="webscript.redirecthelloworld.get"
      class="com.fegor.RedirectHelloWorldWebScript"
      parent="webscript">       
    </bean>
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2015-11-11
      相关资源
      最近更新 更多