You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/05/15 13:05:51 UTC
svn commit: r1338643 [1/2] - in /struts/struts2/trunk:
core/src/main/java/org/apache/struts2/
core/src/main/java/org/apache/struts2/config/
core/src/main/java/org/apache/struts2/dispatcher/
core/src/main/java/org/apache/struts2/util/fs/ core/src/main/j...
Author: lukaszlenart
Date: Tue May 15 11:05:50 2012
New Revision: 1338643
URL: http://svn.apache.org/viewvc?rev=1338643&view=rev
Log:
WW-3817 introduces FileManagerFactory with default implementation and refactors all the code to use the new approach
Added:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManagerFactory.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactory.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/fs/
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactoryTest.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
struts/struts2/trunk/core/src/main/resources/struts-default.xml
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java
struts/struts2/trunk/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/FelixOsgiHost.java
struts/struts2/trunk/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/DefaultOValValidationManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ClassFinder.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JBossFileRevision.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/ConfigurationTestBase.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorParamOverridingTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorStackParamOverridingTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/DefaultFileManagerTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/URLUtilTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/UrlUtilTest2.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java Tue May 15 11:05:50 2012
@@ -65,7 +65,7 @@ public final class StrutsConstants {
public static final String STRUTS_OBJECTFACTORY = "struts.objectFactory";
/** The com.opensymphony.xwork2.util.FileManager implementation class */
- public static final String STRUTS_FILEMANAGER = "struts.fileManager";
+ public static final String STRUTS_FILE_MANAGER_FACTORY = "struts.fileManagerFactory";
/** The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class */
public static final String STRUTS_OBJECTTYPEDETERMINER = "struts.objectTypeDeterminer";
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java Tue May 15 11:05:50 2012
@@ -23,6 +23,7 @@ package org.apache.struts2.config;
import com.opensymphony.xwork2.ActionProxyFactory;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.UnknownHandlerManager;
@@ -191,10 +192,10 @@ import java.util.StringTokenizer;
* <td>Helper class used with URLRenderer to provide exact logic for building URLs</td>
* </tr>
* <tr>
- * <td>com.opensymphony.xwork2.FileManager</td>
- * <td>struts.fileManager</td>
+ * <td>com.opensymphony.xwork2.FileManagerFactory</td>
+ * <td>struts.fileManagerFactory</td>
* <td>singleton</td>
- * <td>Used to access files on the File System as also to monitor if reload is needed,
+ * <td>Used to create {@link FileManager} instance to access files on the File System as also to monitor if reload is needed,
* can be implemented / overwritten to meet specific an application server needs
* </td>
* </tr>
@@ -243,7 +244,7 @@ public class BeanSelectionProvider imple
public void register(ContainerBuilder builder, LocatableProperties props) {
alias(ObjectFactory.class, StrutsConstants.STRUTS_OBJECTFACTORY, builder, props);
- alias(FileManager.class, StrutsConstants.STRUTS_FILEMANAGER, builder, props);
+ alias(FileManagerFactory.class, StrutsConstants.STRUTS_FILE_MANAGER_FACTORY, builder, props);
alias(XWorkConverter.class, StrutsConstants.STRUTS_XWORKCONVERTER, builder, props);
alias(TextProvider.class, StrutsConstants.STRUTS_XWORKTEXTPROVIDER, builder, props, Scope.DEFAULT);
alias(ActionProxyFactory.class, StrutsConstants.STRUTS_ACTIONPROXYFACTORY, builder, props);
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Tue May 15 11:05:50 2012
@@ -25,6 +25,7 @@ import com.opensymphony.xwork2.ActionCon
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.ActionProxyFactory;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
@@ -397,7 +398,7 @@ public class Dispatcher {
}
private void init_CheckConfigurationReloading(Container container) {
- FileManager fileManager = container.getInstance(FileManager.class);
+ FileManager fileManager = container.getInstance(FileManagerFactory.class).getFileManager();
fileManager.setReloadingConfigs("true".equals(container.getInstance(String.class,
StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD)));
}
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java?rev=1338643&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java Tue May 15 11:05:50 2012
@@ -0,0 +1,10 @@
+package org.apache.struts2.util.fs;
+
+import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+
+/**
+ * TODO lukaszlenart: move implementation from DefaultFileManager
+ */
+public class JBossFileManager extends DefaultFileManager {
+
+}
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java Tue May 15 11:05:50 2012
@@ -22,6 +22,7 @@
package org.apache.struts2.views.freemarker;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
@@ -215,8 +216,8 @@ public class FreemarkerManager {
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
public boolean getNoCharsetInContentType() {
Modified: struts/struts2/trunk/core/src/main/resources/struts-default.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/struts-default.xml?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/struts-default.xml (original)
+++ struts/struts2/trunk/core/src/main/resources/struts-default.xml Tue May 15 11:05:50 2012
@@ -29,8 +29,8 @@
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
<bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />
- <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="xwork"/>
- <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" name="struts"/>
+ <bean type="com.opensymphony.xwork2.FileManagerFactory" class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="xwork"/>
+ <bean type="com.opensymphony.xwork2.FileManagerFactory" class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts"/>
<bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" class="com.opensymphony.xwork2.DefaultActionProxyFactory"/>
<bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.impl.StrutsActionProxyFactory"/>
Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java Tue May 15 11:05:50 2012
@@ -23,7 +23,7 @@ package org.apache.struts2.dispatcher;
import com.mockobjects.dynamic.C;
import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
@@ -32,8 +32,8 @@ import com.opensymphony.xwork2.config.en
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.StrutsTestCase;
import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDestroyableObjectFactory;
@@ -198,9 +198,9 @@ public class DispatcherTest extends Stru
mockContainer.expectAndReturn("getInstance", C.args(C.eq(ObjectFactory.class)), destroyedObjectFactory);
mockConfiguration.expectAndReturn("getContainer", mockContainer.proxy());
mockConfiguration.expectAndReturn("getContainer", mockContainer.proxy());
- FileManager fileManager = new DefaultFileManager();
- mockContainer.expectAndReturn("getInstance", C.args(C.eq(FileManager.class)), fileManager);
- mockContainer.expectAndReturn("getInstance", C.args(C.eq(FileManager.class)), fileManager);
+ FileManagerFactory fileManagerFactory = new DefaultFileManagerFactory(container);
+ mockContainer.expectAndReturn("getInstance", C.args(C.eq(FileManagerFactory.class)), fileManagerFactory);
+ mockContainer.expectAndReturn("getInstance", C.args(C.eq(FileManagerFactory.class)), fileManagerFactory);
mockConfiguration.expect("destroy");
mockConfiguration.matchAndReturn("getPackageConfigs", new HashMap<String, PackageConfig>());
@@ -228,7 +228,7 @@ public class DispatcherTest extends Stru
Mock mockContainer = new Mock(Container.class);
mockContainer.matchAndReturn("getInstance", C.args(C.eq(ObjectFactory.class)), new ObjectFactory());
- mockContainer.matchAndReturn("getInstance", C.args(C.eq(FileManager.class)), new DefaultFileManager());
+ mockContainer.matchAndReturn("getInstance", C.args(C.eq(FileManagerFactory.class)), new DefaultFileManagerFactory(container));
Mock mockConfiguration = new Mock(Configuration.class);
mockConfiguration.matchAndReturn("getPackageConfigs", packageConfigs);
Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java Tue May 15 11:05:50 2012
@@ -24,8 +24,8 @@ package org.apache.struts2.views.freemar
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.mock.MockActionInvocation;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import freemarker.template.Configuration;
import freemarker.template.TemplateExceptionHandler;
import org.apache.struts2.ServletActionContext;
@@ -266,7 +266,7 @@ public class FreeMarkerResultTest extend
super.setUp();
mgr = new FreemarkerManager();
mgr.setEncoding("UTF-8");
- mgr.setFileManager(new DefaultFileManager());
+ mgr.setFileManagerFactory(new DefaultFileManagerFactory(container));
stringWriter = new StringWriter();
writer = new PrintWriter(stringWriter);
response = new StrutsMockHttpServletResponse();
Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerManagerTest.java Tue May 15 11:05:50 2012
@@ -21,7 +21,7 @@
package org.apache.struts2.views.freemarker;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.StrutsTestCase;
import org.apache.struts2.views.jsp.StrutsMockServletContext;
@@ -34,7 +34,7 @@ public class FreemarkerManagerTest exten
public void testIfStrutsEncodingIsSetProperty() throws Exception {
FreemarkerManager mgr = new FreemarkerManager();
mgr.setEncoding("UTF-8");
- mgr.setFileManager(new DefaultFileManager());
+ mgr.setFileManagerFactory(new DefaultFileManagerFactory(container));
StrutsMockServletContext servletContext = new StrutsMockServletContext();
servletContext.setAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY, null);
freemarker.template.Configuration conf = mgr.getConfiguration(servletContext);
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java Tue May 15 11:05:50 2012
@@ -22,6 +22,7 @@ package org.apache.struts2.convention;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
@@ -296,8 +297,8 @@ public class PackageBasedActionConfigBui
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
protected void initReloadClassLoader() {
Modified: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java (original)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java Tue May 15 11:05:50 2012
@@ -22,6 +22,8 @@ package org.apache.struts2.convention;
import com.opensymphony.xwork2.ActionChainResult;
import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
@@ -37,6 +39,7 @@ import com.opensymphony.xwork2.config.im
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Scope.Strategy;
import com.opensymphony.xwork2.ognl.OgnlReflectionProvider;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
import junit.framework.TestCase;
import org.apache.struts2.convention.actions.DefaultResultPathAction;
@@ -109,6 +112,14 @@ import static org.easymock.EasyMock.veri
*/
public class PackageBasedActionConfigBuilderTest extends TestCase {
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ ActionContext context = new ActionContext(new HashMap<String, Object>());
+ context.setContainer(new DummyContainer());
+ ActionContext.setContext(context);
+ }
+
public void testActionPackages() throws MalformedURLException {
run("org.apache.struts2.convention.actions", null, null);
}
@@ -680,6 +691,11 @@ public class PackageBasedActionConfigBui
private ResultMapBuilder resultMapBuilder;
private InterceptorMapBuilder interceptorMapBuilder;
private ConventionsService conventionsService;
+ private DefaultFileManagerFactory fileManagerFactory;
+
+ public DummyContainer() {
+ fileManagerFactory = new DefaultFileManagerFactory(this);
+ }
public void setActionNameBuilder(ActionNameBuilder actionNameBuilder) {
this.actionNameBuilder = actionNameBuilder;
@@ -699,6 +715,9 @@ public class PackageBasedActionConfigBui
public <T> T getInstance(Class<T> type) {
try {
+ if (type == FileManagerFactory.class) {
+ return (T) fileManagerFactory;
+ }
T obj = type.newInstance();
if (obj instanceof ObjectFactory) {
((ObjectFactory)obj).setReflectionProvider(new OgnlReflectionProvider() {
@@ -736,10 +755,15 @@ public class PackageBasedActionConfigBui
return (T) actionNameBuilder;
else if (type == ConventionsService.class)
return (T) conventionsService;
+ else if (type == FileManagerFactory.class)
+ return (T) fileManagerFactory;
return null;
}
public Set<String> getInstanceNames(Class<?> type) {
+ if (type == FileManager.class) {
+ return Collections.emptySet();
+ }
return null;
}
Modified: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java (original)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java Tue May 15 11:05:50 2012
@@ -20,7 +20,8 @@
*/
package org.apache.struts2;
-import com.opensymphony.xwork2.util.URLUtil;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterface;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterfaceDelegate;
import com.opensymphony.xwork2.util.finder.UrlSet;
@@ -186,9 +187,10 @@ public class JSPLoader {
//find jars
List<URL> urls = urlSet.getUrls();
+ FileManager fileManager = ServletActionContext.getContext().getInstance(FileManagerFactory.class).getFileManager();
for (URL url : urls) {
- URL normalizedUrl = URLUtil.normalizeToFileProtocol(url);
- File file = FileUtils.toFile((URL) ObjectUtils.defaultIfNull(normalizedUrl, url));
+ URL normalizedUrl = fileManager.normalizeToFileProtocol(url);
+ File file = FileUtils.toFile(ObjectUtils.defaultIfNull(normalizedUrl, url));
if (file.exists())
classPath.add(file.getAbsolutePath());
}
Modified: struts/struts2/trunk/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java (original)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java Tue May 15 11:05:50 2012
@@ -21,11 +21,14 @@
package org.apache.struts2;
import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterface;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterfaceDelegate;
+import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import junit.framework.TestCase;
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.views.util.DefaultUrlHelper;
@@ -41,6 +44,7 @@ import javax.servlet.http.HttpSession;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
@@ -117,7 +121,7 @@ public class EmbeddedJSPResultTest exten
assertEquals("somethingelseText", response.getContentAsString());
}
- public void tesAbsolutePatht() throws Exception {
+ public void testAbsolutePath() throws Exception {
result.setLocation("/org/apache/struts2/simple0.jsp");
result.execute(null);
@@ -265,12 +269,19 @@ public class EmbeddedJSPResultTest exten
//mock converter
XWorkConverter converter = new DummyConverter();
+ DefaultFileManager fileManager = new DefaultFileManager();
+ fileManager.setReloadingConfigs(false);
+
//mock container
Container container = EasyMock.createNiceMock(Container.class);
EasyMock.expect(container.getInstance(XWorkConverter.class)).andReturn(converter).anyTimes();
+ EasyMock.expect(container.getInstanceNames(FileManager.class)).andReturn(new HashSet<String>()).anyTimes();
+ EasyMock.expect(container.getInstance(FileManager.class)).andReturn(fileManager).anyTimes();
UrlHelper urlHelper = new DefaultUrlHelper();
EasyMock.expect(container.getInstance(UrlHelper.class)).andReturn(urlHelper).anyTimes();
+ FileManagerFactory fileManagerFactory = new DummyFileManagerFactory();
+ EasyMock.expect(container.getInstance(FileManagerFactory.class)).andReturn(fileManagerFactory).anyTimes();
EasyMock.replay(container);
stackContext.put(ActionContext.CONTAINER, container);
@@ -278,6 +289,7 @@ public class EmbeddedJSPResultTest exten
actionContext.setValueStack(valueStack);
}
+
}
//converter has a protected default constructor...meh
@@ -285,6 +297,14 @@ class DummyConverter extends XWorkConver
}
+class DummyFileManagerFactory implements FileManagerFactory {
+
+ public FileManager getFileManager() {
+ return new DefaultFileManager();
+ }
+
+}
+
class DummyServletCache extends ServletCache {
public int size() {
return cache.size();
@@ -307,7 +327,7 @@ class ServletGetRunnable implements Runn
public void run() {
ActionContext.setContext(actionContext);
- //wait to start all therads at once..or try at least
+ //wait to start all threads at once..or try at least
try {
startBarrier.await();
object = servletCache.get("org/apache/struts2/simple0.jsp");
Modified: struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/FelixOsgiHost.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/FelixOsgiHost.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/FelixOsgiHost.java (original)
+++ struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/FelixOsgiHost.java Tue May 15 11:05:50 2012
@@ -21,27 +21,24 @@
package org.apache.struts2.osgi;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.util.URLUtil;
import com.opensymphony.xwork2.util.finder.ResourceFinder;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import com.opensymphony.xwork2.ActionContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.framework.Felix;
import org.apache.felix.framework.util.FelixConstants;
import org.apache.felix.main.AutoActivator;
import org.apache.felix.main.Main;
import org.apache.felix.shell.ShellService;
-import org.apache.struts2.StrutsStatics;
+import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsException;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
-import org.osgi.framework.Constants;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleListener;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Constants;
import org.osgi.util.tracker.ServiceTracker;
import javax.servlet.ServletContext;
@@ -337,7 +334,8 @@ public class FelixOsgiHost implements Os
protected String getVersion(URL url) {
if ("jar".equals(url.getProtocol())) {
try {
- JarFile jarFile = new JarFile(new File(URLUtil.normalizeToFileProtocol(url).toURI()));
+ FileManager fileManager = ServletActionContext.getContext().getInstance(FileManagerFactory.class).getFileManager();
+ JarFile jarFile = new JarFile(new File(fileManager.normalizeToFileProtocol(url).toURI()));
Manifest manifest = jarFile.getManifest();
if (manifest != null) {
String version = manifest.getMainAttributes().getValue("Bundle-Version");
Modified: struts/struts2/trunk/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/DefaultOValValidationManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/DefaultOValValidationManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/DefaultOValValidationManager.java (original)
+++ struts/struts2/trunk/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/DefaultOValValidationManager.java Tue May 15 11:05:50 2012
@@ -1,6 +1,7 @@
package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
import com.opensymphony.xwork2.util.logging.Logger;
@@ -31,8 +32,8 @@ public class DefaultOValValidationManage
private FileManager fileManager;
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
public synchronized List<Configurer> getConfigurers(Class clazz, String context, boolean validateJPAAnnotations) {
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManager.java Tue May 15 11:05:50 2012
@@ -1,7 +1,9 @@
package com.opensymphony.xwork2;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.Collection;
/**
* Basic interface to access file on the File System and to monitor changes
@@ -44,4 +46,19 @@ public interface FileManager {
*/
void monitorFile(URL fileUrl);
+ /**
+ * Convert URLs to URLs with "file" protocol
+ * @param url URL to convert to a jar url
+ * @return a URL to a file, or null if the URL external form cannot be parsed
+ */
+ URL normalizeToFileProtocol(URL url);
+
+ /**
+ * Indicate if given implementation supports current OS File System
+ *
+ * @return true if supports current OS File System
+ */
+ boolean support();
+
+ Collection<? extends URL> getAllPhysicalUrls(URL url) throws IOException;
}
Added: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManagerFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManagerFactory.java?rev=1338643&view=auto
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManagerFactory.java (added)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/FileManagerFactory.java Tue May 15 11:05:50 2012
@@ -0,0 +1,10 @@
+package com.opensymphony.xwork2;
+
+/**
+ * Factory that creates FileManager, default to {@link com.opensymphony.xwork2.util.fs.DefaultFileManager}
+ */
+public interface FileManagerFactory {
+
+ FileManager getFileManager();
+
+}
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java Tue May 15 11:05:50 2012
@@ -16,6 +16,7 @@
package com.opensymphony.xwork2.config;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
@@ -168,7 +169,7 @@ public class ConfigurationManager {
* @param container current container used to obtain instance of {@link com.opensymphony.xwork2.util.fs.DefaultFileManager}
*/
public synchronized void conditionalReload(Container container) {
- FileManager fileManager = container.getInstance(FileManager.class);
+ FileManager fileManager = container.getInstance(FileManagerFactory.class).getFileManager();
if (fileManager.isReloadingConfigs()) {
if (LOG.isDebugEnabled()) {
LOG.debug("Checking ConfigurationProviders for reload.");
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java Tue May 15 11:05:50 2012
@@ -18,6 +18,7 @@ package com.opensymphony.xwork2.config.i
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.DefaultTextProvider;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.config.Configuration;
@@ -53,10 +54,11 @@ import com.opensymphony.xwork2.ognl.Ognl
import com.opensymphony.xwork2.ognl.OgnlValueStackFactory;
import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.PatternMatcher;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;
+import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
@@ -269,7 +271,7 @@ public class DefaultConfiguration implem
protected Container createBootstrapContainer() {
ContainerBuilder builder = new ContainerBuilder();
builder.factory(ObjectFactory.class, Scope.SINGLETON);
- builder.factory(FileManager.class, DefaultFileManager.class, Scope.SINGLETON);
+ builder.factory(FileManagerFactory.class, DefaultFileManagerFactory.class, Scope.SINGLETON);
builder.factory(ReflectionProvider.class, OgnlReflectionProvider.class, Scope.SINGLETON);
builder.factory(ValueStackFactory.class, OgnlValueStackFactory.class, Scope.SINGLETON);
builder.factory(XWorkConverter.class, Scope.SINGLETON);
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java Tue May 15 11:05:50 2012
@@ -5,6 +5,7 @@ import com.opensymphony.xwork2.DefaultAc
import com.opensymphony.xwork2.DefaultTextProvider;
import com.opensymphony.xwork2.DefaultUnknownHandlerManager;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.TextProviderSupport;
import com.opensymphony.xwork2.UnknownHandlerManager;
@@ -40,10 +41,11 @@ import com.opensymphony.xwork2.ognl.acce
import com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor;
import com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor;
import com.opensymphony.xwork2.util.CompoundRoot;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.PatternMatcher;
import com.opensymphony.xwork2.util.ValueStackFactory;
import com.opensymphony.xwork2.util.WildcardHelper;
+import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import com.opensymphony.xwork2.util.reflection.ReflectionContextFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
@@ -89,7 +91,7 @@ public class XWorkConfigurationProvider
.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class, Scope.SINGLETON)
.factory(ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON)
.factory(XWorkConverter.class, Scope.SINGLETON)
- .factory(FileManager.class, DefaultFileManager.class, Scope.SINGLETON)
+ .factory(FileManagerFactory.class, DefaultFileManagerFactory.class, Scope.SINGLETON)
.factory(ValueStackFactory.class, OgnlValueStackFactory.class, Scope.SINGLETON)
.factory(ValidatorFactory.class, DefaultValidatorFactory.class, Scope.SINGLETON)
.factory(ValidatorFileParser.class, DefaultValidatorFileParser.class, Scope.SINGLETON)
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java Tue May 15 11:05:50 2012
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.config.p
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.Configuration;
@@ -113,8 +114,8 @@ public class XmlConfigurationProvider im
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
/**
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java Tue May 15 11:05:50 2012
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.conversi
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.XWorkMessages;
import com.opensymphony.xwork2.XWorkException;
@@ -202,8 +203,8 @@ public class XWorkConverter extends Defa
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
public static String getConversionErrorMessage(String propertyName, ValueStack stack) {
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java Tue May 15 11:05:50 2012
@@ -18,15 +18,8 @@ package com.opensymphony.xwork2.util;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* Helper class to extract file paths from different urls
@@ -39,36 +32,6 @@ public class URLUtil {
public static final String JBOSS5_VFSMEMORY = "vfsmemory";
public static final String JBOSS5_VFSFILE = "vfsfile";
- private static final Pattern JAR_PATTERN = Pattern.compile("^(jar:|wsjar:|zip:|vfsfile:|code-source:)?(file:)?(.*?)(\\!/|\\.jar/)(.*)");
- private static final int JAR_FILE_PATH = 3;
-
- /**
- * Convert URLs to URLs with "file" protocol
- * @param url URL to convert to a jar url
- * @return a URL to a file, or null if the URL external form cannot be parsed
- */
- public static URL normalizeToFileProtocol(URL url) {
- String fileName = url.toExternalForm();
- Matcher jarMatcher = JAR_PATTERN.matcher(fileName);
- try {
- if (isJBossUrl(url)){
- return getJBossPhysicalUrl(url);
- } else if (jarMatcher.matches()) {
- String path = jarMatcher.group(JAR_FILE_PATH);
- return new URL("file", "", path);
- } else {
- //it is not a jar or zip file
- return null;
- }
- } catch (MalformedURLException e) {
- //can this ever happen?
- return null;
- } catch (IOException e) {
- LOG.warn("Error opening JBoss vfs file", e);
- return null;
- }
- }
-
/**
* Verify That the given String is in valid URL format.
* @param url The url string to verify.
@@ -93,89 +56,4 @@ public class URLUtil {
}
}
- /**
- * Check if given URL is matching Jar pattern for different servers
- * @param fileUrl
- * @return
- */
- public static boolean isJarURL(URL fileUrl) {
- Matcher jarMatcher = URLUtil.JAR_PATTERN.matcher(fileUrl.getPath());
- return jarMatcher.matches();
- }
-
- /**
- * Check if given URL is pointing to JBoss 5 VFS resource
- * @param fileUrl
- * @return
- */
- public static boolean isJBossUrl(URL fileUrl) {
- final String protocol = fileUrl.getProtocol();
- return JBOSS5_VFSZIP.equals(protocol) || JBOSS5_VFSMEMORY.equals(protocol) || JBOSS5_VFS.equals(protocol)
- || ("true".equals(System.getProperty("jboss.vfs.forceVfsJar")) && JBOSS5_VFSFILE.equals(protocol));
- }
-
- /**
- * Try to determine physical file location.
- *
- * @param url JBoss VFS URL
- * @return URL pointing to physical file or original URL
- * @throws IOException If conversion fails
- */
- public static URL getJBossPhysicalUrl(URL url) throws IOException {
- Object content = url.openConnection().getContent();
- try {
- String s = content.getClass().toString();
- if (s.startsWith("class org.jboss.vfs.VirtualFile")) { // JBoss 7 and probably JBoss 6
- File physicalFile = readJBossPhysicalFile(content);
- return physicalFile.toURI().toURL();
- } else if (s.startsWith("class org.jboss.virtual.VirtualFile")) { // JBoss 5
- String fileName = url.toExternalForm();
- return new URL("file", null, fileName.substring(fileName.indexOf(":") + 1));
- }
- } catch (Exception e) {
- LOG.warn("Error calling getPhysicalFile() on JBoss VirtualFile.", e);
- }
- return url;
- }
-
- public static List<URL> getAllJBossPhysicalUrls(URL url) throws IOException {
- List<URL> urls = new ArrayList<URL>();
- Object content = url.openConnection().getContent();
- try {
- if (content.getClass().toString().startsWith("class org.jboss.vfs.VirtualFile")) {
- File physicalFile = readJBossPhysicalFile(content);
- readFile(urls, physicalFile);
- readFile(urls, physicalFile.getParentFile());
- } else {
- urls.add(url);
- }
- } catch (Exception e) {
- LOG.warn("Error calling getPhysicalFile() on JBoss VirtualFile.", e);
- }
- return urls;
- }
-
- private static File readJBossPhysicalFile(Object content) throws Exception {
- Method method = content.getClass().getDeclaredMethod("getPhysicalFile");
- return (File) method.invoke(content);
- }
-
- private static void readFile(List<URL> urls, File physicalFile) throws MalformedURLException {
- if (physicalFile.isDirectory()) {
- for (File file : physicalFile.listFiles()) {
- if (file.isFile()) {
- addIfAbsent(urls, file.toURI().toURL());
- } else if (file.isDirectory()) {
- readFile(urls, file);
- }
- }
- }
- }
-
- private static void addIfAbsent(List<URL> urls, URL fileUrl) {
- if (!urls.contains(fileUrl)) {
- urls.add(fileUrl);
- }
- }
-
}
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java Tue May 15 11:05:50 2012
@@ -15,24 +15,22 @@
*/
package com.opensymphony.xwork2.util.classloader;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import com.opensymphony.xwork2.util.classloader.FileResourceStore;
-import com.opensymphony.xwork2.util.URLUtil;
-import com.opensymphony.xwork2.XWorkException;
+import org.apache.commons.lang3.ObjectUtils;
-import java.io.InputStream;
import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
import java.net.URISyntaxException;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.Set;
+import java.net.URL;
import java.util.Collections;
-import java.util.Collection;
-import java.util.HashSet;
-
-import org.apache.commons.lang3.ObjectUtils;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* The ReloadingClassLoader uses a delegation mechanism to allow
@@ -54,8 +52,9 @@ public class ReloadingClassLoader extend
super(pParent);
parent = pParent;
URL parentRoot = pParent.getResource("");
- URL root = URLUtil.normalizeToFileProtocol(parentRoot);
- root = (URL) ObjectUtils.defaultIfNull(root, parentRoot);
+ FileManager fileManager = ActionContext.getContext().getInstance(FileManagerFactory.class).getFileManager();
+ URL root = fileManager.normalizeToFileProtocol(parentRoot);
+ root = ObjectUtils.defaultIfNull(root, parentRoot);
try {
if (root != null) {
stores = new ResourceStore[]{new FileResourceStore(new File(root.toURI()))};
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ClassFinder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ClassFinder.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ClassFinder.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ClassFinder.java Tue May 15 11:05:50 2012
@@ -15,16 +15,18 @@
*/
package com.opensymphony.xwork2.util.finder;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import com.opensymphony.xwork2.util.URLUtil;
-import com.opensymphony.xwork2.XWorkException;
+import org.apache.commons.lang3.StringUtils;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.commons.EmptyVisitor;
-import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.IOException;
@@ -37,7 +39,17 @@ import java.lang.reflect.Method;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
@@ -66,6 +78,7 @@ public class ClassFinder {
private boolean extractBaseInterfaces;
private ClassLoaderInterface classLoaderInterface;
+ private FileManager fileManager;
/**
* Creates a ClassFinder that will search the urls in the specified ClassLoaderInterface
@@ -136,6 +149,7 @@ public class ClassFinder {
public ClassFinder(ClassLoaderInterface classLoaderInterface, Collection<URL> urls, boolean extractBaseInterfaces, Set<String> protocols, Test<String> classNameFilter) {
this.classLoaderInterface = classLoaderInterface;
this.extractBaseInterfaces = extractBaseInterfaces;
+ this.fileManager = ActionContext.getContext().getInstance(FileManagerFactory.class).getFileManager();
List<String> classNames = new ArrayList<String>();
for (URL location : urls) {
@@ -477,7 +491,7 @@ public class ClassFinder {
}
private List<String> jar(URL location) throws IOException {
- URL url = URLUtil.normalizeToFileProtocol(location);
+ URL url = fileManager.normalizeToFileProtocol(location);
if (url != null) {
InputStream in = url.openStream();
try {
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java Tue May 15 11:05:50 2012
@@ -15,17 +15,27 @@
*/
package com.opensymphony.xwork2.util.finder;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import com.opensymphony.xwork2.util.URLUtil;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Use with ClassFinder to filter the Urls to be scanned, example:
@@ -46,15 +56,22 @@ public class UrlSet {
private static final Logger LOG = LoggerFactory.getLogger(UrlSet.class);
private final Map<String,URL> urls;
private Set<String> protocols;
-
+ private FileManager fileManager;
+
+ private UrlSet() {
+ this.urls = new HashMap<String,URL>();
+ this.fileManager = ActionContext.getContext().getInstance(FileManagerFactory.class).getFileManager();
+ }
public UrlSet(ClassLoaderInterface classLoader) throws IOException {
- this(getUrls(classLoader));
+ this();
+ load(getUrls(classLoader));
}
public UrlSet(ClassLoaderInterface classLoader, Set<String> protocols) throws IOException {
- this(getUrls(classLoader, protocols));
+ this();
this.protocols = protocols;
+ load(getUrls(classLoader, protocols));
}
public UrlSet(URL... urls){
@@ -65,20 +82,17 @@ public class UrlSet {
* @param urls
*/
public UrlSet(Collection<URL> urls){
- this.urls = new HashMap<String,URL>();
+ this();
+ load(urls);
+ }
+
+ private UrlSet(Map<String, URL> urls) {
+ this.urls = urls;
+ }
+
+ private void load(Collection<URL> urls){
for (URL location : urls) {
try {
-// if (location.getProtocol().equals("file")) {
-// try {
-// // See if it's actually a jar
-// URL jarUrl = new URL("jar", "", location.toExternalForm() + "!/");
-// JarURLConnection juc = (JarURLConnection) jarUrl.openConnection();
-// juc.getJarFile();
-// location = jarUrl;
-// } catch (IOException e) {
-// }
-// this.urls.put(location.toExternalForm(), location);
-// }
this.urls.put(location.toExternalForm(), location);
} catch (Exception e) {
e.printStackTrace();
@@ -86,10 +100,6 @@ public class UrlSet {
}
}
- private UrlSet(Map<String, URL> urls) {
- this.urls = urls;
- }
-
public UrlSet include(UrlSet urlSet){
Map<String, URL> urls = new HashMap<String, URL>(this.urls);
urls.putAll(urlSet.urls);
@@ -186,8 +196,8 @@ public class UrlSet {
//if it is inside a war file, get the url to the file
externalForm = StringUtils.substringBefore(externalForm, "/WEB-INF/classes");
URL warUrl = new URL(externalForm);
- URL normalizedUrl = URLUtil.normalizeToFileProtocol(warUrl);
- URL finalUrl = (URL) ObjectUtils.defaultIfNull(normalizedUrl, warUrl);
+ URL normalizedUrl = fileManager.normalizeToFileProtocol(warUrl);
+ URL finalUrl = ObjectUtils.defaultIfNull(normalizedUrl, warUrl);
Map<String, URL> newUrls = new HashMap<String, URL>(this.urls);
if ("jar".equals(finalUrl.getProtocol()) || "file".equals(finalUrl.getProtocol())) {
@@ -216,7 +226,7 @@ public class UrlSet {
return new ArrayList<URL>(urls.values());
}
- private static List<URL> getUrls(ClassLoaderInterface classLoader) throws IOException {
+ private List<URL> getUrls(ClassLoaderInterface classLoader) throws IOException {
List<URL> list = new ArrayList<URL>();
//find jars
@@ -238,7 +248,7 @@ public class UrlSet {
return list;
}
- private static List<URL> getUrls(ClassLoaderInterface classLoader, Set<String> protocols) throws IOException {
+ private List<URL> getUrls(ClassLoaderInterface classLoader, Set<String> protocols) throws IOException {
if (protocols == null) {
return getUrls(classLoader);
@@ -263,11 +273,7 @@ public class UrlSet {
// Usually the "classes" dir.
ArrayList<URL> classesList = Collections.list(classLoader.getResources(""));
for (URL url : classesList) {
- if (URLUtil.isJBossUrl(url)) {
- list.addAll(URLUtil.getAllJBossPhysicalUrls(url));
- } else {
- list.add(url);
- }
+ list.addAll(fileManager.getAllPhysicalUrls(url));
}
return list;
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java Tue May 15 11:05:50 2012
@@ -16,16 +16,24 @@
package com.opensymphony.xwork2.util.fs;
import com.opensymphony.xwork2.FileManager;
-import com.opensymphony.xwork2.util.URLUtil;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Default implementation of {@link FileManager}
@@ -34,13 +42,21 @@ public class DefaultFileManager implemen
private static Logger LOG = LoggerFactory.getLogger(DefaultFileManager.class);
+ public static final String JBOSS5_VFS = "vfs";
+ public static final String JBOSS5_VFSZIP = "vfszip";
+ public static final String JBOSS5_VFSMEMORY = "vfsmemory";
+ public static final String JBOSS5_VFSFILE = "vfsfile";
+
+ public static final String JAR_FILE_NAME_SEPARATOR = "!/";
+ public static final String JAR_FILE_EXTENSION_END = ".jar/";
+
+ private static final Pattern JAR_PATTERN = Pattern.compile("^(jar:|wsjar:|zip:|vfsfile:|code-source:)?(file:)?(.*?)(\\!/|\\.jar/)(.*)");
+ private static final int JAR_FILE_PATH = 3;
+
private static Map<String, Revision> files = Collections.synchronizedMap(new HashMap<String, Revision>());
protected boolean reloadingConfigs = true;
- static final String JAR_FILE_NAME_SEPARATOR = "!/";
- static final String JAR_FILE_EXTENSION_END = ".jar/";
-
public DefaultFileManager() {
}
@@ -97,10 +113,10 @@ public class DefaultFileManager implemen
if (LOG.isDebugEnabled()) {
LOG.debug("Creating revision for URL: " +fileName);
}
- if (URLUtil.isJBossUrl(fileUrl)) {
- revision = JBossFileRevision.build(fileUrl);
- } else if (URLUtil.isJarURL(fileUrl)) {
- revision = JarEntryRevision.build(fileUrl);
+ if (isJBossUrl(fileUrl)) {
+ revision = JBossFileRevision.build(fileUrl, this);
+ } else if (isJarURL(fileUrl)) {
+ revision = JarEntryRevision.build(fileUrl, this);
} else {
revision = FileRevision.build(fileUrl);
}
@@ -112,4 +128,122 @@ public class DefaultFileManager implemen
}
}
+ /**
+ * Check if given URL is matching Jar pattern for different servers
+ * @param fileUrl
+ * @return
+ */
+ protected boolean isJarURL(URL fileUrl) {
+ Matcher jarMatcher = JAR_PATTERN.matcher(fileUrl.getPath());
+ return jarMatcher.matches();
+ }
+
+
+ public URL normalizeToFileProtocol(URL url) {
+ String fileName = url.toExternalForm();
+ Matcher jarMatcher = JAR_PATTERN.matcher(fileName);
+ try {
+ if (isJBossUrl(url)){
+ return getJBossPhysicalUrl(url);
+ } else if (jarMatcher.matches()) {
+ String path = jarMatcher.group(JAR_FILE_PATH);
+ return new URL("file", "", path);
+ } else {
+ //it is not a jar or zip file
+ return null;
+ }
+ } catch (MalformedURLException e) {
+ //can this ever happen?
+ return null;
+ } catch (IOException e) {
+ LOG.warn("Error opening JBoss vfs file", e);
+ return null;
+ }
+ }
+
+ /**
+ * Check if given URL is pointing to JBoss 5 VFS resource
+ * @param fileUrl
+ * @return
+ */
+ protected boolean isJBossUrl(URL fileUrl) {
+ final String protocol = fileUrl.getProtocol();
+ return JBOSS5_VFSZIP.equals(protocol) || JBOSS5_VFSMEMORY.equals(protocol) || JBOSS5_VFS.equals(protocol)
+ || ("true".equals(System.getProperty("jboss.vfs.forceVfsJar")) && JBOSS5_VFSFILE.equals(protocol));
+ }
+
+ /**
+ * Try to determine physical file location.
+ *
+ * @param url JBoss VFS URL
+ * @return URL pointing to physical file or original URL
+ * @throws IOException If conversion fails
+ */
+ protected URL getJBossPhysicalUrl(URL url) throws IOException {
+ Object content = url.openConnection().getContent();
+ try {
+ String s = content.getClass().toString();
+ if (s.startsWith("class org.jboss.vfs.VirtualFile")) { // JBoss 7 and probably 6
+ File physicalFile = readJBossPhysicalFile(content);
+ return physicalFile.toURI().toURL();
+ } else if (s.startsWith("class org.jboss.virtual.VirtualFile")) { // JBoss 5
+ String fileName = url.toExternalForm();
+ return new URL("file", null, fileName.substring(fileName.indexOf(":") + 1));
+ }
+ } catch (Exception e) {
+ LOG.warn("Error calling getPhysicalFile() on JBoss VirtualFile.", e);
+ }
+ return url;
+ }
+
+ public boolean support() {
+ return false; // allow other implementation to be used first
+ }
+
+ public Collection<? extends URL> getAllPhysicalUrls(URL url) throws IOException {
+ if (isJBossUrl(url)) {
+ return getAllJBossPhysicalUrls(url);
+ }
+ return Arrays.asList(url);
+ }
+
+ private List<URL> getAllJBossPhysicalUrls(URL url) throws IOException {
+ List<URL> urls = new ArrayList<URL>();
+ Object content = url.openConnection().getContent();
+ try {
+ if (content.getClass().toString().startsWith("class org.jboss.vfs.VirtualFile")) {
+ File physicalFile = readJBossPhysicalFile(content);
+ readFile(urls, physicalFile);
+ readFile(urls, physicalFile.getParentFile());
+ } else {
+ urls.add(url);
+ }
+ } catch (Exception e) {
+ LOG.warn("Error calling getPhysicalFile() on JBoss VirtualFile.", e);
+ }
+ return urls;
+ }
+
+ private File readJBossPhysicalFile(Object content) throws Exception {
+ Method method = content.getClass().getDeclaredMethod("getPhysicalFile");
+ return (File) method.invoke(content);
+ }
+
+ private void readFile(List<URL> urls, File physicalFile) throws MalformedURLException {
+ if (physicalFile.isDirectory()) {
+ for (File file : physicalFile.listFiles()) {
+ if (file.isFile()) {
+ addIfAbsent(urls, file.toURI().toURL());
+ } else if (file.isDirectory()) {
+ readFile(urls, file);
+ }
+ }
+ }
+ }
+
+ private void addIfAbsent(List<URL> urls, URL fileUrl) {
+ if (!urls.contains(fileUrl)) {
+ urls.add(fileUrl);
+ }
+ }
}
Added: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactory.java?rev=1338643&view=auto
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactory.java (added)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManagerFactory.java Tue May 15 11:05:50 2012
@@ -0,0 +1,48 @@
+package com.opensymphony.xwork2.util.fs;
+
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+import java.util.Set;
+
+/**
+ * Default implementation
+ */
+public class DefaultFileManagerFactory implements FileManagerFactory {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultFileManagerFactory.class);
+
+ private FileManager fileManager;
+
+ @Inject
+ public DefaultFileManagerFactory(Container container) {
+ Set<String> names = container.getInstanceNames(FileManager.class);
+ if (names != null) {
+ for (String fmName : names) {
+ FileManager fm = container.getInstance(FileManager.class, fmName);
+ if (fm.support()) {
+ if (fileManager != null) {
+ LOG.error("More than one FileManager supports current file system, [#0] and [#1]! "
+ + "Remove one of them from the config! Using implementation [#2]",
+ fm.toString(), fileManager.toString(), fm.toString());
+ }
+ fileManager = fm;
+ }
+ }
+ }
+ if (fileManager == null) {
+ LOG.debug("Using default implementation as a FileManager.");
+ fileManager = new DefaultFileManager();
+ container.inject(fileManager);
+ }
+ }
+
+ public FileManager getFileManager() {
+ return fileManager;
+ }
+
+}
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JBossFileRevision.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JBossFileRevision.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JBossFileRevision.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JBossFileRevision.java Tue May 15 11:05:50 2012
@@ -1,6 +1,6 @@
package com.opensymphony.xwork2.util.fs;
-import com.opensymphony.xwork2.util.URLUtil;
+import com.opensymphony.xwork2.FileManager;
import java.io.File;
import java.net.URISyntaxException;
@@ -15,9 +15,9 @@ class JBossFileRevision extends FileRevi
super(file, lastUpdated);
}
- public static Revision build(URL fileUrl) {
+ public static Revision build(URL fileUrl, FileManager fileManager) {
File file;
- URL url = URLUtil.normalizeToFileProtocol(fileUrl);
+ URL url = fileManager.normalizeToFileProtocol(fileUrl);
try {
if (url != null) {
file = new File(url.toURI());
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java Tue May 15 11:05:50 2012
@@ -1,6 +1,6 @@
package com.opensymphony.xwork2.util.fs;
-import com.opensymphony.xwork2.util.URLUtil;
+import com.opensymphony.xwork2.FileManager;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import org.apache.commons.io.FileUtils;
@@ -43,7 +43,7 @@ class JarEntryRevision extends Revision
return entry != null && (lastModified < entry.getTime());
}
- public static Revision build(URL fileUrl) {
+ public static Revision build(URL fileUrl, FileManager fileManager) {
// File within a Jar
// Find separator index of jar filename and filename within jar
String jarFileName = "";
@@ -64,7 +64,7 @@ class JarEntryRevision extends Revision
int index = separatorIndex + DefaultFileManager.JAR_FILE_NAME_SEPARATOR.length();
String fileNameInJar = fileName.substring(index).replaceAll("%20", " ");
- URL url = URLUtil.normalizeToFileProtocol(fileUrl);
+ URL url = fileManager.normalizeToFileProtocol(fileUrl);
if (url != null) {
JarFile jarFile = new JarFile(FileUtils.toFile(url));
ZipEntry entry = jarFile.getEntry(fileNameInJar);
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java Tue May 15 11:05:50 2012
@@ -20,6 +20,7 @@ import com.opensymphony.xwork2.ActionCon
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
@@ -74,8 +75,8 @@ public class AnnotationActionValidatorMa
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
public List<Validator> getValidators(Class clazz, String context) {
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java Tue May 15 11:05:50 2012
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.validato
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
import com.opensymphony.xwork2.util.ValueStack;
@@ -66,8 +67,8 @@ public class DefaultActionValidatorManag
}
@Inject
- public void setFileManager(FileManager fileManager) {
- this.fileManager = fileManager;
+ public void setFileManagerFactory(FileManagerFactory fileManagerFactory) {
+ this.fileManager = fileManagerFactory.getFileManager();
}
public synchronized List<Validator> getValidators(Class clazz, String context) {
Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/ConfigurationManagerTest.java Tue May 15 11:05:50 2012
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.config;
import com.mockobjects.dynamic.C;
import com.mockobjects.dynamic.Mock;
import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.XWorkTestCase;
import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
@@ -48,7 +49,7 @@ public class ConfigurationManagerTest ex
configProviderMock.expect("loadPackages", C.ANY_ARGS);
configProviderMock.expect("destroy", C.ANY_ARGS);
configProviderMock.matchAndReturn("toString", "mock");
- configuration.getContainer().getInstance(FileManager.class).setReloadingConfigs(true);
+ configuration.getContainer().getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs(true);
configuration = configurationManager.getConfiguration();
configProviderMock.verify();
@@ -58,7 +59,7 @@ public class ConfigurationManagerTest ex
public void testNoConfigurationReload() {
// now check that it doesn't try to reload
- configuration.getContainer().getInstance(FileManager.class).setReloadingConfigs(false);
+ configuration.getContainer().getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs(false);
configuration = configurationManager.getConfiguration();
configProviderMock.verify();
Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/ConfigurationTestBase.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/ConfigurationTestBase.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/ConfigurationTestBase.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/ConfigurationTestBase.java Tue May 15 11:05:50 2012
@@ -15,7 +15,7 @@
*/
package com.opensymphony.xwork2.config.providers;
-import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.XWorkTestCase;
import com.opensymphony.xwork2.config.ConfigurationProvider;
@@ -37,7 +37,7 @@ public abstract class ConfigurationTestB
XmlConfigurationProvider prov = new XmlConfigurationProvider(filename, true);
prov.setObjectFactory(container.getInstance(ObjectFactory.class));
- prov.setFileManager(container.getInstance(FileManager.class));
+ prov.setFileManagerFactory(container.getInstance(FileManagerFactory.class));
prov.init(configuration);
prov.loadPackages();
return prov;
Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorParamOverridingTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorParamOverridingTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorParamOverridingTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorParamOverridingTest.java Tue May 15 11:05:50 2012
@@ -21,7 +21,7 @@ import com.opensymphony.xwork2.config.Ru
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import java.util.ArrayList;
import java.util.List;
@@ -35,7 +35,7 @@ public class XmlConfigurationProviderInt
public void testInterceptorParamOveriding() throws Exception {
DefaultConfiguration conf = new DefaultConfiguration();
final XmlConfigurationProvider p = new XmlConfigurationProvider("com/opensymphony/xwork2/config/providers/xwork-test-interceptor-param-overriding.xml");
- p.setFileManager(new DefaultFileManager());
+ p.setFileManagerFactory(new DefaultFileManagerFactory(container));
conf.reload(new ArrayList<ConfigurationProvider>() {
{
add(new XWorkConfigurationProvider());
Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorStackParamOverridingTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorStackParamOverridingTest.java?rev=1338643&r1=1338642&r2=1338643&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorStackParamOverridingTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorStackParamOverridingTest.java Tue May 15 11:05:50 2012
@@ -6,7 +6,7 @@ import com.opensymphony.xwork2.config.Ru
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-import com.opensymphony.xwork2.util.fs.DefaultFileManager;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import java.util.ArrayList;
import java.util.List;
@@ -22,7 +22,7 @@ public class XmlConfigurationProviderInt
public void testInterceptorStackParamOveriding() throws Exception {
DefaultConfiguration conf = new DefaultConfiguration();
final XmlConfigurationProvider p = new XmlConfigurationProvider("com/opensymphony/xwork2/config/providers/xwork-test-interceptor-stack-param-overriding.xml");
- p.setFileManager(new DefaultFileManager());
+ p.setFileManagerFactory(new DefaultFileManagerFactory(container));
configurationManager.addContainerProvider(p);
conf.reload(new ArrayList<ConfigurationProvider>(){
{