Frank Maas wrote:
>>> This object does some basic things for generating XML, hence the 
>>> content_type. This, again, works fine. Now the problem - if an 
>>> unexisting action for this "XML subclass" is requested, the AUTOLOAD 
>>> kicks in. The AUTOLOAD sets the content-type back to HTML 
>>> ($r->content_type('text/html')) but this is completely ignored...
> 
> 
> Solved my own problem, but thought sharing would be good... Apparently it
> was not the content_type call that was ignored. What happens is that
> Apache does an add_output_filter_by_type on each call to
> ap_set_content_type (which is the Apache equivalent of $r->content_type).
> Output filters are however never removed... So if you have (like I did)
> an output filter for a specific type then this happens:
> 
> $r->content_type('my/type');   # content_type set AND output filter added 
> $r->content_type('text/html'); # content_type changed, output filter
> REMAINS
> 
> I don't know if this behaviour is as one would expect and it certainly is
> not a discussion for this list (as it is standard Apache behaviour) but
> worth to know...

yes, good to know.  and I saw that when I looked at the code this morning.

but the thing about output filters is they should do something like

  return DECLINED unless $r->content_type =~ m/something_I_can_handle/;

so your xml filter should decline (or better, remove itself) from the filter
chain if it's not xml you're being asked to process.

--Geoff

Reply via email to