[ 
https://issues.apache.org/jira/browse/FOR-1118?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12636000#action_12636000
 ] 

Thorsten Scherler commented on FOR-1118:
----------------------------------------

Using the StAX implementation of the contract is different for junit in eclipse 
and within forrest.

To test with forrest do the following:
# preparation of forrest
cd $FORREST_HOME/whiteboard 
svn switch https://svn.apache.org/repos/asf/forrest/branches/dispatcher_rewrite
# create a new test seed
cd $TEST_HOME
forrest seed
mv forrest.properties.dispatcher.properties forrest.properties
cd src/documentation/
cp 
$FORREST_HOME/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/testing/org/apache/forrest/dispatcher/m2.contract.xml
 .
cp 
$FORREST_HOME/whiteboard/plugins/org.apache.forrest.plugin.internal.dispatcher/src/testing/org/apache/forrest/dispatcher/master.structurer.xml
 .
vi sitemap.xmap
# add the following as child of map:components
<map:transformers>
      <map:transformer name="dispatcher"
        
src="org.apache.forrest.dispatcher.transformation.DispatcherTransformer">
        <!--+
        |  If you want to use inline xml for contract properties be aware that 
setting 
        | this properties to true will have negative influence on performance 
since 
        | this feature needs to use DOM parsing!
        |
        | We strongly recommend to rewrite your contracts and structurer to use 
simple 
        | string for the properties.
        |   
        | The default is set to "false".
        +-->
        <!--<allowXml>true</allowXml>-->
        
        <!--+
        |  If you want to change the uri prefix of the contracts. 
        | This may be interesting if you work with a contract repository rather 
then
        | with the ones from the themer plugin. 
        |  
        | The default is "cocoon://resolve.contract".
        +-->
        <!--<contractUriPrefix>cocoon://resolve.contract</contractUriPrefix>-->
        
        <!--+
        |  You can use either limited of full xpath support for the injection 
of contract 
        | result data. We currently provide the basic support with a plain StAX 
implementation
        | and the enhanced support with AXIOM.
        |  
        | The default is "basic".
        +-->
        <!--<xpathSupport>enhanced</xpathSupport>-->
      </map:transformer>
    </map:transformers>

# and the following as child of map:pipeline
    <map:match pattern="test">
      <map:generate src="master.structurer.xml"/>
      <map:transform type="dispatcher">
        <map:parameter name="request" value="{0}" />
        <map:parameter name="type" value="html" />
      </map:transform>
      <map:serialize type="xml"/>
    </map:match>
    <map:match pattern="resolve.contract*">
      <map:generate src="m2.contract.xml"/>
      <map:serialize type="xml"/>
    </map:match>

As you see we are using the exact same files as in junit testing, however the 
result is not the same.

If you now start your $TEXT_HOME with forrest run and request 
http://localhost:8888/test you will get an error.

The command line will tell you:
"SystemId Unknown; Line #4; Column #85; xsl:param is not allowed in this 
position in the stylesheet!
[Fatal Error] :6:26: The prefix "forrest" for element "forrest:content" is not 
bound.
SystemId Unknown; Line #6; Column #26; org.xml.sax.SAXParseException: The 
prefix "forrest" for element "forrest:content" is not bound."

In junit all tests of both TestStructurer and TestContract are running fine and 
do not present the above error.

I tracked down the problem to XSLContractHelper#processTemplate(XMLStreamReader 
reader). Here is an important difference between the junit and cocoon test. 

If you change in the above method the following
+  System.out.println(out.toString());
-   log.debug(out.toString());

You will see for JUNIT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
      <xsl:param name="test-inline" select="'No parameter has been passed'" />
      <xsl:param name="test-inline-xml" select="'No xml parameter has been 
passed'" />
      <xsl:template match="/">
        <forrest:content 
xmlns:forrest="http://apache.org/forrest/templates/2.0";>
          <forrest:part>
            Another test! $test-inline:
            <xsl:value-of select="$test-inline" />
            $test-inline-xml:
            <xsl:copy-of select="$test-inline-xml" />
          </forrest:part>
          <forrest:part xpath="/html/head">
            <meta content="m2 - another test" name="Description" />
          </forrest:part>
        </forrest:content>
      </xsl:template>
    </xsl:stylesheet>

and in FORREST
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
      <xsl:param name="test-inline" select="'No parameter has been passed'" />
      <xsl:param name="test-inline-xml" select="'No xml parameter has been 
passed'" />
      <xsl:template match="/">
        <forrest:content>
          <forrest:part>
            Another test! $test-inline:
            <xsl:value-of select="$test-inline" />
            $test-inline-xml:
            <xsl:copy-of select="$test-inline-xml" />
          </forrest:part>
          <forrest:part xpath="/html/head">
            <meta content="m2 - another test" name="Description" />
          </forrest:part>
        </forrest:content>
      </xsl:template>
    </xsl:stylesheet>

At the first look that seems to be the same but one important change is:
<forrest:content xmlns:forrest="http://apache.org/forrest/templates/2.0";>
in the cocooon env we are eating the xmlns.

That is really weird since the code supposed to use the same time the same stax 
implementation (woodstox).

> Dispatcher 1.0 - towards a stable version
> -----------------------------------------
>
>                 Key: FOR-1118
>                 URL: https://issues.apache.org/jira/browse/FOR-1118
>             Project: Forrest
>          Issue Type: Improvement
>          Components: Plugin: internal.dispatcher
>            Reporter: Thorsten Scherler
>
> The current version of the dispatcher has some points for enhancement this 
> issue is to keep track of the changes.
> The work is conducted in 
> https://svn.apache.org/repos/asf/forrest/branches/dispatcher_rewrite which is 
> based on trunk r700363 forrest/whiteboard.
> The thread "Dispatcher 1.0 - towards a stable version"
> http://markmail.org/message/nm6etnhg4nuhm2kl has pointed out:
> - performance issues due to DOM usage in the current implementation and code 
> readability 
> --> 1.0 will provide two implementations pure StAX and AXIOM (OM StAX) 
> --> 1.0 will provide a cocoon transformer that can use either one of the
> above implementation 
> - documentation 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.