Now that mod_perl 2 is out and they've broken all the compatability with mod_perl 1.99...
Here's a quick and dirty hack that gets NicTool with Apache and mod_perl 2.0. Maybe someday I'll clean it up and do a proper patch but for now, this does the trick.
--- HTTP.pm.orig Mon Aug 18 13:44:21 2003
+++ HTTP.pm Thu Jun 9 16:31:30 2005
@@ -10,11 +10,20 @@
package SOAP::Transport::HTTP;
-use strict;
+#use strict;
use vars qw($VERSION);
$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_60-public $ =~ /-(\d+)_([\d_]+)/);
use SOAP::Lite;
+#use Apache2;
+use mod_perl2;
+
+
+BEGIN {
+ require Apache2::Const;
+ Apache::Const->import(-compile => qw(OK DECLINED));
+}
+
# ============================================================ ==========
@@ -441,7 +450,11 @@
sub DESTROY { SOAP::Trace::objects('()') }
-sub new { require Apache; require Apache::Constants;
+sub new {
+ #require Apache; require Apache::Constants;
+# require Apache2;
+# require Apache::RequestRec;
+ require Apache2::Const;
my $self = shift;
unless (ref $self) {
@@ -453,13 +466,16 @@
}
sub handler {
+ require Apache2::RequestIO;
+ require Apache2::RequestRec;
+
my $self = shift->new;
my $r = shift || Apache->request;
$self->request(HTTP::Request->new(
$r->method => $r->uri,
HTTP::Headers->new($r->headers_in),
- do { my $buf; $r->read($buf, $r->header_in('Content-length')); $buf; }
+ do { my $buf; $r->read($buf, $r->headers_in->{'Content-length'}); $buf; }
));
$self->SUPER::handle;
@@ -470,15 +486,17 @@
# will emulate normal response, but with custom status code
# which could also be 500.
$r->status($self->response->code);
- $self->response->headers->scan(sub { $r->header_out(@_) });
- $r->send_http_header(join '; ', $self->response->content_type);
+ $self->response->headers->scan(sub { $r->headers_out->{@_} });
+ #$r->send_http_header(join '; ', $self->response->content_type);
+ $r->content_type(join '; ', $self->response->content_type);
$r->print($self->response->content);
- &Apache::Constants::OK;
+ return Apache2::Const::OK;
}
sub configure {
my $self = shift->new;
my $config = shift->dir_config;
+ require APR::Table;
foreach (%$config) {
$config->{$_} =~ /=>/
? $self->$_({split /\s*(?:=>|,)\s*/, $config->{$_}})
@@ -591,7 +609,7 @@
=item mod_soap server (.htaccess, directory-based access)
SetHandler perl-script
- PerlHandler Apache::SOAP
+ PerlResponseHandler Apache::SOAP
PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method"
PerlSetVar options "compress_threshold => 10000"
@@ -808,7 +826,7 @@
<Location /soap>
SetHandler perl-script
- PerlHandler SOAP::Apache
+ PerlResponseHandler SOAP::Apache
</Location>
Apache.pm:
@@ -831,7 +849,7 @@
Alias /mod_perl/ "/Apache/mod_perl/"
<Location /mod_perl>
SetHandler perl-script
- PerlHandler Apache::Registry
+ PerlResponseHandler Apache::Registry
PerlSendHeader On
Options +ExecCGI
</Location>
Just to add to this -- new version of p5-Apache-DBI came out today in ports:
www/p5-Apache-DBI
Unbreak after the mod_perl2 API dance.
Approved by: skv (maintainer)
Obtained from: Philip M. Gollucci (pgollucci [at] p6m7g8.com) (largely)
08 Jun 2005 - philip
http://www.FreshPorts.org/www/p5-Apache-DBI/
Here's what I believe to be the identical patch -- just re-posted wrapped in pre tags, so you can copy/paste it and it maintains the correct indenting
-- apparently one of the hunks STILL doesn't copy out of here correctly, so I offer a URL where you can
download it.
Also, be sure to install the www/p5-CGI.pm port so it overwrites the default perl CGI.pm -- the port is updated to work with the new mod_perl
--- HTTP.pm.orig Mon Aug 18 14:44:21 2003+++ HTTP.pm Tue Jul 5 01:29:31 2005@@ -10,11 +10,19 @@ package SOAP::Transport::HTTP;-use strict;+#use strict; use vars qw($VERSION); $VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_60-public $ =~ /-(\d+)_([\d_]+)/); use SOAP::Lite;+#use Apache2;+use mod_perl2;+++BEGIN {+ require Apache2::Const;+ Apache::Const->import(-compile => qw(OK DECLINED));+} # ======================================================================@@ -441,7 +449,11 @@ sub DESTROY { SOAP::Trace::objects('()') }-sub new { require Apache; require Apache::Constants;+sub new {+ # require Apache; require Apache::Constants;+ # require Apache2;+ # require Apache::RequestRec;+ require Apache2::Const; my $self = shift; unless (ref $self) {@@ -453,13 +465,16 @@ } sub handler {+ require Apache2::RequestIO;+ require Apache2::RequestRec;+ my $self = shift->new; my $r = shift || Apache->request; $self->request(HTTP::Request->new( $r->method => $r->uri, HTTP::Headers->new($r->headers_in),- do { my $buf; $r->read($buf, $r->header_in('Content-length')); $buf; }+ do { my $buf; $r->read($buf, $r->headers_in->{'Content-length'}); $buf; } )); $self->SUPER::handle;@@ -470,15 +485,17 @@ # will emulate normal response, but with custom status code # which could also be 500. $r->status($self->response->code);- $self->response->headers->scan(sub { $r->header_out(@_) });- $r->send_http_header(join '; ', $self->response->content_type);+ $self->response->headers->scan(sub { $r->headers_out->{@_} });+ #$r->send_http_header(join '; ', $self->response->content_type);+ $r->content_type(join '; ', $self->response->content_type); $r->print($self->response->content);- &Apache::Constants::OK;+ return Apache2::Const::OK; } sub configure { my $self = shift->new; my $config = shift->dir_config;+ require APR::Table; foreach (%$config) { $config->{$_} =~ /=>/ ? $self->$_({split /\s*(?:=>|,)\s*/, $config->{$_}})@@ -591,7 +608,7 @@ =item mod_soap server (.htaccess, directory-based access) SetHandler perl-script- PerlHandler Apache::SOAP+ PerlResponseHandler Apache::SOAP PerlSetVar dispatch_to "/Your/Path/To/Deployed/Modules, Module::Name, Module::method" PerlSetVar options "compress_threshold => 10000"@@ -808,7 +825,7 @@ <Location /soap> SetHandler perl-script- PerlHandler SOAP::Apache+ PerlResponseHandler SOAP::Apache </Location> Apache.pm:@@ -831,7 +848,7 @@ Alias /mod_perl/ "/Apache/mod_perl/" <Location /mod_perl> SetHandler perl-script- PerlHandler Apache::Registry+ PerlResponseHandler Apache::Registry PerlSendHeader On Options +ExecCGI </Location>