forrest-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thorsten Scherler (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FOR-1118) Dispatcher 1.0 - towards a stable version
Date Wed, 01 Oct 2008 11:09:44 GMT

    [ 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.


Mime
View raw message