Hi all,

As an important side note.  I've run into a serious limitation a few times 
already.

Let me explain shortly what I try to do.

I want to e.g. generate an XML representation of CSV data from an XQuery 
generator.  I borrowed the schema from the CSV generator and dropped some 
attributes which are not useful.

<?xml version="1.0" encoding="ISO-8859-1"?>
<csv:document xmlns:csv="http://apache.org/cocoon/csv/1.0";>
    <csv:header>
        <csv:column>Column A</csv:column>
        <csv:column>Column B</csv:column>
        <csv:column>Column C</csv:column>
    </csv:header>
    <csv:record>
        <csv:field>Field A1</csv:field>
        <csv:field>Field B1</csv:field>
        <csv:field>Field C1</csv:field>
    </csv:record>
    <csv:record>
        <csv:field>Field A2</csv:field>
        <csv:field>Field B2</csv:field>
        <csv:field>Field C2</csv:field>
    </csv:record>
</csv:document>

Next I wrote a XSLT that transforms this into a CSV file.

<?xml version="1.0" encoding="UTF-8"?>
<!--
Author: Robby Pelssers
This stylesheet transforms a CSV xml file into CSV
-->

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:xs="http://www.w3.org/2001/XMLSchema";
  xmlns:fn="http://www.w3.org/2005/xpath-functions";
  xmlns:csv="http://apache.org/cocoon/csv/1.0";>

  <xsl:output method="text"/>

  <xsl:param name="separator" as="xs:string"/>
  <xsl:variable name="new_line" select="'&#xA;'" />

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="csv:document">
    <xsl:apply-templates select="csv:header"/>
    <xsl:apply-templates select="csv:record"/>
  </xsl:template>

  <xsl:template match="csv:header">
    <xsl:value-of select="fn:string-join(csv:column, 
$separator)"/><xsl:value-of select="$new_line" />
  </xsl:template>

  <xsl:template match="csv:record">
    <xsl:value-of select="fn:string-join(csv:field, $separator)"/><xsl:value-of 
select="$new_line" />
  </xsl:template>

</xsl:stylesheet>

To test if it works I wrote a little match pattern:

            <map:match pattern="test_csv_transformer">
              <map:generate src="data/csv_generator_testdata.xml"/>
              <map:transform src="xslt/csv_transformer.xslt" type="saxon">
                <map:parameter name="separator" value="&#x9;"/>
              </map:transform>
              <map:serialize type="text"/>
            </map:match>

And the output works like a charm:
Column A       Column B       Column C
Field A1       Field B1       Field C1
Field A2       Field B2       Field C2

But I wanted to create a reusable transformation service and setup following 
pattern:

            <map:match pattern="csv-transformation-service/*">
              <map:generate src="service-consumer:"/>
              <map:transform src="xslt/csv_transformer.xslt" type="saxon">
                <map:parameter name="separator" value="{1}"/>
              </map:transform>
              <map:serialize type="text"/>
            </map:match>

Unfortunately I can't call this from another cocoon block like e.g.

      <map:match pattern="test-csv-transformer-service">
          <map:generate src="data/csv_generator_testdata.xml"/>
          <map:transform type="servletService">
            <map:parameter name="service" 
value="servlet:shared:/csv-transformation-service/blabla"/>
          </map:transform>
          <map:serialize type="text"/>
      </map:match>


The reason is that only XML is supported evidently.  But is this a requirement 
by design or were such use cases not foreseen?!

Robby


Stacktrace:

2012-05-15 12:33:55.935::INFO:  Started SelectChannelConnector@0.0.0.0:8888
javax.servlet.ServletException: org.apache.cocoon.ProcessingException: Failed 
to process pipeline
                at [SAXParseException] - 
servlet:com.nxp.spider2.shared.service+:/csv-transformation-service/blabla:1:1
                at <map:serialize type="text"> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:354:39
                at <map:transform type="servletService"> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:351:48
                at <map:generate> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:350:64
                at <map:match> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:349:57
                at 
org.apache.cocoon.servlet.RequestProcessor.service(RequestProcessor.java:230)
                at 
org.apache.cocoon.sitemap.SitemapServlet.service(SitemapServlet.java:84)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
                at 
org.apache.cocoon.servletservice.ServletServiceContext$PathDispatcher.forward(ServletServiceContext.java:468)
                at 
org.apache.cocoon.servletservice.ServletServiceContext$PathDispatcher.forward(ServletServiceContext.java:443)
                at 
org.apache.cocoon.servletservice.spring.ServletFactoryBean$ServiceInterceptor.invoke(ServletFactoryBean.java:264)
                at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
                at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
                at $Proxy21.service(Unknown Source)
                at 
org.apache.cocoon.servletservice.DispatcherServlet.service(DispatcherServlet.java:106)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
                at 
org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServlet.service(ReloadingServlet.java:115)
                at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
                at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
                at 
org.apache.cocoon.servlet.multipart.MultipartFilter.doFilter(MultipartFilter.java:131)
                at 
org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServletFilter.doFilter(ReloadingServletFilter.java:66)
                at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
                at 
org.apache.cocoon.servlet.DebugFilter.doFilter(DebugFilter.java:167)
                at 
org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServletFilter.doFilter(ReloadingServletFilter.java:66)
                at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
                at 
org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingSpringFilter.doFilter(ReloadingSpringFilter.java:71)
                at 
org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServletFilter.doFilter(ReloadingServletFilter.java:66)
                at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
                at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
                at 
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
                at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
                at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
                at 
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
                at 
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
                at 
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
                at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
                at org.mortbay.jetty.Server.handle(Server.java:326)
                at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
                at 
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:915)
                at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
                at 
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
                at 
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
                at 
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
                at 
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: org.apache.cocoon.ProcessingException: Failed to process pipeline
                at [SAXParseException] - 
servlet:com.nxp.spider2.shared.service+:/csv-transformation-service/blabla:1:1
                at <map:serialize type="text"> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:354:39
                at <map:transform type="servletService"> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:351:48
                at <map:generate> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:350:64
                at <map:match> - 
file:///C:/development/workspaces/intellij11/CTPI-PX/spider2/search/target/classes/COB-INF/sitemap.xmap:349:57
                at 
org.apache.cocoon.ProcessingException.throwLocated(ProcessingException.java:143)
                at 
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.handleException(AbstractProcessingPipeline.java:923)
                at 
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:379)
                at 
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:439)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                at java.lang.reflect.Method.invoke(Method.java:597)
                at 
org.apache.cocoon.core.container.spring.avalon.PoolableProxyHandler.invoke(PoolableProxyHandler.java:79)
                at $Proxy40.process(Unknown Source)
                at 
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:147)
                at 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:55)
                at 
org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:87)
                at 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:78)
                at 
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
                at 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:78)
                at 
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:81)
                at 
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:239)
                at 
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:171)
                at 
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:247)
                at 
org.apache.cocoon.servlet.RequestProcessor.process(RequestProcessor.java:351)
                at 
org.apache.cocoon.servlet.RequestProcessor.service(RequestProcessor.java:169)
                ... 38 more
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
                at 
org.apache.cocoon.core.xml.impl.JaxpSAXParser.fatalError(JaxpSAXParser.java:275)
                at 
org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
                at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown 
Source)
                at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown 
Source)
                at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown 
Source)
                at 
org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown 
Source)
                at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
                at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
Source)
                at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
Source)
                at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
                at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown 
Source)
                at 
org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
                at 
org.apache.cocoon.core.xml.impl.JaxpSAXParser.parse(JaxpSAXParser.java:196)
                at 
org.apache.cocoon.core.xml.impl.JaxpSAXParser.parse(JaxpSAXParser.java:204)
                at 
org.apache.cocoon.components.source.util.SourceUtil.parse(SourceUtil.java:297)
                at 
org.apache.cocoon.servletservice.postable.components.ServletServiceTransformer.endDocument(ServletServiceTransformer.java:99)
                at 
org.apache.cocoon.components.sax.XMLTeePipe.endDocument(XMLTeePipe.java:71)
                at 
org.apache.xerces.parsers.AbstractSAXParser.endDocument(Unknown Source)
                at 
org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(Unknown Source)
                at org.apache.xerces.impl.XMLEntityManager.endEntity(Unknown 
Source)
                at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
                at org.apache.xerces.impl.XMLEntityScanner.skipSpaces(Unknown 
Source)
                at 
org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(Unknown
 Source)
                at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
                at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
Source)
                at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
Source)
                at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
                at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown 
Source)
                at 
org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
                at 
org.apache.cocoon.core.xml.impl.JaxpSAXParser.parse(JaxpSAXParser.java:196)
                at 
org.apache.cocoon.core.xml.impl.JaxpSAXParser.parse(JaxpSAXParser.java:204)
                at 
org.apache.cocoon.components.source.util.SourceUtil.parse(SourceUtil.java:297)
                at 
org.apache.cocoon.generation.FileGenerator.generate(FileGenerator.java:136)
                at 
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:360)
                ... 57 more
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
                at 
org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown 
Source)
                ... 90 more

Reply via email to