> 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