/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.config.providers;
import java.io.IOException;
import java.io.InputStream;
import java.io.File;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
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 com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
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.ActionConfig;
import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
import com.opensymphony.xwork2.config.entities.InterceptorConfig;
import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
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.ClassLoaderUtil;
import com.opensymphony.xwork2.util.ClassPathFinder;
import com.opensymphony.xwork2.util.DomHelper;
import com.opensymphony.xwork2.util.FileManager;
import com.opensymphony.xwork2.util.TextUtils;
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;
/**
* 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: 1756 $
*/
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.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() {
}
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;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
struts2 的类库 xwork 源码 (282个子文件)
XmlConfigurationProvider.java 46KB
XWorkConverter.java 35KB
LocalizedTextUtil.java 32KB
AnnotationValidationConfigurationBuilder.java 31KB
PackageConfig.java 21KB
XWorkBasicConverter.java 20KB
DefaultConfiguration.java 19KB
PropertiesReader.java 19KB
ContainerImpl.java 18KB
ResolverUtil.java 17KB
Validator.java 17KB
ReferenceMap.java 17KB
DefaultActionInvocation.java 17KB
OgnlUtil.java 16KB
OgnlValueStack.java 16KB
ContainerBuilder.java 16KB
WildcardHelper.java 16KB
UtilTimerStack.java 15KB
ParametersInterceptor.java 14KB
DefaultActionValidatorManager.java 14KB
DefaultObjectTypeDeterminer.java 14KB
AnnotationActionValidatorManager.java 14KB
LocationAttributes.java 14KB
DefaultTypeConverter.java 13KB
DomHelper.java 13KB
TextProviderSupport.java 12KB
LocationUtils.java 12KB
ExceptionMappingInterceptor.java 11KB
ActionConfig.java 11KB
ActionContext.java 11KB
ValidatorFactory.java 10KB
CompoundRootAccessor.java 10KB
ActionChainResult.java 10KB
ConfigurationManager.java 10KB
ObjectFactory.java 10KB
ValidationInterceptor.java 10KB
XWorkCollectionPropertyAccessor.java 9KB
DelegatingValidatorContext.java 9KB
SpringObjectFactory.java 9KB
TextParseUtil.java 9KB
AbstractMatcher.java 8KB
TimerInterceptor.java 8KB
ParameterFilterInterceptor.java 8KB
VisitorFieldValidator.java 7KB
DefaultValidatorFileParser.java 7KB
ActionSupport.java 7KB
ClassLoaderUtil.java 7KB
XWorkList.java 7KB
AnnotationUtils.java 7KB
Validations.java 7KB
TextUtils.java 7KB
TextProvider.java 7KB
AnnotationWorkflowInterceptor.java 7KB
LocationImpl.java 7KB
ActionConfigMatcher.java 7KB
XWorkListPropertyAccessor.java 6KB
XWorkConfigurationProvider.java 6KB
RepopulateConversionErrorFieldValidatorSupport.java 6KB
DefaultActionProxy.java 6KB
PrefixMethodInvocationUtil.java 6KB
I18nInterceptor.java 6KB
Scope.java 6KB
ObjectProfiler.java 6KB
XWorkMapPropertyAccessor.java 6KB
ReferenceCache.java 6KB
ConditionalVisitorFieldValidator.java 6KB
InterceptorBuilder.java 6KB
ActionInvocation.java 6KB
VisitorFieldValidator.java 6KB
ChainingInterceptor.java 6KB
DefaultWorkflowInterceptor.java 5KB
ReflectionProvider.java 5KB
PrepareInterceptor.java 5KB
MethodFilterInterceptorUtil.java 5KB
ActionProxyFactory.java 5KB
DoubleRangeFieldValidator.java 5KB
ConversionDescription.java 5KB
ReflectionContextState.java 5KB
Interceptor.java 5KB
DefaultValidatorFactory.java 5KB
InstantiatingNullHandler.java 5KB
TypeConversion.java 5KB
DoubleRangeFieldValidator.java 5KB
Validation.java 5KB
ActionAutowiringInterceptor.java 5KB
ScopedModelDrivenInterceptor.java 5KB
OgnlValueStackFactory.java 5KB
ExceptionMappingConfig.java 5KB
ConversionErrorInterceptor.java 5KB
ValidatorSupport.java 5KB
XWorkMethodAccessor.java 5KB
ValueStack.java 5KB
ClassPathFinder.java 5KB
ParameterRemoverInterceptor.java 5KB
AnnotationXWorkConverter.java 5KB
AliasInterceptor.java 5KB
RegexFieldValidator.java 4KB
NamedVariablePatternMatcher.java 4KB
StringLengthFieldValidator.java 4KB
ValidationAwareSupport.java 4KB
共 282 条
- 1
- 2
- 3
资源评论
- zjilvufe2013-01-17下来可用,不错。
- shine12002013-01-17可用的源码,不错。
雪峰
- 粉丝: 63
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功