On Tue, Aug 20, 2002 at 01:33:49PM +0200, Boscoe wrote: > Hi all, > > I am writing this because the archive isn't accessible at the moment, so > I can' t reply to my original mail. > > A while ago, I had the problem that I wanted to send XML data via POST > to a XSP. I received some interesting hints from Vadim Gritschenko > (thanks again, Vadim), but in the end, nothing seemed to solve my > problem, at least in a simple, obvious way. So, here is what I found out: > > Actually, the solution is very simple. I looked for a way to directly > access the input stream which is associated with a HttpServletRequest. > This can be done via > > public Map act (Redirector redirector, > SourceResolver resolver, > Map objectModel, > String source, > Parameters params) > > which is a method of org.apache.cocoon.acting.AbstractAction. Using this > approach, the HttpServletRequest instance is accessible via > > objectModel.get(HttpEnvironment.HTTP_REQUEST_OBJECT); > > I developed my own action, passed the request object the
What do you need the action for ? The way I do it is "pure" xsp, an example below. I do not quite know though how to make it reusable and put it into logicsheet so I do not have to make xsp:includes and so I could do: Document document = <myutils:get-request-body-as-DOM/>; Could someone help me ? <?xml version="1.0" encoding="ISO-8859-1"?> <xsp:page language="java" xmlns:xsp="http://apache.org/xsp" xmlns:esql="http://apache.org/cocoon/SQL/v2"> <xsp:structure> <xsp:include>java.net.*</xsp:include> <xsp:include>org.w3c.dom.*</xsp:include> <xsp:include>org.apache.cocoon.xml.dom.DOMStreamer</xsp:include> <xsp:include>org.apache.cocoon.xml.dom.DOMBuilder</xsp:include> <xsp:include>org.apache.cocoon.components.parser.Parser</xsp:include> <xsp:include>org.apache.cocoon.util.PostInputStream</xsp:include> <xsp:include>org.apache.cocoon.environment.http.HttpEnvironment</xsp:include> <xsp:include>javax.servlet.http.HttpServletRequest</xsp:include> <xsp:include>org.apache.xpath.XPathAPI</xsp:include> <xsp:include>javax.xml.transform.TransformerException</xsp:include> </xsp:structure> <xsp:logic> Document document = null; public Document GetInputStreamDocument() throws IOException { // > Node node = XPathAPI.selectNode(parser.parse(request.getParameter("xmlparam"), "kazoo"); int contentLength = request.getContentLength(); if ( contentLength >= 0 ) { HttpServletRequest request = (HttpServletRequest) objectModel.get( HttpEnvironment.HTTP_REQUEST_OBJECT ); PostInputStream anStream = new PostInputStream( request.getInputStream(), contentLength ); InputSource contentSource = new InputSource( anStream ); Parser newParser = null; DOMBuilder builder = null; try { newParser = (Parser) this.manager.lookup(Parser.ROLE); document = newParser.newDocument(); builder = new DOMBuilder(newParser); newParser.setContentHandler(builder); newParser.setLexicalHandler(builder); newParser.parse( contentSource ); } catch (Exception e) { // ignore - return null } finally { this.manager.release((Component) newParser); } return builder.getDocument(); } return null; } </xsp:logic> <content> <xsp:logic> document = GetInputStreamDocument(); try { <id><xsp:expr>XPathAPI.selectSingleNode(document, "/Orders/OrderID").getFirstChild().getNodeValue()</xsp:expr></id> } catch ( TransformerException e ) { } catch ( DOMException e ) { } </xsp:logic> </content> </xsp:page> -- __ | / \ | Leszek Gawron // \\ \_\\ //_/ [EMAIL PROTECTED] _\\()//_ .'/()\'. Phone: +48(600)341118 / // \\ \ \\ // recursive: adj; see recursive | \__/ | --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>