> 3. Maybe I could use some sort of custom URL protocol manager like the
> cocoon:/ and resource:/? Is it possible to supply new instances of these?
>
> 4. Or I could use my URI resolvers again? Is it possible to set Custom URI
> solvers in C2

i have found two ways to accomplish this, but it took some time to find out,
mostly because this is not very well documented yet... ok here we go:

in the "cocoon.xconf" file there is a "source-handler" entry, you can create
own protocols here:

<source-handler>
        <protocol name="cool"
class="org.apache.cocoon.components.source.CoolSourceFactory"/>
</source-handler>

then you will have to create two classes called
"org.apache.cocoon.components.source.CoolSourceFactory" and
"org.apache.cocoon.components.source.CoolSource". they will have to
implement "org.apache.cocoon.components.source.SourceFactory" and
"org.apache.cocoon.environment.Source". Where the "CoolSourceFactory"
resolves urls with cool:/some/thing.xml and creates a "CoolSource" for it.
now you can refere to "cool:/some/thing.xml" many places in your project.

BUT this didn't work for me because the
"org.apache.cocoon.environment.Source" interface expects a
org.xml.sax.InputSource and it delivers a characterstream or bytestream
back, and i had a sax/dom source and i didn't want to serialize it to text
to get it parsed again... so i snooped around some more and found this:


again in your "cocoon.xconf" there is an entry for your default transformer.
i hacked mine like this:

<xslt-processor
class="org.apache.cocoon.components.xslt.KarlsXSLTProcessorImpl"
logger="root.xslt">
        <parameter name="use-store" value="true"/>
        <parameter name="incremental-processing" value="false"/>
</xslt-processor>


then i created a class "called
org.apache.cocoon.components.xslt.KarlsXSLTProcessorImpl" containing this
(please not that i had to create it in the org.apache.cocoon.components.xslt
package to be allowed to extend XSLTProcessorImpl) :


public class XonataXSLTProcessorImpl extends XSLTProcessorImpl {
        public javax.xml.transform.Source resolve(String href, String base) throws
TransformerException {
                if (!href.startsWith("karl:")) {
                        return super.resolve(href,base);
                        }
                else {
                        SAXSource source = new SAXSource( ... );
                        or
                        DOMSource source = new DOMSource( ... );
                        or
                        StreamSource source = new StreamSource( ... );
                        return source;
                        }
                }
        }

this way i can respond and create any SAX/DOM/Stream source for any protocol
for the transformer, and i can use "document('rmi://myserver/mydatachunk')"
in my xsl documents. this does not replace a generator thou....


i would be happy if anyone could tell me if there is an easier way to create
protocol handlers that can deliver SAX or DOM and not only Stream.



mvh karl řie


---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>

Reply via email to