sylvain 2004/02/13 08:03:15
Modified: src/java/org/apache/cocoon/components/pipeline
AbstractProcessingPipeline.java
src/java/org/apache/cocoon/components/source/impl
SitemapSource.java
src/java/org/apache/cocoon/components/xpointer
UnsupportedPart.java
src/java/org/apache/cocoon/matching
AbstractRegexpMatcher.java
AbstractWildcardMatcher.java PreparableMatcher.java
src/java/org/apache/cocoon/transformation
CIncludeTransformer.java XIncludeTransformer.java
Log:
Porting some changes done in 2.1
Revision Changes Path
1.31 +32 -14
cocoon-2.2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java
Index: AbstractProcessingPipeline.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- AbstractProcessingPipeline.java 11 Feb 2004 15:59:02 -0000 1.30
+++ AbstractProcessingPipeline.java 13 Feb 2004 16:03:14 -0000 1.31
@@ -67,6 +67,7 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.ConnectionResetException;
+import org.apache.cocoon.Constants;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Processor;
import org.apache.cocoon.environment.Environment;
@@ -221,15 +222,17 @@
public void setGenerator (String role, String source, Parameters param,
Parameters hintParam)
throws ProcessingException {
if (this.generator != null) {
- throw new ProcessingException ("Generator already set. You can
only select one Generator (" + role + ")");
+ throw new ProcessingException ("Generator already set. Cannot
set generator '" + role +
+ "' at " + getLocation(param));
}
if (this.reader != null) {
- throw new ProcessingException ("Reader already set. You cannot
use a reader and a generator for one pipeline.");
+ throw new ProcessingException ("Reader already set. Cannot set
generator '" + role +
+ "' at " + getLocation(param));
}
try {
this.generator = (Generator) newManager.lookup(role);
} catch (ServiceException ce) {
- throw new ProcessingException("Lookup of generator for role
'"+role+"' failed.", ce);
+ throw new ProcessingException("Lookup of generator selector
failed at " +getLocation(param), ce);
}
this.generatorSource = source;
this.generatorParam = param;
@@ -250,15 +253,18 @@
public void addTransformer (String role, String source, Parameters
param, Parameters hintParam)
throws ProcessingException {
if (this.reader != null) {
- throw new ProcessingException ("Reader already set. You cannot
use a transformer with a reader.");
+ // Should normally never happen as setting a reader starts
pipeline processing
+ throw new ProcessingException ("Reader already set. Cannot add
transformer '" + role +
+ "' at " + getLocation(param));
}
if (this.generator == null) {
- throw new ProcessingException ("You must set a generator first
before you can use a transformer.");
+ throw new ProcessingException ("Must set a generator before
adding transformer '" + role +
+ "' at " + getLocation(param));
}
try {
this.transformers.add(newManager.lookup(role));
} catch (ServiceException ce) {
- throw new ProcessingException("Lookup of transformer for role
'"+role+"' failed.", ce);
+ throw new ProcessingException("Lookup of transformer '"+role+"'
failed at " + getLocation(param), ce);
}
this.transformerSources.add(source);
this.transformerParams.add(param);
@@ -271,19 +277,24 @@
public void setSerializer (String role, String source, Parameters param,
Parameters hintParam, String mimeType)
throws ProcessingException {
if (this.serializer != null) {
- throw new ProcessingException ("Serializer already set. You can
only select one Serializer (" + role + ")");
+ // Should normally not happen as adding a serializer starts
pipeline processing
+ throw new ProcessingException ("Serializer already set. Cannot
set serializer '" + role +
+ "' at " + getLocation(param));
}
if (this.reader != null) {
- throw new ProcessingException ("Reader already set. You cannot
use a serializer with a reader.");
+ // Should normally never happen as setting a reader starts
pipeline processing
+ throw new ProcessingException ("Reader already set. Cannot set
serializer '" + role +
+ "' at " + getLocation(param));
}
if (this.generator == null) {
- throw new ProcessingException ("You must set a generator first
before you can use a serializer.");
+ throw new ProcessingException ("Must set a generator before
setting serializer '" + role +
+ "' at " + getLocation(param));
}
try {
this.serializer = (Serializer) newManager.lookup(role);
} catch (ServiceException ce) {
- throw new ProcessingException("Lookup of serializer for role
'"+role+"' failed.", ce);
+ throw new ProcessingException("Lookup of serializer '" + role +
"' failed at " + getLocation(param), ce);
}
this.serializerSource = source;
this.serializerParam = param;
@@ -298,16 +309,20 @@
public void setReader (String role, String source, Parameters param,
String mimeType)
throws ProcessingException {
if (this.reader != null) {
- throw new ProcessingException ("Reader already set. You can only
select one Reader (" + role + ")");
+ // Should normally never happen as setting a reader starts
pipeline processing
+ throw new ProcessingException ("Reader already set. Cannot set
reader '" + role +
+ "' at " + getLocation(param));
}
if (this.generator != null) {
- throw new ProcessingException ("Generator already set. You
cannot use a reader and a generator for one pipeline.");
+ // Should normally never happen as setting a reader starts
pipeline processing
+ throw new ProcessingException ("Generator already set. Cannot
use reader '" + role +
+ "' at " + getLocation(param));
}
try {
this.reader = (Reader) newManager.lookup(role);
} catch (ServiceException ce) {
- throw new ProcessingException("Lookup of reader for role
'"+role+"' failed.", ce);
+ throw new ProcessingException("Lookup of reader '"+role+"'
failed at " + getLocation(param), ce);
}
this.readerSource = source;
this.readerParam = param;
@@ -745,4 +760,7 @@
return null;
}
+ protected String getLocation(Parameters param) {
+ return param.getParameter(Constants.SITEMAP_PARAMETERS_LOCATION,
"[unknown location]");
+ }
}
1.27 +2 -2
cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- SitemapSource.java 6 Feb 2004 11:42:46 -0000 1.26
+++ SitemapSource.java 13 Feb 2004 16:03:14 -0000 1.27
@@ -216,7 +216,7 @@
}
// VG: Why exception is not thrown in constructor?
if (this.exception != null) {
- throw new IOException("SAXException: " + this.exception);
+ throw new SourceException("Cannot get input stream for " +
getURI(), this.exception);
}
if (this.redirectSource != null) {
1.2 +1 -3
cocoon-2.2/src/java/org/apache/cocoon/components/xpointer/UnsupportedPart.java
Index: UnsupportedPart.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/xpointer/UnsupportedPart.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- UnsupportedPart.java 20 May 2003 11:57:13 -0000 1.1
+++ UnsupportedPart.java 13 Feb 2004 16:03:14 -0000 1.2
@@ -60,8 +60,6 @@
}
public boolean process(XPointerContext xpointerContext) throws
SAXException {
- if (xpointerContext.getLogger().isDebugEnabled())
- xpointerContext.getLogger().debug("Scheme " + schemeName + " not
supported by this XPointer implementation, as used in the fragment identifier "
+ xpointerContext.getXPointer());
- return false;
+ throw new SAXException("Scheme " + schemeName + " not supported by
this XPointer implementation, as used in the fragment identifier " +
xpointerContext.getXPointer());
}
}
1.4 +12 -7
cocoon-2.2/src/java/org/apache/cocoon/matching/AbstractRegexpMatcher.java
Index: AbstractRegexpMatcher.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/matching/AbstractRegexpMatcher.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractRegexpMatcher.java 5 Jan 2004 08:17:30 -0000 1.3
+++ AbstractRegexpMatcher.java 13 Feb 2004 16:03:14 -0000 1.4
@@ -54,6 +54,7 @@
import java.util.Map;
import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.Constants;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.regexp.RE;
import org.apache.regexp.RECompiler;
@@ -75,13 +76,12 @@
* Compile the pattern in a <code>org.apache.regexp.REProgram</code>.
*/
public Object preparePattern(String pattern) throws PatternException {
- if (pattern == null)
- {
- throw new PatternException("null passed as a pattern", null);
+ // if pattern is null, return null to allow throwing a located
exception in preparedMatch()
+ if (pattern == null) {
+ return null;
}
- if (pattern.length() == 0)
- {
+ if (pattern.length() == 0) {
pattern = "^$";
if (getLogger().isWarnEnabled()) {
getLogger().warn("The empty pattern string was rewritten to
'^$'"
@@ -105,7 +105,12 @@
/**
* Match the prepared pattern against the value returned by [EMAIL
PROTECTED] #getMatchString(Map, Parameters)}.
*/
- public Map preparedMatch(Object preparedPattern, Map objectModel,
Parameters parameters) {
+ public Map preparedMatch(Object preparedPattern, Map objectModel,
Parameters parameters) throws PatternException {
+
+ if(preparedPattern == null) {
+ throw new PatternException("A pattern is needed at " +
+
parameters.getParameter(Constants.SITEMAP_PARAMETERS_LOCATION, "unknown
location"));
+ }
RE re = new RE((REProgram)preparedPattern);
String match = getMatchString(objectModel, parameters);
1.4 +11 -3
cocoon-2.2/src/java/org/apache/cocoon/matching/AbstractWildcardMatcher.java
Index: AbstractWildcardMatcher.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/matching/AbstractWildcardMatcher.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractWildcardMatcher.java 5 Jan 2004 08:17:30 -0000 1.3
+++ AbstractWildcardMatcher.java 13 Feb 2004 16:03:14 -0000 1.4
@@ -54,7 +54,9 @@
import java.util.Map;
import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.Constants;
import org.apache.cocoon.matching.helpers.WildcardHelper;
+import org.apache.cocoon.sitemap.PatternException;
/**
* Base class for wildcard matchers
@@ -69,13 +71,19 @@
* Compile the pattern in an <code>int[]</code>.
*/
public Object preparePattern(String pattern) {
- return WildcardHelper.compilePattern(pattern);
+ // if pattern is null, return null to allow throwing a located
exception in preparedMatch()
+ return pattern == null ? null :
WildcardHelper.compilePattern(pattern);
}
/**
* Match the prepared pattern against the result of [EMAIL PROTECTED]
#getMatchString(Map, Parameters)}.
*/
- public Map preparedMatch(Object preparedPattern, Map objectModel,
Parameters parameters) {
+ public Map preparedMatch(Object preparedPattern, Map objectModel,
Parameters parameters) throws PatternException {
+
+ if(preparedPattern == null) {
+ throw new PatternException("A pattern is needed at " +
+
parameters.getParameter(Constants.SITEMAP_PARAMETERS_LOCATION, "unknown
location"));
+ }
String match = getMatchString(objectModel, parameters);
1.3 +2 -2
cocoon-2.2/src/java/org/apache/cocoon/matching/PreparableMatcher.java
Index: PreparableMatcher.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/matching/PreparableMatcher.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PreparableMatcher.java 5 Jan 2004 08:17:30 -0000 1.2
+++ PreparableMatcher.java 13 Feb 2004 16:03:14 -0000 1.3
@@ -90,7 +90,7 @@
* @return a <code>Map</code> object with replacements
for wildcards/regular-expressions
* contained in the pattern. If the return value
is null there was no match.
*/
- Map preparedMatch(Object preparedPattern, Map objectModel, Parameters
parameters);
+ Map preparedMatch(Object preparedPattern, Map objectModel, Parameters
parameters) throws PatternException;
}
1.12 +5 -1
cocoon-2.2/src/java/org/apache/cocoon/transformation/CIncludeTransformer.java
Index: CIncludeTransformer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/transformation/CIncludeTransformer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- CIncludeTransformer.java 6 Dec 2003 21:22:07 -0000 1.11
+++ CIncludeTransformer.java 13 Feb 2004 16:03:14 -0000 1.12
@@ -493,6 +493,10 @@
boolean cache)
throws SAXException, IOException {
+ if (src == null) {
+ throw new SAXException("Missing 'src' attribute on
cinclude:include element");
+ }
+
if (element == null) element="";
if (select == null) select="";
if (ns == null) ns="";
1.14 +51 -33
cocoon-2.2/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java
Index: XIncludeTransformer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.2/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- XIncludeTransformer.java 6 Feb 2004 22:24:40 -0000 1.13
+++ XIncludeTransformer.java 13 Feb 2004 16:03:15 -0000 1.14
@@ -186,40 +186,50 @@
}
public void startElement(String uri, String name, String raw,
Attributes attr) throws SAXException {
- if (xIncludeLevel == 1 && useFallback &&
uri.equals(XINCLUDE_NAMESPACE_URI)
- && name.equals(XINCLUDE_FALLBACK_ELEMENT)) {
- fallbackLevel++;
-
- // don't need these anymore
- useFallback = false;
- fallBackException = null;
-
- return;
- } else if (xIncludeLevel > 0 && fallbackLevel < 1) {
- xIncludeLevel++;
- return;
- }
-
- xmlBaseSupport.startElement(uri, name, raw, attr);
- if (XINCLUDE_INCLUDE_ELEMENT.equals(name) &&
XINCLUDE_NAMESPACE_URI.equals(uri)) {
- String href =
attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE);
- String parse =
attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE);
-
- if (null == parse) parse="xml";
- xIncludeLevel++;
-
- try {
- processXIncludeElement(href, parse);
- } catch (ProcessingException e) {
- getLogger().debug("Rethrowing exception", e);
- throw new SAXException(e);
- } catch (IOException e) {
- getLogger().debug("Rethrowing exception", e);
- throw new SAXException(e);
+ if (uri.equals(XINCLUDE_NAMESPACE_URI)) {
+ if (xIncludeLevel == 1 && useFallback &&
name.equals(XINCLUDE_FALLBACK_ELEMENT)) {
+ fallbackLevel++;
+
+ // don't need these anymore
+ useFallback = false;
+ fallBackException = null;
+
+ return;
+ } else if (xIncludeLevel > 0 && fallbackLevel < 1) {
+ xIncludeLevel++;
+ return;
}
- return;
+
+ xmlBaseSupport.startElement(uri, name, raw, attr);
+ if (XINCLUDE_INCLUDE_ELEMENT.equals(name)) {
+ String href =
attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE);
+ if (href == null) {
+ throw new SAXException(raw + " must have a 'href'
attribute at " + getLocation());
+ }
+
+ String parse =
attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE);
+
+ if (null == parse) parse="xml";
+ xIncludeLevel++;
+
+ try {
+ processXIncludeElement(href, parse);
+ } catch (ProcessingException e) {
+ getLogger().debug("Rethrowing exception", e);
+ throw new SAXException(e);
+ } catch (IOException e) {
+ getLogger().debug("Rethrowing exception", e);
+ throw new SAXException(e);
+ }
+ return;
+ }
+
+ throw new SAXException("Unknown XInclude element " + raw + "
at " + getLocation());
+
+ } else {
+ xmlBaseSupport.startElement(uri, name, raw, attr);
+ super.startElement(uri,name,raw,attr);
}
- super.startElement(uri,name,raw,attr);
}
public void endElement(String uri, String name, String raw) throws
SAXException {
@@ -468,6 +478,14 @@
parent = parent.getParent();
}
return false;
+ }
+
+ private String getLocation() {
+ if (this.locator == null) {
+ return "unknown location";
+ } else {
+ return this.locator.getSystemId() + ":" +
this.locator.getColumnNumber() + ":" + this.locator.getLineNumber();
+ }
}
}
}