2013-11-19 5 views
0

Я обновил свое веб-приложение от JBOSS 5 до JBOSS 7. В моем веб-приложении для получения баннеров, содержащих определенные файлы, я использую следующие строки кода.Возврат vfs insted файла

 

static final Pattern _URLJarNamePattern = Pattern.compile(".*[/\\\\](.+)\\.(jar|zip)\\!/.*");; 
try { 
       urls = Thread.currentThread().getContextClassLoader().getResources("META-INF/config.properties"); 
      } catch (IOException e) { 
       throw new AWGenericException(e); 
      } 
      while (urls.hasMoreElements()) { 
       URL url = urls.nextElement(); 
       Matcher m = _URLJarNamePattern.matcher(url.toExternalForm()); 
       if (m.matches()) { 
        String jarName = m.group(1); 
        System.out.println(jarName); 
        _AWJarUrlsByName.put(jarName, url); 
       } 
      } 
 

В моем старом случае (JBOSS 5 для сервера) url строка выглядит следующим образом:

 

jar:file:/D:/JBOSS5/3.2.0/server/default/deploy/appl.war/WEB-INF/lib/app.myapp.jar!/META-INF/config.properties 
 

Вот когда я запускаю приведенный выше код в JBOSS 5 она успешно работает в соответствии с шаблоном, который я войти и он выводит имя файла JAR (здесь app.myapp)

Но в случае JBOSS 7, url строка выглядит следующим образом, что приводит неправильный вывод в соответствии с выше рисунком

 

vfs:/E:/Servers/jbossas7/standalone/deployments/appl.war/WEB-INF/lib/app.myapp.jar/META-INF/config.properties, 
 

Мой вопрос: почему он дает два выхода для того же кода? Можно ли исправить это без какого-либо изменения кода?

ответ

0

JBoss AS 7 использует VFS. См https://community.jboss.org/thread/170388#715560 о том, как получить доступ к VFS «абсолютного URL»

while (urls.hasMoreElements()) { 
    URL vfsUrl = urls.nextElement(); 
    URLConnection conn = vfsUrl.openConnection(); 
    VirtualFile vf = (VirtualFile)conn.getContent(); 
    //not sure if 'url' points to a vfs 'content' dir 
    //which parent dir has the actual file you are interested 
    //yet, it is file:// not vfs:// path in url, now 
    URL url = VFSUtils.getPhysicalURL(vf); 
    Matcher m = _URLJarNamePattern.matcher(url.toExternalForm()); 
    if (m.matches()) { 
     String jarName = m.group(1); 
     System.out.println(jarName); 
     _AWJarUrlsByName.put(jarName, url); 
    } 
} 

Если вы пытаетесь получить URL-баночки классов из appl.war следующего не представляется возможные в JBoss AS 7, который, однако, возможно, по крайней мере, в Tomcat 7:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URLClassLoader cl = (URLClassLoader) classLoader;//classcast exception in JBoss AS 7 
URL[] urls = cl.getURLs(); 

Для JBoss AS 7 баночек путь к классам ниже фрагмент кода создает URL массив вашего пути к классам appl.war

http://pastebin.com/YjNwdePr

+0

фотографии этого https://github.com /matmsh/tapestry-spring-security-sample/blob/master/src/main/java/nu/localhost/tapestry5/springsecuritytest/services/JBoss7ClasspathURLConverterImpl.java –

Смежные вопросы