在编译时更改GWT Servlet映射

时间:2016-12-14 17:20:10

标签: java servlets gwt annotations

我正在努力更新使用GWT RPC进行服务器通信的旧项目。原始项目在构建脚本中使用ant任务将占位符替换为项目的版本号。我假设这个想法是允许在一个地方更新版本号,而不是在任何地方手动查找/替换它。我遇到的问题是,如果我想使用@RemoteServiceRelativePath将我的服务链接到客户端,那么该过程将不起作用。我可以使用构建脚本修改web.xml,但我不知道如何更新我的代码中的注释以匹配。我知道可以在运行时使用'setServiceEntryPoint'修改ServiceDef,但我想尽可能避免这种混乱。

例如,如果我的web.xml看起来像:

<servlet>
    <servlet-name>authBackendImpl</servlet-name>
    <servlet-class>com.myproj.server.servlet.MyAuthBackendImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>authBackendImpl</servlet-name>
    <url-pattern>/mymodule/@version/authBackend</url-pattern>
</servlet-mapping>

我可以在ant build中使用replace任务来将@version与实际数字交换。问题出在我的服务界面中:

@RemoteServiceRelativePath(value = "@version/authBackend")
public interface MyAuthBackend extends RemoteService {

}

是否有某种方法可以为注释值定义变量?还是有其他解决方案,我只是没有看到?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

只有一种方式,我想,它可以完成,每次都设置终点,你将连接到服务。 当然,您可以通过将代码包装到某个工厂类来自己美化代码,但是以简单的方式它应该如下所示:

AuthBackendImpl authService = GWT.create(AuthBackend.class);
((ServiceDefTarget) authService).setServiceEntryPoint(String.format("/yourprojectname-SNAPSHOT/mymodule/%s/authBackend",version));