我正在尝试创建一个Grizzly Web服务引擎,但缺少一些元素。
以下是我想要做的事情:
将Grizzly服务器创建为可执行jar(这没关系)
此服务器必须能够查找Web服务存档的文件夹(包含在jar或战争或其他内容中)
服务器应公开此Web服务。
我已经知道的事情:
Web服务可以构建为servlet(似乎Grizzly能够运行servlet但我没有找到任何关于如何加载“.war”或其他内容中包含的外部serlvet的内容)
我尝试使用ClassLoader加载以“.jar”导出的JAX-RS2 web服务,但@path绑定不起作用(我可能错过了一些东西)
我想知道的事情:
我应该将哪种类型的存档用于网络服务档案?
Web服务应该是servlet吗?在这些情况下,如何使用Grizzly动态加载servlet?
我的方向是错误的吗?
以下是我使用类加载器
所做的工作File file = new File("c:\\Users\\User\\Desktop\\myresource.jar");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
URLClassLoader child = new URLClassLoader (urls, this.getClass().getClassLoader());
Class<?> classToLoad = Class.forName ("Test.ExternalWS.MyResource", true, child);
Method method = classToLoad.getDeclaredMethod ("getIt");
Object instance = classToLoad.newInstance ();
Object result = method.invoke (instance);
this.WSInstance = classToLoad.newInstance();
这是网络服务
@Path( “myresource”) 公共类MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
}
当我尝试访问localhost时没有任何反应:8080 /....../ myresource。
我尝试了所有可能的网址并设置了一个断点......从未到达过。
答案 0 :(得分:1)
不确定您使用的是哪个泽西岛版本。 在泽西岛2,我以这种方式工作:
File file = new File("/path/resource1.jar");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls, Main.class.getClassLoader());
ResourceConfig rc = new ResourceConfig()
.setClassLoader(cl)
.files("/path/resource1.jar");
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
BASE_URI, rc);
可能有更优雅的方式...
答案 1 :(得分:0)
您使用的是Grizzly 1.x或2.x分支吗?
我在Grizzly 1.x开发Grizzly Deployer。您应该检查源代码是否符合您的需要