diff options
Diffstat (limited to 'xmlrpc.cgi')
-rwxr-xr-x | xmlrpc.cgi | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/xmlrpc.cgi b/xmlrpc.cgi index d5042eb8b..10c245ef6 100755 --- a/xmlrpc.cgi +++ b/xmlrpc.cgi @@ -21,16 +21,16 @@ use lib qw(. lib); use Bugzilla; use Bugzilla::Constants; use Bugzilla::Error; -use Bugzilla::Hook; use Bugzilla::WebService::Constants; # Use an eval here so that runtests.pl accepts this script even if SOAP-Lite # is not installed. -eval 'use XMLRPC::Transport::HTTP; - use Bugzilla::WebService;'; +eval { require Bugzilla::WebService::Server::XMLRPC; }; $@ && ThrowCodeError('soap_not_installed'); -Bugzilla->usage_mode(Bugzilla::Constants::USAGE_MODE_WEBSERVICE); +Bugzilla->usage_mode(USAGE_MODE_WEBSERVICE); + +# Fix the error code that SOAP::Lite uses for Perl errors. local $SOAP::Constants::FAULT_SERVER; $SOAP::Constants::FAULT_SERVER = ERROR_UNKNOWN_FATAL; # The line above is used, this one is ignored, but SOAP::Lite @@ -38,27 +38,10 @@ $SOAP::Constants::FAULT_SERVER = ERROR_UNKNOWN_FATAL; local $XMLRPC::Constants::FAULT_SERVER; $XMLRPC::Constants::FAULT_SERVER = ERROR_UNKNOWN_FATAL; -my %hook_dispatch; -Bugzilla::Hook::process('webservice', { dispatch => \%hook_dispatch }); local @INC = (bz_locations()->{extensionsdir}, @INC); - -my $dispatch = { - 'Bugzilla' => 'Bugzilla::WebService::Bugzilla', - 'Bug' => 'Bugzilla::WebService::Bug', - 'User' => 'Bugzilla::WebService::User', - 'Product' => 'Bugzilla::WebService::Product', - %hook_dispatch -}; - -# The on_action sub needs to be wrapped so that we can work out which -# class to use; when the XMLRPC module calls it theres no indication -# of which dispatch class will be handling it. -# Note that using this to get code thats called before the actual routine -# is a bit of a hack; its meant to be for modifying the SOAPAction -# headers, which XMLRPC doesn't use; it relies on the XMLRPC modules -# using SOAP::Lite internally.... - -my $response = Bugzilla::WebService::XMLRPC::Transport::HTTP::CGI - ->dispatch_with($dispatch) - ->on_action(sub { Bugzilla::WebService::handle_login($dispatch, @_) } ) - ->handle; +my $server = new Bugzilla::WebService::Server::XMLRPC; +# We use a sub for on_action because that gets us the info about what +# class is being called. Note that this is a hack--this is technically +# for setting SOAPAction, which isn't used by XML-RPC. +$server->on_action(sub { $server->handle_login(WS_DISPATCH, @_) }) + ->handle(); |