/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.config.providers;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
import com.opensymphony.xwork2.util.FileManager;
import com.opensymphony.xwork2.util.TextUtils;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.*;
import com.opensymphony.xwork2.config.impl.LocatableFactory;
import com.opensymphony.xwork2.config.entities.*;
import com.opensymphony.xwork2.inject.*;
import com.opensymphony.xwork2.util.DomHelper;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import com.opensymphony.xwork2.util.location.Location;
import com.opensymphony.xwork2.util.location.LocationUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.util.*;
/**
* Looks in the classpath for an XML file, "xwork.xml" by default,
* and uses it for the XWork configuration.
*
* @author tmjee
* @author Rainer Hermanns
* @author Neo
* @version $Revision: 1483 $
*/
public class XmlConfigurationProvider implements ConfigurationProvider {
private static final Log LOG = LogFactory.getLog(XmlConfigurationProvider.class);
private List<Document> documents;
private Set<String> includedFileNames;
private String configFileName;
private ObjectFactory objectFactory;
private Set<String> loadedFileUrls = new HashSet<String>();
private boolean errorIfMissing;
private Map<String, String> dtdMappings;
private Configuration configuration;
public XmlConfigurationProvider() {
this("xwork.xml", true);
}
public XmlConfigurationProvider(String filename) {
this(filename, true);
}
public XmlConfigurationProvider(String filename, boolean errorIfMissing) {
this.configFileName = filename;
this.errorIfMissing = errorIfMissing;
Map<String, String> mappings = new HashMap<String, String>();
mappings.put("-//OpenSymphony Group//XWork 2.0//EN", "xwork-2.0.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.1.1//EN", "xwork-1.1.1.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.1//EN", "xwork-1.1.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.0//EN", "xwork-1.0.dtd");
setDtdMappings(mappings);
}
public void setDtdMappings(Map<String, String> mappings) {
this.dtdMappings = Collections.unmodifiableMap(mappings);
}
@Inject
public void setObjectFactory(ObjectFactory objectFactory) {
this.objectFactory = objectFactory;
}
/**
* Returns an unmodifiable map of DTD mappings
*/
public Map<String, String> getDtdMappings() {
return dtdMappings;
}
public void init(Configuration configuration) {
this.configuration = configuration;
this.includedFileNames = configuration.getLoadedFileNames();
loadDocuments(configFileName);
}
public void destroy() {
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof XmlConfigurationProvider)) {
return false;
}
final XmlConfigurationProvider xmlConfigurationProvider = (XmlConfigurationProvider) o;
if ((configFileName != null) ? (!configFileName.equals(xmlConfigurationProvider.configFileName)) : (xmlConfigurationProvider.configFileName != null)) {
return false;
}
return true;
}
public int hashCode() {
return ((configFileName != null) ? configFileName.hashCode() : 0);
}
private void loadDocuments(String configFileName) {
try {
loadedFileUrls.clear();
documents = loadConfigurationFiles(configFileName, null);
} catch (ConfigurationException e) {
throw e;
} catch (Exception e) {
throw new ConfigurationException("Error loading configuration file " + configFileName, e);
}
}
public void register(ContainerBuilder containerBuilder, LocatableProperties props) throws ConfigurationException {
LOG.info("Parsing configuration file [" + configFileName + "]");
Map<String, Node> loadedBeans = new HashMap<String, Node>();
for (Document doc : documents) {
Element rootElement = doc.getDocumentElement();
NodeList children = rootElement.getChildNodes();
int childSize = children.getLength();
for (int i = 0; i < childSize; i++) {
Node childNode = children.item(i);
if (childNode instanceof Element) {
Element child = (Element) childNode;
final String nodeName = child.getNodeName();
if (nodeName.equals("bean")) {
String type = child.getAttribute("type");
String name = child.getAttribute("name");
String impl = child.getAttribute("class");
String onlyStatic = child.getAttribute("static");
String scopeStr = child.getAttribute("scope");
boolean optional = "true".equals(child.getAttribute("optional"));
Scope scope = Scope.SINGLETON;
if ("default".equals(scopeStr)) {
scope = Scope.DEFAULT;
} else if ("request".equals(scopeStr)) {
scope = Scope.REQUEST;
} else if ("session".equals(scopeStr)) {
scope = Scope.SESSION;
} else if ("singleton".equals(scopeStr)) {
scope = Scope.SINGLETON;
} else if ("thread".equals(scopeStr)) {
scope = Scope.THREAD;
}
if (!TextUtils.stringSet(name)) {
name = Container.DEFAULT_NAME;
}
try {
Class cimpl = ClassLoaderUtil.loadClass(impl, getClass());
Class ctype = cimpl;
if (TextUtils.stringSet(type)) {
ctype = ClassLoaderUtil.loadClass(type, getClass());
}
if ("true".equals(onlyStatic)) {
// Force loading of class to detect no class def found exceptions
cimpl.getDeclaredClasses();
containerBuilder.injectStatics(cimpl);
} else {
if (containerBuilder.contains(ctype, name)) {
Location loc = LocationUtils.getLocation(loadedBeans.get(ctype.getName() + name));
throw new ConfigurationException("Bean type " + ctype + " with the name " +
name + " has already been loaded by " + loc, child);
}
// Force loading of class to detect no class def found exceptions
cimpl.getDeclaredConstructors();
if (LOG.isDebugEnabled()) {
LOG.debug("Loaded type:" + type + " name:" + name + " impl:" + impl);
}
containerBuilder.factory(ctype, name, new LocatableFac
没有合适的资源?快使用搜索试试~ 我知道了~
struts2中的xwork源码
共579个文件
java:416个
xml:80个
properties:33个
4星 · 超过85%的资源 需积分: 10 4 下载量 78 浏览量
2011-07-26
14:19:33
上传
评论
收藏 4.5MB ZIP 举报
温馨提示
xwork源码struts2中的xwork源码
资源推荐
资源详情
资源评论
收起资源包目录
struts2中的xwork源码 (579个子文件)
xwork-2.0.dtd 2KB
xwork-1.1.1.dtd 2KB
xwork-1.1.dtd 2KB
xwork-1.0.dtd 2KB
xwork-validator-1.0.2.dtd 784B
xwork-validator-1.0.dtd 703B
xwork-validator-config-1.0.dtd 409B
xwork-1.0.dtd 19B
overview.html 140B
package.html 87B
package.html 62B
package.html 51B
package.html 50B
package.html 48B
package.html 48B
package.html 46B
package.html 45B
package.html 43B
package.html 43B
package.html 42B
package.html 42B
package.html 42B
package.html 41B
package.html 40B
package.html 38B
package.html 36B
package.html 34B
package.html 33B
package.html 33B
testng-5.1-jdk15.jar 676KB
xwork-2.0.7.jar 449KB
spring-beans-2.0.5.jar 380KB
backport-util-concurrent-3.0.jar 320KB
spring-aop-2.0.5.jar 296KB
cglib-2.1_3.jar 276KB
retrotranslator-runtime-1.2.1.jar 245KB
spring-core-2.0.5.jar 176KB
ognl-2.6.11.jar 164KB
spring-context-2.0.5.jar 156KB
spring-web-2.0.5.jar 148KB
junit-3.8.1.jar 118KB
retrotranslator-transformer-1.2.1.jar 101KB
commons-logging-1.0.4.jar 37KB
asm-1.5.3.jar 26KB
aopalliance-1.0.jar 4KB
XmlConfigurationProvider.java 37KB
XWorkConverter.java 35KB
XWorkConverterTest.java 33KB
LocalizedTextUtil.java 30KB
AnnotationValidationConfigurationBuilder.java 29KB
OgnlValueStackTest.java 24KB
OgnlUtilTest.java 21KB
AnnotationXWorkConverterTest.java 20KB
PropertiesReader.java 19KB
XWorkBasicConverter.java 19KB
ContainerImpl.java 18KB
ValidatorFactory.java 17KB
ReferenceMap.java 17KB
PackageConfig.java 17KB
ContainerBuilder.java 16KB
DefaultActionInvocation.java 16KB
Validator.java 15KB
ParametersInterceptor.java 15KB
ResolverUtil.java 15KB
DefaultActionValidatorManagerTest.java 15KB
AnnotationActionValidatorManager.java 15KB
WildcardHelper.java 15KB
UtilTimerStack.java 15KB
DefaultConfiguration.java 15KB
DefaultActionValidatorManager.java 14KB
OgnlUtil.java 14KB
AnnotationActionValidatorManagerTest.java 14KB
LocationAttributes.java 13KB
ParametersInterceptorTest.java 13KB
DefaultObjectTypeDeterminer.java 13KB
OgnlValueStack.java 13KB
DomHelper.java 13KB
ActionSupportTest.java 12KB
SpringObjectFactoryTest.java 12KB
TextProviderSupport.java 12KB
LocationUtils.java 11KB
ExceptionMappingInterceptorTest.java 11KB
LocalizedTextUtilTest.java 11KB
ActionConfigMatcher.java 11KB
ExceptionMappingInterceptor.java 11KB
ObjectFactory.java 11KB
XmlConfigurationProviderInterceptorsTest.java 10KB
SetPropertiesTest.java 10KB
ActionChainResult.java 10KB
ActionContext.java 9KB
CompoundRootAccessor.java 9KB
PrefixMethodInvocationUtilTest.java 9KB
DelegatingValidatorContext.java 9KB
ValidatorFileParser.java 9KB
XWorkCollectionPropertyAccessor.java 8KB
DefaultWorkflowInterceptor.java 8KB
SpringObjectFactory.java 8KB
TextParseUtil.java 8KB
TimerInterceptor.java 8KB
SimpleActionValidationTest.java 8KB
共 579 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- fjy7248798632015-08-14就只不知道下载了这个怎么用,导入项目中还是不可以查看源码。
孙宇
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于JavaScript的访客预约系统设计源码
- 基于Vue和ECharts的工作租房数据可视化系统设计源码
- 1040g0cg310ravpiu6ibg5pg00tsipsln3ju2d0g 2
- 基于Python的SAR图像去噪CNN-NLM设计源码
- redhat6升级到redhat7,过程redhat6.x-> redhat6.10->rehat7.9 主版本最高版本
- 基于Django的流程引擎设计源码
- 基于Node.js的Express框架与MySQL的后台管理系统设计源码
- 基于Java的Flink流批一体数据处理快速集成开发框架设计源码
- FirstFilterOrderCompare
- Screenshot_2024-03-28-19-17-25-020_com.ss.android.lark.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功