如果两者都在同一个存储库中,如何在 java 控制器中的 webscript 中调用另一个 webscript
how to call another webscript inside webscript in java controller if both are in same repository
如何在 java 控制器中的一个网络脚本中调用另一个网络脚本,如果两者都在同一个存储库中。
//hellowebscript
public void execute(WebScriptRequest request, WebScriptResponse response)
{
//need to call another webscript
}
听起来您正在尝试调用同一层上的网络脚本,而该网络脚本没有 Java 控制器。如果它确实有一个 Java 控制器,您只想从 Java class.
调用该逻辑
我同意评论者的观点,最好的办法是将该逻辑移植到 Java class 并调用它。
但是,如果您不能或不想这样做,请获取一个 HTTP 客户端 (here's one) 并调用 URL,就像调用任何其他 URL 一样一个 Java class。根据您调用的网络脚本,您可能必须获取用户的当前票证(请参阅 AuthenticationUtils.getTicket())并使用 alf_ticket 参数将其传递给网络脚本。
我的解决方案:
两个 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>
祝你好运!
如何在 java 控制器中的一个网络脚本中调用另一个网络脚本,如果两者都在同一个存储库中。
//hellowebscript
public void execute(WebScriptRequest request, WebScriptResponse response)
{
//need to call another webscript
}
听起来您正在尝试调用同一层上的网络脚本,而该网络脚本没有 Java 控制器。如果它确实有一个 Java 控制器,您只想从 Java class.
调用该逻辑我同意评论者的观点,最好的办法是将该逻辑移植到 Java class 并调用它。
但是,如果您不能或不想这样做,请获取一个 HTTP 客户端 (here's one) 并调用 URL,就像调用任何其他 URL 一样一个 Java class。根据您调用的网络脚本,您可能必须获取用户的当前票证(请参阅 AuthenticationUtils.getTicket())并使用 alf_ticket 参数将其传递给网络脚本。
我的解决方案:
两个 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>
祝你好运!