1

该应用程序使用 Jboss 并且有一个包含 war 文件和 jar 文件的 ear 文件。战争占据了我们所有的网页。我注释的动作类在耳朵里的 jar 文件中。从我的谷歌搜索中,我已经使用以下常量设置了我的 struts.xml 文件:

<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 + url。然后它通过以下代码:

if (excludeParentClassLoader) {

这个条件块删除了我所有的 url,因为我猜它们都来自 jboss,并且我将excludeParentClassLoader设置为 true。然后它会点击以下代码:

urlSet = urlSet.includeClassesUrl(classLoaderInterface);

在此之后,我的 urlset 中有一个 url:

file:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/http-invoker.sar/invoker.war=file:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/ http-invoker.sar/invoker.war

现在它终于到达了包含 jar 正则表达式的部分

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

for (URL url : rawIncludedUrls) {

因为 urlset 中有 1 个 url 而我的 jar 不在那里,所以它找不到它们。在运行正则表达式比较代码之前,如何让我的 url 显示在该 url 集中,我一定还缺少其他东西,我只是不知道那是什么

4

1 回答 1

0

不确定我认为您需要在 Jboss 的 struts.xml 文件中包含哪些内容

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

有关详细信息,请参阅插件页面ConventionPlugin-JBoss

默认情况下,Convention 插件不会扫描 jar 文件中的操作。对于要扫描的 jar,其 URL 需要与 struts.convention.action.includeJars 中的至少一个正则表达式匹配

您的 struts.xml 中已经包含包含 jar 的列表。Convention 插件将根据 jar 的 URL 而不是文件名评估正则表达式。

于 2012-09-28T05:03:02.257 回答