package main;
use strict;
use warnings FATAL => "all";
use vars qw($spooler $spooler_log $spooler_job $spooler_task);
use XML::XPath;
sub spooler_process() {
my $rc = 1;
eval {
my $xml_document;
my $order = $spooler_task->order;
my $operation = $order->web_service_operation;
my $request = $operation->request;
$spooler_log->debug3( "input of web service request:\n" . $request->string_content );
# should the request be previously transformed ...
if ($spooler_task->params->value("request_stylesheet") && length($spooler_task->params->value("request_stylesheet")) > 0) {
my $stylesheet = $spooler->create_xslt_stylesheet();
$stylesheet->load_file( $spooler_task->params->value("request_stylesheet") );
$xml_document = "".$stylesheet->apply_xml($request->string_content);
$spooler_log->debug3( "output of request transformation:\n" . $xml_document );
} else {
$xml_document = $request->string_content;
}
# add order parameters from request parameter elements
my $xpath = XML::XPath->new($xml_document);
my $params = $spooler->create_variable_set();
$params->LetProperty( 'xml', $xpath->findnodes_as_string('//params') );
$order->LetProperty( 'payload', $params );
# alternatively you could add any xml structure of the request to the xml payload of this order
# order->LetProperty( 'xml_payload', $xpath->findnodes_as_string('//xml_payload/*'));
$spooler_log->info( "web service request accepted for order \"" . $order->id . "\"" );
};
if ( $@ ) {
chomp $@;
$spooler_log->warn( $@ );
return 0;
}
return $rc;
}