我嘗試創建一個Grizzly Web服務引擎,但缺少一些元素。使用Grizzly作爲Web服務引擎
這裏是我想要做什麼:
創建灰熊服務器作爲一個可執行的JAR(這是確定)
此服務器將必須能夠尋找到一個用於Web服務歸檔的文件夾(包含在jar或戰爭或其他文件中)
服務器應該公開此Web服務。
我已經知道:
Web服務可以建成爲servlet的(似乎灰熊能夠運行的servlet,但我沒有找到有關如何加載外部什麼serlvet包含在一個「.war」或其他)
我試着用ClassLoader加載一個JAX-RS2 web服務導出在「.jar」但@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();
這裏做的是web服務
@Path( 「myresource」) 公共類MyResource {
@GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { return "Got it!"; }
}當我嘗試到本地主機達到
什麼也沒有發生:8080 /....../ myresource。
我試過所有可能的網址,並放置一個斷點...永遠不會到達。
謝謝阿列克謝。 我不知道resourceConfig的setClassLoader()和files()方法。 我看了一下Jersey文檔,並沒有指定使用文件()需要classloader。 我試圖只使用文件(),我得到這些錯誤: 類名com.MyWS.MyResource的類文件被標識,但無法找到類。 有趣。 –
我將深入討論這個files()方法。 找到一些文檔並不是很容易。 即使澤西島的文件不是很豐富。 以後我會再發帖子的時候,我會知道更多。 –
順便說一句,是的,我正在使用澤西島的最後一個版本:2.5 –