当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-07-20
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.LogFacto
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();

}*/

}
上一篇:BaseAction 类
下一篇:没有了
网友评论