> Regardless of the failed attempts to change status, 
> 
>       my $l = length($xml_data);
>       $obj->apache_handle->set_content_length($l);
>       $obj->apache_handle->content_type('text/xml');
>       $obj->apache_handle->print($xml_data);
>       return Apache::HTTP_MULTI_STATUS;
> 
> would always return status 200.

besides the answer that joe gave, it looks like mod_dav itself follows this
logic

  $r->status(Apache::HTTP_MULTI_STATUS);
  $r->content_type('text/xml');
  ...
  return Apache::DONE;

which I guess makes it the sole exception for setting $r->status, which is
something that you're generally not supposed to do.

> 
> Tried to work around this by outputting the XML using 
> 
> $r->custom_response(Apache::HTTP_MULTI_STATUS,$xml_data);
> 
> which returned the XML data with the correct 207
> response, but in this case the 
> 
> $r->content_type('text/xml');
> 
> was ignored and the server reported the xml data as
> 'text/html'.

that's an apache thing, not a mod_perl thing.  as in 1.3, ErrorDocuments in
2.0 are hard-coded to content-type 'text/html' (see ap_send_error_response
in http_protocol.c).  it's come up before and I find it rather limiting and
strange, so it's probably something that would be worth looking into.

--Geoff


-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to