in core/cocoon-core/src/main/java/org/apache/cocoon/transformation/CIncludeTransformer.java [341:472]
public void endTransformingElement(String uri, String name, String raw)
throws ProcessingException, IOException, SAXException {
if (name.equals(CINCLUDE_INCLUDE_ELEMENT)) {
// do nothing
return;
} else if (name.equals(CINCLUDE_INCLUDEXML_ELEMENT)
&& this.state == STATE_INCLUDE) {
// Element: includexml
this.state = STATE_OUTSIDE;
final String resource = (String)stack.pop();
final boolean ignoreErrors = stack.pop().equals("true");
if (getLogger().isDebugEnabled()) {
getLogger().debug("Processing includexml element: src=" + resource
+ ", ignoreErrors=" + ignoreErrors
+ ", configuration=" + this.configurationParameters
+ ", parameters=" + this.resourceParameters);
}
Source source = null;
try {
source = SourceUtil.getSource(resource,
this.configurationParameters,
this.resourceParameters,
this.resolver);
XMLByteStreamCompiler serializer;
XMLByteStreamInterpreter deserializer;
try {
if ( ignoreErrors ) {
serializer = new XMLByteStreamCompiler();
deserializer = new XMLByteStreamInterpreter();
SourceUtil.toSAX(source, serializer, this.configurationParameters, true);
deserializer.setConsumer( this.xmlConsumer );
deserializer.deserialize( serializer.getSAXFragment() );
} else {
SourceUtil.toSAX(source, this.xmlConsumer, this.configurationParameters, true);
}
} catch (ProcessingException pe) {
if (!ignoreErrors) {
throw pe;
}
}
} catch (SourceException se) {
if (!ignoreErrors) throw SourceUtil.handle(se);
} catch (SAXException se) {
if (!ignoreErrors) {
throw se;
}
} catch (IOException ioe) {
if (!ignoreErrors) {
throw ioe;
}
} finally {
this.resolver.release(source);
}
// restore values
this.ignoreWhitespaces = ((Boolean)stack.pop()).booleanValue();
this.ignoreEmptyCharacters = ((Boolean)stack.pop()).booleanValue();
// src element
} else if (name.equals(CINCLUDE_SRC_ELEMENT)
&& this.state == STATE_INCLUDE) {
this.stack.push(this.endTextRecording());
} else if (name.equals(CINCLUDE_PARAMETERS_ELEMENT)
&& this.state == STATE_INCLUDE) {
this.resourceParameters = new SourceParameters();
// Now get the parameters off the stack
String label = (String)stack.pop();
String key = null;
String value = null;
while (!label.equals("end")) {
if (label.equals("name")) key = (String)stack.pop();
if (label.equals("value")) value = (String)stack.pop();
if (key != null && value != null) {
this.resourceParameters.setParameter(key, value);
key = null;
value = null;
}
label = (String)stack.pop();
}
} else if (name.equals(CINCLUDE_CONFIGURATION_ELEMENT) == true
&& this.state == STATE_INCLUDE) {
this.configurationParameters = new Parameters();
// Now get the parameters off the stack
String label = (String)stack.pop();
String key = null;
String value = null;
while (!label.equals("end")) {
if (label.equals("name")) key = (String)stack.pop();
if (label.equals("value")) value = (String)stack.pop();
if (key != null && value != null) {
this.configurationParameters.setParameter(key, value);
key = null;
value = null;
}
label = (String)stack.pop();
}
} else if (name.equals(CINCLUDE_PARAMETER_ELEMENT) == true
&& this.state == STATE_INCLUDE) {
} else if (name.equals(CINCLUDE_NAME_ELEMENT) == true
&& this.state == STATE_INCLUDE) {
stack.push(this.endTextRecording());
stack.push("name");
// parameter value
} else if (name.equals(CINCLUDE_VALUE_ELEMENT) == true
&& this.state == STATE_INCLUDE) {
stack.push(this.endSerializedXMLRecording());
stack.push("value");
} else if (name.equals(CINCLUDE_CACHED_INCLUDE_ELEMENT)) {
if (this.compiling) {
super.endTransformingElement(uri,
CINCLUDE_CACHED_INCLUDE_PLACEHOLDER_ELEMENT,
raw + "p");
}
// do nothing else
} else {
super.endTransformingElement(uri, name, raw);
}
}