You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by iv...@apache.org on 2002/07/04 22:57:48 UTC

cvs commit: xml-cocoon2/src/webapp/samples/xmlform/wizard confirm.xml deployment.xml end.xml start.xml system.xml userIdentity.xml

ivelin      2002/07/04 13:57:48

  Modified:    src/java/org/apache/cocoon/acting AbstractXMLFormAction.java
               src/java/org/apache/cocoon/components/xmlform Form.java
               src/java/org/apache/cocoon/samples/xmlform WizardAction.java
               src/webapp/WEB-INF/db cocoondb.backup cocoondb.data
                        cocoondb.properties
               src/webapp/samples samples.xml
               src/webapp/samples/xmlform sitemap.xmap
               src/webapp/samples/xmlform/stylesheets wizard2html.xsl
               src/webapp/samples/xmlform/wizard confirm.xml deployment.xml
                        end.xml start.xml system.xml userIdentity.xml
  Added:       src/java/org/apache/cocoon/generation
                        WebServiceProxyGenerator.java
               src/webapp/samples/webserviceproxy README.txt sitemap.xmap
  Log:
  WebServiceProxyGenerator combined with the XMLForm framework and XSLT, allows vendors to share interactive content with little effort.
  
  Revision  Changes    Path
  1.3       +7 -7      xml-cocoon2/src/java/org/apache/cocoon/acting/AbstractXMLFormAction.java
  
  Index: AbstractXMLFormAction.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/acting/AbstractXMLFormAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractXMLFormAction.java	13 Jun 2002 09:28:14 -0000	1.2
  +++ AbstractXMLFormAction.java	4 Jul 2002 20:57:47 -0000	1.3
  @@ -196,15 +196,15 @@
         // find and save the action command
         findCommand();
   
  -      // ensure that there is a form available
  -      // through the rest of the flow
  -      Form form = getForm();
  -
         // call the subclass prepare()
         // give it a chance to get ready for action
         Map prepareResult = prepare();
         if ( prepareResult != null ) return prepareResult;
   
  +      // ensure that there is a form available
  +      // through the rest of the flow
  +      Form form = getForm();
  +      
         // populate form with request parameters
         // population is automatically followed by validation by default.
         // If this is not the desired behaviour, the Form class can be subclassed
  
  
  
  1.4       +7 -5      xml-cocoon2/src/java/org/apache/cocoon/components/xmlform/Form.java
  
  Index: Form.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/xmlform/Form.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Form.java	13 Jun 2002 02:35:04 -0000	1.3
  +++ Form.java	4 Jul 2002 20:57:47 -0000	1.4
  @@ -505,7 +505,9 @@
       */
       protected boolean filterDefaultRequestParameter( String paramName )
       {
  -      if ( paramName.startsWith ( Constants.ACTION_PARAM_PREFIX ) ) 
  +      if ( paramName.startsWith ( Constants.ACTION_PARAM_PREFIX ) 
  +        || paramName.startsWith ( Constants.VIEW_PARAM ) 
  +        ) 
           return true;
         if ( paramName.equals ( FORM_VIEW_PARAM ) ) 
           return true;
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/WebServiceProxyGenerator.java
  
  Index: WebServiceProxyGenerator.java
  ===================================================================
  /*
    
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
   
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
   
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
   
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
   
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
   
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
   
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      apache@apache.org.
   
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
   
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
   
   */
  package org.apache.cocoon.generation; 
  
  import org.apache.cocoon.ProcessingException;
  import org.apache.cocoon.ResourceNotFoundException;
  import org.apache.cocoon.caching.CacheableProcessingComponent;
  import org.apache.cocoon.components.source.SourceUtil;
  import org.apache.cocoon.environment.ObjectModelHelper;
  import org.apache.cocoon.environment.Request;
  import org.apache.cocoon.environment.Session;
  import org.apache.cocoon.environment.SourceResolver;
  import org.apache.cocoon.xml.dom.DOMStreamer;
  import org.apache.cocoon.xml.XMLUtils;
  import org.apache.excalibur.source.Source;
  import org.apache.excalibur.source.SourceException;
  import org.apache.avalon.framework.parameters.Parameters;
  import org.apache.avalon.excalibur.xml.Parser;
  import org.apache.avalon.framework.component.ComponentException;
  import org.w3c.dom.NodeList;
  import org.xml.sax.SAXException;
  import org.xml.sax.InputSource;
  
  // HttpClient imports
  import org.apache.commons.httpclient.Header;
  import org.apache.commons.httpclient.HttpMultiClient;
  import org.apache.commons.httpclient.HttpConnection;
  import org.apache.commons.httpclient.HttpState;
  import org.apache.commons.httpclient.methods.UrlGetMethod;
  import org.apache.commons.httpclient.NameValuePair;
  
  
  import javax.xml.transform.OutputKeys;
  import javax.xml.transform.Transformer;
  import javax.xml.transform.TransformerFactory;
  import javax.xml.transform.dom.DOMSource;
  import javax.xml.transform.sax.SAXResult;
  
  import java.io.BufferedInputStream;
  import java.io.StringWriter;
  import java.io.PrintWriter;
  import java.io.IOException;
  import java.io.StringReader;
  import java.util.Enumeration;
  import java.util.Map;
  import java.util.ArrayList;
  
  /**
   *
   *  The WebServiceProxyGenerator is intended to:
   *
   * 1) Allow easy syndication of dynamic interactive content as a natural extension of the currently popular static content syndication with RSS.
   *
   * 2) Allow transparent routing of web service request through GET, POST, SOAP-RPC and SOAP-DOC binding methods.
   *
   * 3) Allow almost full control through sitemap configuration.
   *
   * 4) Allow use of Cocoon components for content formatting, aggregation and styling through a tight integration with the Cocoon sitemap.
   *
   * 5) Require 0 (zero) lines of Java or other business logic code in most cases.
   *
   * 6) Be generic and flexible enough to allow custom extensions for advanced and non-typical uses.
   *
   * 7) Support sessions, authentication, http 1.1, https,  request manipulation, redirects following, connection pooling, and others.
   *
   * 8) Use the Jakarta HttpClient library which provides many sophisticated features for HTTP connections.
   *
   * 9) (TBD) Use Axis for SOAP-RPC and SOAP-DOC bindings.
   *
   *
   * @author <a href="mailto:ivelin@apache.org">Ivelin Ivanov</a>, June 30, 2002
   */
  public class WebServiceProxyGenerator extends ComposerGenerator
  {
    
    
    /**
     * Setup the WSP generator.
     *
     */
    public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
    throws ProcessingException, SAXException, IOException
    {
      super.setup(resolver, objectModel, src, par);
      
      try {
          Source inputSource = resolver.resolveURI(super.source);
          this.source = inputSource.getSystemId();
      } catch (SourceException se) {
          throw SourceUtil.handle("Unable to resolve " + super.source, se);
      }    
       
      httpClient = getHttpClient();
      
    }
    
    
    /**
     * Recycle this component.
     * All instance variables are set to <code>null</code>.
     */
    public void recycle()
    {
      httpClient = null;
      
      super.recycle();
    }
    
    
    /**
     * Generate XML data.
     */
    public void generate()
      throws IOException, SAXException, ProcessingException
    {
      Parser parser = null;
      try 
      {
        if (this.getLogger().isDebugEnabled()) {
            this.getLogger().debug("processing Web Service request:  " + this.source );
        }
  
        // forward request and bring response back
        String remoteResponseXml = fetch();
  
        InputSource inputSource = new InputSource(new StringReader( remoteResponseXml ));
  
        if (getLogger().isDebugEnabled()) {
            getLogger().debug( "processing Web Service Response " + remoteResponseXml );
        }
  
        parser = (Parser)this.manager.lookup(Parser.ROLE);
        parser.parse(inputSource, super.xmlConsumer);
          
      } 
      catch (ComponentException ex)
      {
        throw new ProcessingException( "WebServiceProxyGenerator.generate() error", ex);
      }
      finally 
      {
          this.manager.release(parser);
      }
      
    } // generate
    
    
    /**
     *
     * Forward the request and return the response
     *
     * Will use an UrlGetMethod to benefit the cacheing mechanism
     * and intermediate proxy servers.
     * It is potentially possible that the size of the request
     * may grow beyond a certain limit for GET and it will require POST instead.
     *
     * @return String XML response
     *
     */
    public String fetch() throws ProcessingException
    {
      try
      {
  
        UrlGetMethod method = new UrlGetMethod( this.source );
  
        method.setUseDisk(false);
  
        // this should probably be exposed as a sitemap option
        method.setFollowRedirects( true );
  
        // copy request parameters and merge with URL parameters
        Request request = ObjectModelHelper.getRequest( objectModel );
  
        
        ArrayList paramList = new ArrayList();
        Enumeration enum = request.getParameterNames();
        while ( enum.hasMoreElements() )
        {
          String pname = (String)enum.nextElement();
          String[] paramsForName = request.getParameterValues( pname );
          for (int i = 0; i < paramsForName.length; i++)
          {
            NameValuePair pair = 
              new NameValuePair( pname, paramsForName[i] );
            paramList.add( pair );
          }
        }
  
        if ( paramList.size() > 0 )
        {
          NameValuePair[] allSubmitParams = 
            new NameValuePair[ paramList.size() ];
          paramList.toArray( allSubmitParams );
  
          String urlQryString = method.getQueryString();
  
          // use HttpClient encoding routines
          method.setQueryString( allSubmitParams );
          String submitQryString = method.getQueryString();
  
          // set final web service query string 
          method.setQueryString( urlQryString + "&" + submitQryString );
        } // if there are submit parameters 
  
        httpClient.executeMethod( method );
  
        String ret = method.getResponseBodyAsString();
  
        int startOfXML = ret.indexOf("<?xml");
        if (startOfXML == -1)
        { // No xml?!
          throw new ProcessingException("Invalid response - no xml");
        }
  
        ret.substring(startOfXML);
  
        return ret;
  
      } catch (Exception ex)
      {
        throw new ProcessingException("Error invoking remote service: " + ex,
        ex);
      }
    } // fetch
  
  
  /**
   * Create once per client session and
   * consequetively return an HttpMultiClient
   *
   */
  protected HttpMultiClient getHttpClient()
  {
    Request request = ObjectModelHelper.getRequest( objectModel );
    Session session = request.getSession( true );
    HttpMultiClient httpClient = null;
    if (session != null)
    {
      httpClient = (HttpMultiClient) session.getAttribute( HTTP_CLIENT );
    }
    if (httpClient == null)
    {
      httpClient = new HttpMultiClient();
      
      if (System.getProperty("http.proxyHost") != null)
      {
        String proxyHost = System.getProperty("http.proxyHost");
        int proxyPort = Integer.parseInt(System.getProperty("http.proxyPort"));
        
        httpClient.setProxyHost( proxyHost );
        httpClient.setProxyPort( proxyPort );
      }
      
      session.setAttribute( HTTP_CLIENT, httpClient );
    }
    return httpClient;
  }
  
  // private attributes section
  private static String HTTP_CLIENT = "HTTP_CLIENT";
  private HttpMultiClient httpClient;
  
  } // class
  
  
  
  1.5       +9 -9      xml-cocoon2/src/java/org/apache/cocoon/samples/xmlform/WizardAction.java
  
  Index: WizardAction.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/samples/xmlform/WizardAction.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- WizardAction.java	22 Jun 2002 20:33:06 -0000	1.4
  +++ WizardAction.java	4 Jul 2002 20:57:47 -0000	1.5
  @@ -126,12 +126,7 @@
           // initial link
           return page( VIEW_START );
         }
  -    else if ( Form.lookup ( getObjectModel(), getFormId() ) == null)
  -      {
  -        // session expired
  -        return page( VIEW_START );
  -      }
  -    else   if ( getCommand().equals( CMD_START ) )
  +    else if ( getCommand().equals( CMD_START ) )
       {
         // reset state by removing old form
         // if one exists
  @@ -140,6 +135,11 @@
   
         return page( VIEW_USERID );
       }
  +    else if ( Form.lookup ( getObjectModel(), getFormId() ) == null)
  +      {
  +        // session expired
  +        return page( VIEW_START );
  +      }
   
   
       // get ready for action
  
  
  
  1.4       +2 -1      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.backup
  
  	<<Binary file>>
  
  
  1.6       +1 -1      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.data
  
  	<<Binary file>>
  
  
  1.7       +1 -1      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.properties
  
  Index: cocoondb.properties
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.properties,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- cocoondb.properties	2 Jun 2002 03:33:35 -0000	1.6
  +++ cocoondb.properties	4 Jul 2002 20:57:47 -0000	1.7
  @@ -1,4 +1,4 @@
   #HSQL database
  -#Sat Jun 01 22:28:33 CDT 2002
  +#Thu Jul 04 15:52:54 CDT 2002
   version=1.6
   modified=yes
  
  
  
  1.15      +9 -1      xml-cocoon2/src/webapp/samples/samples.xml
  
  Index: samples.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/samples.xml,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- samples.xml	2 Jul 2002 14:22:11 -0000	1.14
  +++ samples.xml	4 Jul 2002 20:57:47 -0000	1.15
  @@ -82,6 +82,14 @@
      </sample>
     </group>
     
  +  <group name="Remote Web Site Integration">
  +   <sample name="Examples" href="webserviceproxy/">
  +    Demonstrates how to embed One Web Site in Another.
  +    Using the WebServiceProxyGenerator remote web app
  +    integration is easy.
  +   </sample>
  +  </group>
  +
     <group name="Internationalization &amp; Localization">
      <sample name="i18n samples" href="i18n/">
       Internationalization with Cocoon
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/webserviceproxy/README.txt
  
  Index: README.txt
  ===================================================================
  ------------------------------------------------------------------------
  
  The WebServiceProxyGenerator is intended to allow one 
  Web Site to Embed Another Web Site's presentation and logic.
  It is an extension of the popular RSS based content syndication. 
  
  
  Requirements:
  
  1) Easy syndication of interactive content.  
  
  2) Transparent routing of web service request through GET, POST, SOAP-RPC and SOAP-DOC binding methods.
  
  3) Near complete control only through sitemap configuration.
  
  4) Reuse of Cocoon components for content formatting, aggregation and styling through a tight integration with the Cocoon sitemap.
  
  5) Require 0 (zero) lines of Java or other business logic code in most cases.
  
  6) Be generic and flexible enough to allow custom extensions for advanced and non-typical uses.
  
  7) Support sessions, authentication, http 1.1, https,  request manipulation, redirects following, connection pooling, and others.
  
  8) Use the Jakarta HttpClient library which provides many sophisticated features for HTTP connections.
  
  9) (TBD) Use Axis for SOAP-RPC and SOAP-DOC bindings.
  
  
  ------------------------------------------------------------------------
  Example I: Integration of the Amazon book search service in a Cocoon portal:
  ------------------------------------------------------------------------
  
  pipeline:
  ---------
  
      <map:pipeline>
        <map:match pattern="amazon/searchform">
            <map:generate src="AmazonForm.xml"/>
            <map:transform src="AmazonForm2html.xsl"/>
            <map:transform src="context://stylesheets/xmlform/xmlform2html.xsl"/>
            <map:serialize type="html"/>
          </map:act>
        </map:match>  
  
        <map:match pattern="amazon/search*">
  
            <map:generate type="wsproxy" src="http://rcm.amazon.com/e/cm{1}">
                <!-- The WebSericeProxy generator takes 3 arguments: -->
                <!-- 1) The URL of the targeted web service -->
                <!-- 2) The binding method: GET, POST, SOAP-RPC or SOAP-DOC -->
                <!-- 3) Optionally, name of the session to the remote service, which allows scoping and grouping between different sitemap sections. -->
                <!-- Only 1) is required. 2) and 3) are optional and should not be used for most applications -->
                <map:parameter name="wsproxy-method" value="GET"/>
                <map:parameter name="wsproxy-session" value="myAmazonSession"/>
            </map:generate>
  
            <map:transform src="amazonform2html.xsl"/>
            <map:transform src="context://stylesheets/xmlform/xmlform2html.xsl"/>
            <map:serialize type="html"/>
          </map:act>
        </map:match>  
      </map:pipeline>
  
  
  AmazonForm.xml:
  ---------------
  
  <?xml version="1.0" ?>
  <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002">
    <xf:form id="form-amazon" view="search" action="amazon/search?t=myAmazonId-02-20&l=st1&mode=books&p=102&o=1&f=xml">
      <xf:caption>Amazon book search by keyword</xf:caption>    
      <xf:textbox ref="search">
          <xf:caption>Keywords</xf:caption>
      </xf:textbox>       
      <xf:submit id="submit" class="button">
        <xf:caption>Submit</xf:caption>
      </xf:submit>
    </xf:form>
  </document>
  
  
  ------------------------------------------------------------------------
  Example II: Even more interesting. 
  Integration with an interactive web service - the Cocoon FeedBack Wizard. 
  Notice that it is actually simpler to integrate with an interactive 
  service then a "single call" based one, because WebServiceProxy supports sessions !
  ------------------------------------------------------------------------
  
      <map:pipeline>
        <map:match pattern="RemoteWizard/*">
          <map:generate type="wsproxy" src="http://remotehost:8080/cocoon/samples/xmlform/{1}">
              <map:parameter name="wsproxy-method" value="POST"/>
              <map:parameter name="wsproxy-session" value="myFeedbackWizardSession"/>
          </map:generate>
          <map:transform src="myNewStyle-wizard2html.xsl"/>
          <map:transform src="context://stylesheets/xmlform/xmlform2html.xsl"/>
          <map:serialize type="html"/>
        </map:match>  
      </map:pipeline>
  
  
  
  ------------------------------------------------------------------------
  End of file
  ------------------------------------------------------------------------
  
  
  -- 
  
  -= Ivelin =-
  
  
  
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/webserviceproxy/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  <?xml version="1.0"?>
  <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  
    <!-- =========================== Components ================================ -->
    <map:components> 
      <map:generators default="file">
        <map:generator name="wsproxy" src="org.apache.cocoon.generation.WebServiceProxyGenerator" logger="webapp.wsproxy"/>
      </map:generators>
    </map:components>
  
    
    <!-- =========================== Views =================================== -->
  
    <map:views>
      <map:view name="xml" from-label="xml">
        <map:serialize type="xml"/>
      </map:view>
    </map:views>
    
    <!-- =========================== Pipelines ================================= -->
    <map:pipelines> 
      <map:pipeline>
  
        <!-- Interactive Web Application Syndication  -->
        <map:match pattern="*">
          <map:generate type="wsproxy" 
            src="http://{header:host}/cocoon/samples/xmlform/wizard?cocoon-view=xml"
            label="xml"/>
          <map:transform src="stylesheets/newWizard2html.xsl" />
          <map:transform src="context://samples/stylesheets/xmlform/xmlform2html.xsl"/>
          <map:serialize type="html"/>
        </map:match>  
      </map:pipeline>
    </map:pipelines> 
  </map:sitemap>
  <!-- end of file -->
  
  
  
  
  1.6       +9 -6      xml-cocoon2/src/webapp/samples/xmlform/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/sitemap.xmap,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- sitemap.xmap	4 Jul 2002 05:20:44 -0000	1.5
  +++ sitemap.xmap	4 Jul 2002 20:57:47 -0000	1.6
  @@ -27,11 +27,14 @@
     transformers to understand each processing
     stage better.
   -->
  - <map:views>
  +<map:views>
     <map:view name="debug" from-label="debug">
  -   <map:serialize type="xml"/>
  +    <map:serialize type="xml"/>
     </map:view>
  - </map:views>
  +  <map:view name="xml" from-label="xml">
  +    <map:serialize type="xml"/>
  +  </map:view>
  +</map:views>
   
     <!-- =========================== Resources ================================= -->
   
  @@ -52,7 +55,7 @@
         </map:match>
   
         <!-- A non-trivial example - Feedback Wizard -->
  -      <map:match pattern="wizard.html">
  +      <map:match pattern="wizard*">
           <map:act type="WizardAction">
   
             <!-- XMLForm parameters for the AbstractXMLFormAction -->
  @@ -64,10 +67,10 @@
   
             <!-- Content transformation logic -->
             <map:generate src="wizard/{page}.xml"/>
  -          <map:transform type="xmlform"  label="debug"/>
  +          <map:transform type="xmlform"  label="debug, xml"/>
             <map:transform src="stylesheets/wizard2html.xsl" />
             <map:transform src="context://samples/stylesheets/xmlform/xmlform2html.xsl"/>
  -          <map:serialize type="html"/>
  +          <map:serialize type="xhtml"/>
           </map:act>
         </map:match>  
       </map:pipeline>
  
  
  
  1.4       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/stylesheets/wizard2html.xsl
  
  Index: wizard2html.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/stylesheets/wizard2html.xsl,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- wizard2html.xsl	8 Jun 2002 20:02:47 -0000	1.3
  +++ wizard2html.xsl	4 Jul 2002 20:57:48 -0000	1.4
  @@ -26,7 +26,7 @@
   				<![CDATA[
                 H1{font-family : sans-serif,Arial,Tahoma;color : white;background-color : #0086b2;} 
                 BODY{font-family : sans-serif,Arial,Tahoma;color : black;background-color : white;} 
  -              B{color : white;background-color : #0086b2;} 
  +              B{color : white;background-color : yellow;} 
                 HR{color : #0086b2;}
                 input { background-color: #FFFFFF; color: #000099; border: 1px solid #0000FF; }		
                 table { background-color: #EEEEEE; color: #000099; font-size: x-small; border: 2px solid brown;}
  
  
  
  1.3       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/confirm.xml
  
  Index: confirm.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/confirm.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- confirm.xml	2 Jun 2002 03:33:35 -0000	1.2
  +++ confirm.xml	4 Jul 2002 20:57:48 -0000	1.3
  @@ -12,7 +12,7 @@
   <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002">
   
   
  -  <xf:form id="form-feedback" view="confirm" action="wizard.html">
  +  <xf:form id="form-feedback" view="confirm" action="wizard">
   
     
       <xf:caption>Confirm Input</xf:caption>    
  
  
  
  1.3       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/deployment.xml
  
  Index: deployment.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/deployment.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- deployment.xml	30 Jun 2002 17:00:45 -0000	1.2
  +++ deployment.xml	4 Jul 2002 20:57:48 -0000	1.3
  @@ -13,7 +13,7 @@
   
   <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002">
   
  -  <xf:form id="form-feedback" view="deployment" action="wizard.html" method="GET">
  +  <xf:form id="form-feedback" view="deployment" action="wizard" method="GET">
   
       <xf:caption>Cocoon Deployment Information</xf:caption>    
   
  
  
  
  1.2       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/end.xml
  
  Index: end.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/end.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- end.xml	20 May 2002 13:33:50 -0000	1.1
  +++ end.xml	4 Jul 2002 20:57:48 -0000	1.2
  @@ -21,7 +21,7 @@
           <tr>
               <td align="center">
                   <h3>
  -                    <a href="wizard.html">Go to home page.</a>
  +                    <a href="wizard">Go to home page.</a>
                   </h3>
               </td>
           </tr>
  
  
  
  1.3       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/start.xml
  
  Index: start.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/start.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- start.xml	17 Jun 2002 09:11:07 -0000	1.2
  +++ start.xml	4 Jul 2002 20:57:48 -0000	1.3
  @@ -28,7 +28,7 @@
           <tr>
               <td align="center">
                   <h3>
  -                    <a href="wizard.html?cocoon-action-start=true">
  +                    <a href="wizard?cocoon-action-start=true">
                           Start!
                       </a>
                   </h3>
  
  
  
  1.4       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/system.xml
  
  Index: system.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/system.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- system.xml	30 Jun 2002 17:00:45 -0000	1.3
  +++ system.xml	4 Jul 2002 20:57:48 -0000	1.4
  @@ -14,7 +14,7 @@
   <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002">
   
   
  -  <xf:form id="form-feedback" view="system" action="wizard.html" method="GET">
  +  <xf:form id="form-feedback" view="system" action="wizard" method="GET">
   
       <xf:caption>System Information</xf:caption>    
     
  
  
  
  1.4       +1 -1      xml-cocoon2/src/webapp/samples/xmlform/wizard/userIdentity.xml
  
  Index: userIdentity.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/xmlform/wizard/userIdentity.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- userIdentity.xml	30 Jun 2002 17:00:45 -0000	1.3
  +++ userIdentity.xml	4 Jul 2002 20:57:48 -0000	1.4
  @@ -13,7 +13,7 @@
   <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002">
   
   
  -  <xf:form id="form-feedback" view="userIdentity" action="wizard.html" method="GET">
  +  <xf:form id="form-feedback" view="userIdentity" action="wizard" method="GET">
   
       <xf:caption>Personal Information</xf:caption>    
   
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org