簡體   English   中英

使用Grizzly作為Web服務引擎

[英]Use Grizzly as a web service engine

我正在嘗試創建一個Grizzly Web服務引擎,但是缺少一些元素。

這是我想做的:

  • 創建一個Grizzly服務器作為可執行jar(可以)

  • 該服務器必須能夠查看Web服務檔案的文件夾(包含在jar或war或其他文件中)

  • 服務器應公開此Web服務。

我已經知道的:

  • 可以將Web服務構建為servlet(似乎Grizzly能夠運行servlet,但是我沒有找到有關如何加載“ .war”或其他文件中的外部Serlvet的任何信息)

  • 我嘗試使用ClassLoader加載在“ .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();
  • 這是網絡服務

    @Path(“ myresource”)公共類MyResource {

     @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { return "Got it!"; } 

    }

當我嘗試到達localhost:8080 /....../ myresource時,什么都沒有發生。

我嘗試了所有可能的網址,並設置了一個斷點……從未達到。

不確定您使用的是哪個Jersey版本。 在《澤西島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 Deployer。 您應該檢查源代碼是否滿足您的要求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM