2012-09-27 29 views
1

該應用程序使用Jboss並且包含一個包含war文件和jar文件的ear文件。我們所有的網頁都是戰爭。我註釋過的動作類在耳朵裏的jar文件中。從我的googleing我已經安裝我的struts.xml文件與以下常量:在jboss中使用帶有struts 2的註釋未找到動作

<constant name="struts.convention.action.fileProtocols" value="ear,jar,vfsfile,vfszip" /> 
<constant name="struts.convention.action.disableJarScanning" value="false"/> 
<constant name="struts.convention.action.includeJars" value=".*/lightspeed.*?jar(!/)?,.*/lightspeed*?jar(!/)?,.*lightspeed.*?jar(!/)?,.*lightspeed*?jar(!/)?" /> 

Jboss容器啓動正常,但我的行動沒有加載。我已經下載了約定插件的源代碼,以查看它用於查找操作類的用途,並且它似乎只在掃描時才查看操作類的war文件。有沒有辦法讓它查看包含操作類的jar文件,當它掃描註釋的操作類時?

文件結構:
-application.ear
    | --application.war
    | --aplication_logic_actions.jar < ---這包含了註釋

操作類

我已經調試過約定插件的代碼,這裏是我看到我的問題的地方。在PackageBasedActionConfigBuilder類和buildUrlSet()方法有這行代碼:

UrlSet urlSet = new UrlSet(classLoaderInterface, this.fileProtocols); 

這個代碼,我得到約200 +網址之後。然後,它通過這一代碼進入:

if (excludeParentClassLoader) { 

這condiftion塊刪除我的所有URL,因爲它們都是從JBoss的我想,我有excludeParentClassLoader設置爲true。然後射驗證碼後,這個

urlSet = urlSet.includeClassesUrl(classLoaderInterface); 

我得到一個鏈接在我的網址設定:

文件:/ C:/演變/主幹/機動/ JBoss的/服務器/ DMS /部署/ HTTP -invoker.sar/invoker.war =文件:/ C:/evolution/trunk/powersports/jboss/server/dms/deploy/http-invoker.sar/invoker.war

現在,它終於得到的部分有罐子,包括正則表達式

List<URL> rawIncludedUrls = urlSet.getUrls(); 
Set<URL> includeUrls = new HashSet<URL>(); 
boolean[] patternUsed = new boolean[includeJars.length]; 

for (URL url : rawIncludedUrls) { 

由於urlset中有1個url,我的罐子不在那裏,所以它沒有找到它們。必須有其他東西我缺少如何讓我的網址顯示在正則表達式比較代碼運行之前,我只是不知道這是什麼

回答

0

不知道我相信你需要什麼在你的struts.xml文件中有如下對於JBoss

<constant name="struts.convention.exclude.parentClassLoader" value="true" /> 

參考插件頁面查看詳細ConventionPlugin-JBoss

默認情況下,Convention插件不會掃描jar文件的動作。對於要掃描的jar,其URL需要與struts.convention.action中的至少一個正則表達式匹配。includeJars

您已經在struts.xml中包含了包含jar的列表.Convention插件將根據jar的URL來評估正則表達式,而不是文件名。

+0

我試過這樣想,它會得到我的jar網址,但當它看着jar包的正則表達式時,它並沒有在它的url列表中查看網址。我在上面的問題中使用了約定插件代碼的擴展解釋。 –