Author: craigmcc
Date: Fri Dec 15 18:21:54 2006
New Revision: 487748
URL: http://svn.apache.org/viewvc?view=rev&rev=487748
Log:
Make it possible to configure which URL mapping to use (for the specified or
default FacesServlet servlet) when manufacturing URLs for resource identifiers.
This should help reduce conflicts in scenarios when other libraries are in use
that require alternative URL mappings.
SHALE-266
Modified:
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/chain-config.xml
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/web.xml
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Constants.java
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Mappings.java
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/faces/MappingsHelper.java
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingImpl.java
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingsImpl.java
Modified:
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/chain-config.xml
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/chain-config.xml?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/chain-config.xml
(original)
+++
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/chain-config.xml
Fri Dec 15 18:21:54 2006
@@ -27,7 +27,7 @@
<!-- Disallow direct access to JSP and JSFP resources -->
<command
className="org.apache.shale.application.ContextRelativePathFilter"
-
includes="\S*\.xml,\S*\.faces,\S*\.html,\S*\.gif,\S*\.jpg,/index\.jsp"
+
includes="\S*\.xml,\S*\.faces,\S*\.html,\S*\.gif,\S*\.jpg,/index\.jsp,\S*\.resources"
excludes="\S*\.jsp,\S*\.jspf"/>
</chain>
</catalog>
Modified:
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/web.xml?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/web.xml
(original)
+++
shale/framework/trunk/shale-apps/shale-usecases/src/main/webapp/WEB-INF/web.xml
Fri Dec 15 18:21:54 2006
@@ -38,15 +38,22 @@
<param-name>org.apache.commons.chain.CONFIG_WEB_RESOURCE</param-name>
<param-value>/WEB-INF/chain-config.xml</param-value>
</context-param>
-
- <!-- Shale Validator Configuration Resources -->
- <context-param>
+
+ <!-- Shale Remoting Configuration -->
+ <context-param>
+ <!-- Use the second (zero-relative) FacesServlet URL mapping -->
+
<param-name>org.apache.shale.remoting.FACES_SERVLET_MAPPING_INDEX</param-name>
+ <param-value>1</param-value>
+ </context-param>
+
+ <!-- Shale Validator Configuration Resources -->
+ <context-param>
<param-name>org.apache.shale.validator.VALIDATOR_RULES</param-name>
<param-value>
/org/apache/shale/validator/validator-rules.xml,
/WEB-INF/custom-rules.xml
</param-value>
- </context-param>
+ </context-param>
<!-- Spring ApplicationContext Configuration -->
<context-param>
@@ -102,11 +109,16 @@
<load-on-startup>1</load-on-startup>
</servlet>
- <!-- JavaServer Faces Servlet Mapping -->
+ <!-- JavaServer Faces Servlet Mappings -->
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>faces</servlet-name>
+ <url-pattern>*.resources</url-pattern>
+ </servlet-mapping>
+
<!-- Welcome File List -->
<welcome-file-list>
Modified:
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Constants.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Constants.java?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Constants.java
(original)
+++
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Constants.java
Fri Dec 15 18:21:54 2006
@@ -172,6 +172,21 @@
/**
+ * <p>Context initialization parameter defining the zero-relative index
+ * of the <code>servlet-mapping</code>, for the specified or default
+ * <code>FacesServlet</code> servlet name, to use when generating
+ * URLs for resources. If not specified, the default value is zero,
+ * meaning that the first servlet mapping (in the order listed in
+ * <code>web.xml</code>) will be used.</p>
+ *
+ * @since 1.0.4
+ */
+ public static final String FACES_SERVLET_URL_PARAM =
+ "org.apache.shale.remoting.FACES_SERVLET_MAPPING_INDEX";
+
+
+
+ /**
* <p>Context initialization parameter containing the fully qualified
* class name of the [EMAIL PROTECTED] Mapping} implementation class to
use. If
* not specified, <code>org.apache.shale.remoting.impl.MappingImpl</code>
Modified:
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Mappings.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Mappings.java?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Mappings.java
(original)
+++
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/Mappings.java
Fri Dec 15 18:21:54 2006
@@ -65,6 +65,29 @@
/**
+ * <p>Return the zero-relative index, into the array returned by
+ * <code>getPatterns()</code>, of the URL pattern to be used by default
+ * when creating URLs for resources.</p>
+ *
+ * @since 1.0.4
+ */
+ public int getPatternIndex();
+
+
+ /**
+ * <p>Set the zero-relative index, into the array returned by
+ * <code>getPatterns()</code>, of the URL pattern to be used by default
+ * when creating URLs for resources. If not called, the default value
+ * will be zero.</p>
+ *
+ * @param patternIndex The new pattern index
+ *
+ * @since 1.0.4
+ */
+ public void setPatternIndex(int patternIndex);
+
+
+ /**
* <p>Return a list of URL patterns that this application has mapped to
* <code>FacesServlet</code>. This information is useful to renderers that
* wish to dynamically calculate URLs that will be guaranteed to trigger
Modified:
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/faces/MappingsHelper.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/faces/MappingsHelper.java?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/faces/MappingsHelper.java
(original)
+++
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/faces/MappingsHelper.java
Fri Dec 15 18:21:54 2006
@@ -287,6 +287,19 @@
}
mappings.setPatterns(patterns);
+ // Calculate the index of the pattern to use by default
+ int patternIndex = 0;
+ String patternIndexString =
+
context.getExternalContext().getInitParameter(Constants.FACES_SERVLET_URL_PARAM);
+ if (patternIndexString != null) {
+ patternIndex = Integer.parseInt(patternIndexString.trim());
+ }
+ if (patternIndex >= patterns.length) {
+ log.warn("FacesServlet pattern index of " + patternIndex
+ + " does not match any specified pattern");
+ }
+ mappings.setPatternIndex(patternIndex);
+
// Return the configured Mappings instance
return mappings;
Modified:
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingImpl.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingImpl.java?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingImpl.java
(original)
+++
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingImpl.java
Fri Dec 15 18:21:54 2006
@@ -185,7 +185,7 @@
String[] patterns = getMappings().getPatterns();
String pattern = null;
if ((patterns != null) && (patterns.length > 0)) {
- pattern = patterns[0]; // Arbitrarily choose the first one
+ pattern = patterns[getMappings().getPatternIndex()];
}
// Configure the entire URL we will return
Modified:
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingsImpl.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingsImpl.java?view=diff&rev=487748&r1=487747&r2=487748
==============================================================================
---
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingsImpl.java
(original)
+++
shale/framework/trunk/shale-remoting/src/main/java/org/apache/shale/remoting/impl/MappingsImpl.java
Fri Dec 15 18:21:54 2006
@@ -54,6 +54,13 @@
/**
+ * <p>The zero relative index of the URL pattern, in the
<code>patterns</code>
+ * array, to use for generating resource URLs.</p>
+ */
+ private int patternIndex = 0;
+
+
+ /**
* <p>The list of URL patterns for <code>FacesServlet</code>.</p>
*/
private String[] patterns = new String[0];
@@ -102,6 +109,18 @@
/** [EMAIL PROTECTED] */
public List getMappings() {
return this.mappings;
+ }
+
+
+ /** [EMAIL PROTECTED] */
+ public int getPatternIndex() {
+ return this.patternIndex;
+ }
+
+
+ /** [EMAIL PROTECTED] */
+ public void setPatternIndex(int patternIndex) {
+ this.patternIndex = patternIndex;
}