cziegeler 2002/09/25 23:52:23 Modified: src/documentation/xdocs/userdocs/transformers cinclude-transformer.xml src/documentation/xdocs/developing/webapps session.xml src/java/org/apache/cocoon/webapps/session/context RequestSessionContext.java Log: updating cinclude docs Revision Changes Path 1.2 +75 -0 xml-cocoon2/src/documentation/xdocs/userdocs/transformers/cinclude-transformer.xml Index: cinclude-transformer.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/documentation/xdocs/userdocs/transformers/cinclude-transformer.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- cinclude-transformer.xml 3 Jan 2002 12:31:06 -0000 1.1 +++ cinclude-transformer.xml 26 Sep 2002 06:52:23 -0000 1.2 @@ -14,6 +14,11 @@ </header> <body> <s1 title="CInclude Transformer"> + <p>This transformer includes XML in the current stream and acts therefore + is a kind of (dynamic) content aggregation. Two forms, one verbose + and flexible approach, and a simple approach are supported by the + transformer. We will first discuss the simple approach and + the more flexible is mentioned in the next chapter.</p> <p> This transformer triggers for the element <code>include</code> in the namespace "http://apache.org/cocoon/include/1.0". @@ -125,5 +130,75 @@ </page> ]]></source> </s1> +<s1 title="Including External XML (simple)"> + <p>One feature of the cinclude transformer (this is currently not + supported by the caching cinclude transformer) is including XML from + external sources, e.g. files or from an HTTP server. + The <code>cinclude:includexml</code> tag starts including of XML:</p> + <source> +<cinclude:includexml> <!-- Include XML from HTTP server --> + <cinclude:src>http://external.news.com/flashnews.xml</cinclude:src> +</cinclude:includexml> +</source> + <p> This would be a simple way of "get"ting XML data from an + external site. Using this method it is also possible to pass parameters in the + url - just as you would in a "get" sent from a browser.</p> + <source> +<cinclude:includexml> <!-- Include XML from HTTP server --> + <cinclude:src>http://external.news.com/flashnews.xml?id=1234&myname=matthew</cinclude:src> +</cinclude:includexml> +</source> + <p>If the external XML is not valid or not available, the + transformer signals an error to the pipeline and the document containing the + include command is not available.</p> + <p>For this purpose the <code>ignoreErrors</code> attribute can be + used:</p> + <source> +<cinclude:includexml ignoreErrors="true"> +... +</cinclude:includexml></source> + </s1> + <s1 title="Including External XML (advanced)"> + <p>The above section shows you how to include XML data from an + external source such as an HTTP server using the simple "get" method supplied + in the HTTP protocol. For more advanced uses you will wish to be able to send + "Post" or other HTTP methods to the server. In addition you may want to + actually send XML data to the server - just as you would using an HTML form. + The format of this resource is slightly more complicated:</p> + <source> +<?xml version="1.0"?> +<data xmlns:cinclude="http://apache.org/cocoon/include/1.0"> +<cinclude:includexml> + <cinclude:src>http://itsunshine/tamino/blah</cinclude:src> + <cinclude:configuration> + <cinclude:parameter> + <cinclude:name>method</cinclude:name> + <cinclude:value>POST</cinclude:value> + </cinclude:parameter> + </cinclude:configuration> + <cinclude:parameters> + <cinclude:parameter> + <cinclude:name>message</session:name> + <cinclude:value>Hi there</session:value> + </cinclude:parameter> + <cinclude:parameter> + <cinclude:name>_Process</cinclude:name> + <cinclude:value><name>matti</name><age>36</age></cinclude:value> + </cinclude:param> + </cinclude:parameters> +</cinclude:includexml> +</data> + </source> + <p>Lets look at the tags. The tag <code>cinclude:src</code> defines the address of the + resource we want to access and then comes a list of (optional) + connection-specific parameters (enclosed in the <code>cinclude:configuration</code> tag). + In this example the HTTP-method ("POST") is passed into the connection. The + format of these parameters is discussed next.</p> + <p>Then comes the list of parameters we wish to pass into the + function. Each parameter defined has a name and a value. The value can either + be text or XML.</p> + <p>The format of the parameters is the same as for the connection + configuration.</p> + </s1> </body> </document> 1.3 +27 -27 xml-cocoon2/src/documentation/xdocs/developing/webapps/session.xml Index: session.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/documentation/xdocs/developing/webapps/session.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- session.xml 17 Jul 2002 07:27:08 -0000 1.2 +++ session.xml 26 Sep 2002 06:52:23 -0000 1.3 @@ -198,23 +198,22 @@ </s1> <s1 title="Special Contexts"> <p>Cocoon creates and maintains special contexts that allow the - applications to access the environment data. This allows the read-only access - to such things as the HttpRequest or the HtppResponse using the same XPath + applications to access the environment. This allows the read-only access + to such things as the current request or the response using the same XPath commands previously described. These context do not require any session, they - are everytime available.</p> + are always available and change on every request.</p> <s2 title="The Request Context - Accessing the Environment, Part One"> <p>The request context is an XML description of the current - HttpRequest. This context is a special read only context which can be accessed - with the usual commands:</p> + (HTTP) request. This context is a special read only context that + can be accessed with the usual commands:</p> <p><em><getxml context="request" path="/parameter"/></em></p> - <p>If you for example want to get the value of a parameter with the + <p>For example, if you want to get the value of a parameter with the name <em>username</em> you can include the following command in your XML and it will be replaced with the value of the parameter:</p> <p><em><getxml context="request" path="/parameter/username"/></em></p> - <p>This command will be replaced with all parameters from the current - request in XML format. If you wish to obtain the complete querystring as it was + <p>If you wish to obtain the complete querystring as it was passed into Cocoon - without converting the data to XML - then you can use the "/querystring" path:</p> <p><em><getxml context="request" @@ -224,7 +223,8 @@ <p>The complete context you can access via these commands has the following XML format:</p> <source><parameter> - <!-- All parameters: parameter names build the elements with the values as text node childs --> + <!-- All parameters: parameter names build the elements with the value of the first parameter with + this name as text node child --> <firstparameter>value of parameter</firstparameter> <secondparameter>value of parameter</secondparameter> </parameter> @@ -233,20 +233,20 @@ (The querystring contains only parameters send by the GET method) <parametervalues> - <!-- All parameters. The tags are all inside the session namespace. - The generated xml can be used without modification for the - session:connection command. --> - <session:params> - <session:param> - <session:name>1st parameter name</session:name> - <session:value>1st parameter value</session:value> - </session:param> + <!-- All parameters. The tags are all inside the cinclude transformer namespace. + The generated XML can be used without modification for the + cinclude:includexml command. --> + <cinclude:parameters> + <cinclude:parameter> + <cinclude:name>1st parameter name</cinclude:name> + <cinclude:value>1st parameter value</cinclude:value> + </cinclude:parameter> ... - <session:param> - <session:name>2nd parameter name</session:name> - <session:value>2nd parameter value</session:value> - </session:param> - </session:params> + <cinclude:parameter> + <cinclude:name>2nd parameter name</cinclude:name> + <cinclude:value>2nd parameter value</cinclude:value> + </cinclude:parameter> + </cinclude:parameters> <!-- If a parameter has more than one value, for each value a <session:param> block is generated. --> </parametervalues> @@ -298,13 +298,13 @@ </s2> <s2 title="The Response Context - Accessing the Environment, Part Two"> <p>The response context is an XML description of the current - HttpResponse. This context is a special write only context which can be + (HTTP) response. This context is a special write only context that can be accessed with the usual commands:</p> <p><em><session:setxml context="response" path="/header"/></em></p> <p>This command will be removed from the XML and the information will - be added to the response. Using the response context headers and cookies can be - added.</p> + be added to the response. Headers and cookies can be + added using the response context .</p> <s3 title="Adding headers"> <p>Headers can be added either by <em>setxml</em> or by <em>appendxml</em>. If <em>setxml</em> is used, the header with the name gets @@ -337,8 +337,8 @@ <p>The temporary context with the name <em>"temp"</em> is available on each request. It is independent from the session and has no content when a new request starts. It can be used like any other context except that the content - is lost when the current response is finished.</p> - <p>Using the tempory context it is possible to use store any xml + is lost/deleted when the current response is finished.</p> + <p>Using the tempory context it is possible to store any XML information for processing the current request.</p> </s2> </s1> 1.7 +41 -21 xml-cocoon2/src/java/org/apache/cocoon/webapps/session/context/RequestSessionContext.java Index: RequestSessionContext.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/webapps/session/context/RequestSessionContext.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- RequestSessionContext.java 23 Sep 2002 12:03:27 -0000 1.6 +++ RequestSessionContext.java 26 Sep 2002 06:52:23 -0000 1.7 @@ -62,6 +62,7 @@ import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.excalibur.source.SourceResolver; +import org.apache.cocoon.transformation.CIncludeTransformer; import org.apache.cocoon.webapps.session.SessionConstants; import org.apache.cocoon.webapps.session.connector.Resource; import org.apache.cocoon.webapps.session.xml.XMLUtil; @@ -85,27 +86,31 @@ * It is not allowed to change this context. * The following paths are valid: * /parameter - lists all parameters, parameter names build the - * elements with the values as text node childs - * /parameter/<parameter_name> - one text node containing the value + * elements with the value of the first parameter with + * this name as text node childs + * /parameter/<parameter_name> - one text node containing the value of the first + * parameter with this name * /querystring - the querystring with a leading '?' or null (the querystring is only for GET) * * /parametervalues - same as /parameter but values are listed as described - * below - * <session:params> - * <session:param> - * <session:name>parameter name</session:name> - * <session:value>parameter value</session:value> - * </session:param> + * below and each value of a parameter is listed. + * <cinclude:parameters> + * <cinclude:parameter> + * <cinclude:name>parameter name</cinclude:name> + * <cinclude:value>parameter value</cinclude:value> + * </cinclude:parameter> * ... - * <session:param> - * <session:name>parameter name</session:name> - * <session:value>parameter value</session:value> - * </session:param> - * </session:params> + * <cinclude:parameter> + * <cinclude:name>parameter name</cinclude:name> + * <cinclude:value>parameter value</cinclude:value> + * </session:parameter> + * </cinclude:parameters> * If a parameter has more than one value for each value a - * <session:param> block is generated. + * <cinclude:parameter/> block is generated. + * This output has the namespace of the CIncludeTransformer + * to use it as input for a <cinclude:includexml> command. * /attributes - lists all attributes, attribute names build the elements - * with the values as text node childs + * with the values as childs * /headers - lists all headers, header names build the elements * with the values as text node childs * /cookies ----- <cookie name="..."> @@ -150,11 +155,26 @@ public final class RequestSessionContext implements SessionContext { + private static final String PARAMETERS_ELEMENT = "cinclude:" + CIncludeTransformer.CINCLUDE_PARAMETERS_ELEMENT; + private static final String PARAMETER_ELEMENT = "cinclude:" + CIncludeTransformer.CINCLUDE_PARAMETER_ELEMENT; + private static final String NAME_ELEMENT = "cinclude:" + CIncludeTransformer.CINCLUDE_NAME_ELEMENT; + private static final String VALUE_ELEMENT = "cinclude:" + CIncludeTransformer.CINCLUDE_VALUE_ELEMENT; + + /** Name of this context */ private String name; + + /** The current {@link org.apache.cocoon.environment.Request} */ transient private Request request; + + /** The content of this context */ private Document contextData; - public void setup(String value, Resource load, Resource save) { name = value; } + /** + * Setup this context + */ + public void setup(String value, Resource load, Resource save) { + this.name = value; + } /** * Set the Request @@ -384,7 +404,7 @@ String[] values; String parValue; - element = doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:params"); + element = doc.createElementNS(CIncludeTransformer.CINCLUDE_NAMESPACE_URI, PARAMETERS_ELEMENT); parameterValuesElement.appendChild(element); parameterValuesElement = element; @@ -419,13 +439,13 @@ try { // create "/parametervalues" entry - element = doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:param"); + element = doc.createElementNS(CIncludeTransformer.CINCLUDE_NAMESPACE_URI, PARAMETER_ELEMENT); parameterValuesElement.appendChild(element); parameter = element; - element = doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:name"); + element = doc.createElementNS(CIncludeTransformer.CINCLUDE_NAMESPACE_URI, NAME_ELEMENT); parameter.appendChild(element); element.appendChild(doc.createTextNode(parameterName)); - element = doc.createElementNS(SessionConstants.SESSION_NAMESPACE_URI, "session:value"); + element = doc.createElementNS(CIncludeTransformer.CINCLUDE_NAMESPACE_URI, VALUE_ELEMENT); parameter.appendChild(element); element.appendChild(valueNode.cloneNode(true)); } catch (Exception local) {
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]