Sébastien Geindre pisze:
> hello everybody,
> 
> I need to make a http POST request inside my pipeline.
> So i need to write my own transformer which :
> get the SAX event and transform into DOM
> request a http server (web feature service) posting xml data
> get the response back and generate SAX event.
> 
> Is there any transformer that already does this thing (posting xml data
> to http server) ?
> If not, how could i write my own in C2.2 ? Any documentation ?
> 
> thanks

You are lucky, most of the functionality is already implemented in 
ServletServiceTransformer[1]. You
 can see example of its usage in cocoon-servlet-service-sample[2]. This 
transformer works only with
sources that implement PostableSource interface. The only source that 
implements this interface is
ServletSource.

This transformer was designed to make calls to a servlet services (see [3] for 
details) and I don't
think it should be directly used for making general HTTP calls to any HTTP 
server. Instead of
implementing class implementing PostableSource and delegating it to 
HttpConnection I would suggest
to create a new block that would handle calling your web feature. By creating 
new block I don't have
in mind block with Cocoon sitemap and using SitemapServlet as explained in this 
tutorial [4].

You will need to implement simple Servlet like:

public class WebFeatureServlet implements HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws
ServletException, IOException {
    //you may need to use other method for obtaining path
    if (request.getPathTranslated().equals("service/webFeature")) {
      //make a request to your web feature service and copy it's response to 
the response parameter
    }
  }
}

Then mount your servlet as a new block. You just may want to create a new block 
using block
archetype by following[4]. Since you don't need sitemap (your servlet will 
handle calls) you can
safely remove src/main/resources/COB-INF directory.

Last step is to mount your servlet, finally. Open
src/main/resources/META-INF/cocoon/spring/servlet-service.xml file and change 
class from
org.apache.cocoon.sitemap.SitemapServlet to your.package.WebFeatureServlet.

After completing these steps your new block is ready to handle servlet service 
calls, you just have
to connect to it and use servletService transformer to make a calls.

I hope this will help you. Also, I hope that you will like this approach, it's 
very powerful because
you can do whatever you need in your own, simple servlet like handling of 
authentication or setting
custom headers.

I would be grateful for any feedback related to the new functionality as it 
wasn't much tested.

[1]
http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java
[2]
http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-sample
[3] https://issues.apache.org/jira/browse/COCOON-2046
[4] http://cocoon.zones.apache.org/daisy/cdocs/g2/g2/g1/1159.html

-- 
Grzegorz Kossakowski
http://reflectingonthevicissitudes.wordpress.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to