Max Larsson wrote: >Hi, > >what you want to do wokrs in this way. > > ><map:match ...> > <map:act ...> > ...on success > <map:serialze/> > </map:act> > ... the following is only executed on failure > <map:generate/> > <map:serialze/> ></map:match> > > >An action fails if it returns null in his act method. >And i think it is important to have a serilizer or >reader within the action else it wouldn't stop. It would >than continue after the action. > >HTH > >Max >
And then... > >Bryan, there's another way to communicate with the rest which is >request attributes. So set such a beast in your action containing the >results and have your other components act accordingly. If you need to >change the pipeline it would mean to use a selector that works on >request attributes. There's one supplied with Cocoon. > > Chris. > You both make valid points, and I don't disagree with you. I do know there are better ways to approach this problem (as I said in my original email). But I guess my concern is this... The sitemap pipeline is essentially a mini-programming language. The problem with it being a mini-programming language is people start to expect things (things like looping constructs, case statements, if statments, consistent behavior, and the like). Implementing a language that works as everybody expects is an extremely difficult thing to do. Here's my perspective. First, we'll start out with a sample sitemap entry, which I think is about as simpel as you can get: <match pattern=".*"> <generate/> <act name="something"> <act-failure> <transform name="insert-errors"/> </act-failure> </act> <serialize/> </match> vs which is more or less equivalent: <match pattern=".*"> <generate> <act name="something"> <serialize/> </act> <transform name="insert-errors"/> <serialize/> </match> For perspective, I am working on a framework implemented in Ruby that does essentially the same things Cocoon does. Personally, I'm a VERY big fan of Cocoon, but not a big fan of Java, so creating a framework in Ruby seemd a very natural thing to do. As I was implementing actions in the pipeline I got to thinking about all the possible ways I would use them. One way that seemed a natural fit is more or less the first example above (throw in some error messages if an action failed). So I poked around in the Cocoon documentation to see if I could find syntax for doing this (as I want my sitemap file to be as close to Cocoons as possible so people can easily move between the two) but I couldn't find any. At least, none that used an Action. The thing is, by doing it the first way, you can potentially cut down on some code reuse because instead of building two seperate chains of components, you build one chain of components with one entry that may or may not be there. This can become more complicated as you add more transformers in. You could use a pipeline fragment, but that's still somewhat more complicated and potentially slower, or you could use a selector (at which point this would be moot, but hold on a minute!). I was hoping there would be a good reason for not doing this: something that would say with 100% certainty that this should NOT go into the sitemap, because that would make my job easier. But I'm not finding the answer. The Ruby language developers follow the principal of least surprise. They want the language to work as you would expect it to work. If you think it should be possible, you should be able to figure it out without too much difficulty using other code as an example (they strive for a level of consistency seen in very few languages today). So basically, it seemed surprising to me that you couldn't do this (as it was one of the first ways I thought about using an Action). Following that principal, I assumed there was a way to do it. Anyway, unless somebody can convince me otherwise, I think it's a valid thing to add to *MY* pipeline (as an alternate way of using Actions), although I would certainly discourage it in favor of selectors. It's just one of those things, you never know what people are going to want to do, and I want to provide as little resistance as possible. If I thought of it, somebody else will... Bryan --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faqs.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>