Приложение использует Jboss и имеет файл ear, который содержит файл war и файл jar. Война захватила все наши веб-страницы. Классы действий, которые я аннотировал, находятся в файле jar, который находится в ухе. Из моего googleing я настроил свой файл 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 запускается нормально, но мое действие не загружается. Я загрузил исходный код для плагина соглашения, чтобы увидеть, что он использует для поиска классов действий, и, похоже, он просматривает военный файл только для классов действий при сканировании. Есть ли способ заставить его просматривать файл 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);
после этого я получаю один URL-адрес в моем наборе URL-адресов:
файл:/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) {
поскольку в наборе URL-адресов есть 1 URL-адрес, а моих банок нет, он их не находит. Должно быть что-то еще, что мне не хватает в том, как заставить мой URL-адрес отображаться в этом наборе URL-адресов до запуска кода сравнения регулярных выражений, я просто не знаю, что это такое