/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.config.providers;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.config.ConfigurationUtil;
import com.opensymphony.xwork2.config.entities.*;
import com.opensymphony.xwork2.config.entities.UnknownHandlerConfig;
import com.opensymphony.xwork2.config.impl.LocatableFactory;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.inject.Scope;
import com.opensymphony.xwork2.util.*;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import com.opensymphony.xwork2.util.location.Location;
import com.opensymphony.xwork2.util.location.LocationUtils;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
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.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Modifier;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
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: 1893 $
*/
public class XmlConfigurationProvider implements ConfigurationProvider {
private static final Logger LOG = LoggerFactory.getLogger(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;
private boolean throwExceptionOnDuplicateBeans = true;
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.1//EN", "xwork-2.1.dtd");
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 setThrowExceptionOnDuplicateBeans(boolean val) {
this.throwExceptionOnDuplicateBeans = val;
}
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() {
}
@Override
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;
}
@Override
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 ("bean".equals(nodeName)) {
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));
if (throwExceptionOnDuplicateBeans
没有合适的资源?快使用搜索试试~ 我知道了~
xwork-2.1.2-sources
共655个文件
java:494个
xml:90个
properties:35个
需积分: 0 3 下载量 9 浏览量
2009-10-07
19:10:30
上传
评论
收藏 658KB RAR 举报
温馨提示
Struts2 2.1.6 xwork源码 xwork-2.1.2-sources
资源推荐
资源详情
资源评论
收起资源包目录
xwork-2.1.2-sources (655个子文件)
xwork-2.1.dtd 3KB
xwork-2.0.dtd 2KB
xwork-1.1.2.dtd 2KB
xwork-1.1.1.dtd 2KB
xwork-1.1.dtd 2KB
xwork-1.0.dtd 2KB
xwork-validator-1.0.3.dtd 829B
xwork-validator-1.0.2.dtd 784B
xwork-validator-1.0.dtd 703B
xwork-validator-definition-1.0.dtd 446B
xwork-validator-config-1.0.dtd 409B
xwork-1.0.dtd 19B
package.html 555B
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 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
XmlConfigurationProvider.java 46KB
ResourceFinder.java 40KB
XWorkConverterTest.java 37KB
XWorkConverter.java 35KB
LocalizedTextUtil.java 33KB
AnnotationValidationConfigurationBuilder.java 31KB
ClassFinder.java 30KB
OgnlValueStackTest.java 27KB
XWorkBasicConverter.java 22KB
OgnlUtilTest.java 22KB
ParametersInterceptorTest.java 20KB
PackageConfig.java 20KB
AnnotationXWorkConverterTest.java 20KB
ContainerImpl.java 20KB
Validator.java 19KB
DefaultConfiguration.java 19KB
PropertiesReader.java 19KB
ResolverUtil.java 17KB
DefaultActionInvocation.java 17KB
ParametersInterceptor.java 17KB
OgnlValueStack.java 17KB
ReferenceMap.java 17KB
DefaultWorkflowInterceptorTest.java 16KB
OgnlUtil.java 16KB
ContainerBuilder.java 16KB
AnnotationActionValidatorManager.java 15KB
DefaultActionValidatorManager.java 15KB
WildcardHelper.java 15KB
UtilTimerStack.java 15KB
SpringObjectFactoryTest.java 15KB
AnnotationActionValidatorManagerTest.java 15KB
DefaultActionValidatorManagerTest.java 14KB
DefaultObjectTypeDeterminer.java 14KB
LocationAttributes.java 13KB
InterceptorBuilderTest.java 13KB
DefaultTypeConverter.java 13KB
DomHelper.java 13KB
ActionSupportTest.java 12KB
TextProviderSupport.java 12KB
ConfigurationTest.java 12KB
LocationUtils.java 12KB
SetPropertiesTest.java 12KB
ExceptionMappingInterceptorTest.java 11KB
LocalizedTextUtilTest.java 11KB
ActionConfig.java 11KB
ExceptionMappingInterceptor.java 11KB
XmlConfigurationProviderInterceptorsTest.java 11KB
ValidatorFactory.java 10KB
ObjectFactory.java 10KB
DefaultValidatorFileParserTest.java 10KB
ActionContext.java 10KB
DefaultValidatorFileParser.java 10KB
TextParseUtil.java 10KB
ActionValidatorManagerTest.java 10KB
SpringObjectFactory.java 10KB
ConfigurationManager.java 10KB
ActionChainResult.java 10KB
ValidationInterceptor.java 9KB
PrefixMethodInvocationUtilTest.java 9KB
DelegatingValidatorContext.java 9KB
CompoundRootAccessor.java 9KB
XmlHelperTest.java 9KB
XWorkCollectionPropertyAccessor.java 9KB
CompositeTextProvider.java 9KB
MockConfigurationProvider.java 9KB
InterceptorBuilder.java 9KB
XmlConfigurationProviderActionsTest.java 9KB
共 655 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
login8226
- 粉丝: 27
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 筷手引流工具.apk
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功