解决在JBoss 下不能找到 Action 问题

来源:互联网 发布:毕加索知乎 编辑:程序博客网 时间:2024/05/21 10:56


import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List;
import java.util.Set; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts2.convention.PackageBasedActionConfigBuilder; 
import com.opensymphony.xwork2.ObjectFactory; 
import com.opensymphony.xwork2.config.Configuration; 
import com.opensymphony.xwork2.inject.Container; 
import com.opensymphony.xwork2.inject.Inject; 
import com.opensymphony.xwork2.util.finder.ClassFinder; 
import com.opensymphony.xwork2.util.finder.Test; 
 
/**
 * 
 * 解决在JBoss 下不能找到 Action 问题
 * 
 */ 
 
public class MyActionConfigBuilder extends PackageBasedActionConfigBuilder { 
 
    private static Log log = LogFactory.getLog(MyActionConfigBuilder.class); 
    private static final String BASE_FILE = "applicationContext.xml";
     
    private String[] actionPackages;
    private String[] packageLocators;
   
    public static String classPath="";
 
    /**
     * 
     * @param configuration
     * @param container
     * @param objectFactory
     * @param redirectToSlash
     * @param defaultParentPackage
     */ 
 
    @Inject 
    public MyActionConfigBuilder( 
        Configuration configuration, 
        Container container, 
        ObjectFactory objectFactory, 
        @Inject("struts.convention.redirect.to.slash") 
        String redirectToSlash, 
        @Inject("struts.convention.default.parent.package") 
        String defaultParentPackage) { 
         
        super( configuration, container, objectFactory, redirectToSlash, defaultParentPackage ); 
 
    } 
 
    /**
     * 
     * @param actionPackages
     *            (Optional) An optional list of action packages that this
     *            should create
     * 
     * configuration for.
     * 
     */ 
    @Inject(value = "struts.convention.action.packages", required = false) 
    public void setActionPackages(String actionPackages) { 
        super.setActionPackages(actionPackages); 
         
        if ( !"".equals( actionPackages.trim() ) ) { 
            this.actionPackages = actionPackages.split( "\\s*[,]\\s*" ); 
        } 
    } 
 
    /**
     * 
     * @param packageLocators
     *            (Optional) A list of names used to find action packages.
     * 
     */ 
 
    @Inject(value = "struts.convention.package.locators", required = false) 
    public void setPackageLocators(String packageLocators) { 
        super.setPackageLocators(packageLocators); 
        this.packageLocators = packageLocators.split("\\s*[,]\\s*"); 
    } 
 
    @Override 
    @SuppressWarnings("unchecked") 
    protected Set<Class> findActions() { 
     
        Set<Class> classes = new HashSet<Class>(); 
 
        try { 
//          ClassFinder finder = new ClassFinder(getClassLoaderForFinder(), buildUrls(), true);  
            ClassFinder finder = new ClassFinder( getClassLoaderInterface(), buildUrls(), true); 
 
            if (actionPackages != null) { 
 
                for (String packageName : actionPackages) { 
                    Test<ClassFinder.ClassInfo> test = getPackageFinderTest(packageName); 
                    classes.addAll(finder.findClasses(test)); 
                } 
            } 
 
            // package locators  
            if (packageLocators != null) { 
                 
                for (String packageLocator : packageLocators) { 
                    Test<ClassFinder.ClassInfo> test = getPackageLocatorTest(packageLocator); 
                    classes.addAll(finder.findClasses(test)); 
                } 
            } 
 
        } catch (Exception ex) { 
            if (log.isErrorEnabled()) { 
                log.error("Unable to scan named packages", ex); 
            } 
        } 
 
        return classes; 
    } 
 
    private List<URL> buildUrls() throws MalformedURLException { 
 
        List<URL> urls = new ArrayList<URL>(); 
        URL classesUrl = getClassLoader().getResource( BASE_FILE ); 
 
        if (classesUrl == null) { 
            throw new IllegalStateException( 
                    "File " + BASE_FILE + " was not found. The folder WEB-INF/classes discovery base on file classes/" + BASE_FILE + "."); 
        } 
 
        String baseFilePath = classesUrl.getFile(); 
        URL url = new URL( "file", "", baseFilePath.substring( 0, baseFilePath.indexOf( BASE_FILE ) ) ); 
 
        if (log.isInfoEnabled()) { 
         classPath=url.getFile();
            log.info("Struts2 ActionConfigBuilder, classes directory: " + classPath);
        } 
 
        urls.add(url); 
 
        return urls; 
 
    } 
 
    /*private ClassLoader getClassLoader() {
 
        return Thread.currentThread().getContextClassLoader();
 
    }*/ 
 
}

 

原创粉丝点击