Scratchpad component
A ModulSource
reads from streams and strings found by using an input module. It can among other things replace the StreamGenerator
and the PartSource
.
Readable source that are accessed with URI:s like:
Wiki Markup |
---|
{{module:<input-module>:<attribute-name>\[#xpath\]}} |
For reading the object that is found by applying the XPath (JXPath
), on the attribute from the input-module. If the object is a String
or an InputStream
, it made available in form of an InputStream
otherwise an exception is thrown.
The module source can be used for various things e.g. instead of the
StreamGenerator
:
<map:generate type="file" src="module:request:inputStream"/>
For reading html from a input field in a form:
<map:generate type="html" src="module:request-param:html-field"/>
Instead of the PartSource
for reading multi part mime data:
module:raw-request-param:foo
To use this uploads must be enabled in web.xml.
It can also be used for more advanced things like reading Wiki content from a textarea
No Format |
---|
<map:generate type="text" src="module:request-param:wiki-field"/> <map:transform type="lexer" src="cocoon:/wiki.xlex"/> <map:transform type="parser" src="cocoon:/wiki.xgrm"/> <map:transform src="stylesheets/wiki2xdoc.xsl"/> |
I didn't made the module source modifiable as I had no clear use cases for it, nor was it obvious to me in what form to save the input.
Relation to other Cocoon components
StreamGenerator
The StreamGenerator can generate xml from the request input stream or from xml in request parameters, these cases can be replaced by:
<map:generate type="file" src="module:request:inputStream"/>
and
<map:generate type="file" src="module:request-param:form-name"/>
respectively.
There are no downsides of replacing the StreamGenerator
that I know of. On the upside reading is not limited to XML anymore, and the source can be used in [[C|X]IncludeTransformer
and flowscripts as well, and also read from other places than the request parameters and input stream.
PartSource
For PartSource
the URI:
upload://formField1
can be replaced by:
module:raw-request-param:formField1
the mime type and content length will not be given from the module source though. I don't know if there are use cases where this information is necessary.