Java 使用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 web服务引擎,但缺少一些元素

以下是我想做的:

  • 创建一个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);