Java 使用Grizzly作为web服务引擎
我正在尝试创建一个Grizzly web服务引擎,但缺少一些元素 以下是我想做的:Java 使用Grizzly作为web服务引擎,java,web-services,rest,servlets,grizzly,Java,Web Services,Rest,Servlets,Grizzly,我正在尝试创建一个Grizzly web服务引擎,但缺少一些元素 以下是我想做的: 创建一个Grizzly服务器作为一个可执行的jar(这样就可以了) 此服务器必须能够查找web服务存档的文件夹(包含在jar、war或其他文件中) 服务器应公开此web服务 我已经知道的: web服务可以构建为servlet(Grizzly似乎能够运行servlet,但我没有找到任何关于如何加载包含在“.war”或其他文件中的外部serlvet的信息) 我试图使用类加载器加载导出到“.jar”中的JAX-R
- 创建一个Grizzly服务器作为一个可执行的jar(这样就可以了)
- 此服务器必须能够查找web服务存档的文件夹(包含在jar、war或其他文件中)
- 服务器应公开此web服务
- web服务可以构建为servlet(Grizzly似乎能够运行servlet,但我没有找到任何关于如何加载包含在“.war”或其他文件中的外部serlvet的信息)
- 我试图使用类加载器加载导出到“.jar”中的JAX-RS2 Web服务,但@path绑定不起作用(我可能错过了一些东西)
- web服务归档应该使用哪种类型的归档
- 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();
}
当我尝试访问localhost:8080/../myresource时,什么也没有发生
我尝试了所有可能的URL并设置了一个断点。。。从未达到。不确定您使用的是哪种运动衫版本。 在《泽西岛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);
可能还有更优雅的方式…您使用的是Grizzly 1.x还是2.x分支
我在Grizzly 1.x中开发了Grizzly部署器。您应该检查源代码是否符合您的需要谢谢Alexey。我不知道resourceConfig的setClassLoader()和files()方法。我看了Jersey文档,没有指定使用files()需要类加载器。我尝试只使用files(),但出现以下错误:识别了类名为com.MyWS.MyResource的类文件,但找不到该类。有趣。我将更深入地介绍这个files()方法。找到一些文档不是很容易。即使是泽西岛的文档在这方面也不是很丰富。稍后我会再发一篇帖子,到时候我会知道更多。顺便说一下,是的,我正在使用最新版本的Jersey:2.5
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);