001/* 002 Copyright 2010-2016 Boxfuse GmbH 003 <p/> 004 Licensed under the Apache License, Version 2.0 (the "License"); 005 you may not use this file except in compliance with the License. 006 You may obtain a copy of the License at 007 <p/> 008 http://www.apache.org/licenses/LICENSE-2.0 009 <p/> 010 Unless required by applicable law or agreed to in writing, software 011 distributed under the License is distributed on an "AS IS" BASIS, 012 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 See the License for the specific language governing permissions and 014 limitations under the License. 015 */ 016package io.avaje.classpath.scanner.internal.scanner.classpath.jboss; 017 018import io.avaje.classpath.scanner.core.ClassPathScanException; 019import io.avaje.classpath.scanner.internal.scanner.classpath.UrlResolver; 020 021import java.lang.reflect.Method; 022import java.net.URL; 023 024/** 025 * Resolves JBoss VFS v2 URLs into standard Java URLs. 026 */ 027public class JBossVFSv2UrlResolver implements UrlResolver { 028 public URL toStandardJavaUrl(URL url) { 029 try { 030 Class<?> vfsClass = Class.forName("org.jboss.virtual.VFS"); 031 Class<?> vfsUtilsClass = Class.forName("org.jboss.virtual.VFSUtils"); 032 Class<?> virtualFileClass = Class.forName("org.jboss.virtual.VirtualFile"); 033 034 Method getRootMethod = vfsClass.getMethod("getRoot", URL.class); 035 Method getRealURLMethod = vfsUtilsClass.getMethod("getRealURL", virtualFileClass); 036 037 Object root = getRootMethod.invoke(null, url); 038 return (URL) getRealURLMethod.invoke(null, root); 039 } catch (Exception e) { 040 throw new ClassPathScanException("JBoss VFS v2 call failed", e); 041 } 042 } 043}