Ok, try this, it adds the prefixes and an empty header.
#!perl
use strict;
use SOAP::Lite;
# soap
my $client = SOAP::Lite->uri('')
->proxy("loopback://");
$client->autotype(0)->readable(1);
$client->outputxml(1);
$client->ns("http://schemas.xmlsoap.org/soap/envelope/","soapenv");
$client->ns("http://tempuri.org/AWEService/API/WASAPI","was");
my %auth = (
WAS_userName => 'WS_Decom',
WAS_password => 'PASSWORD',
);
my %search = (
DEVICE_NAME => 'prodh20',
RACK_NAME => '',
# etc
);
my @auth_data;
for (keys %auth){
my $data = SOAP::Data->name(
$_ => $auth{$_} )->prefix('was');
push @auth_data, SOAP::Data->type('data' => $data),
}
my @search_data;
for (keys %search){
my $data = SOAP::Data->name(
$_ => $search{$_} )->prefix('was');
push @search_data, SOAP::Data->type('data' => $data),
}
my $auth = SOAP::Data->name(
"userIdentification" => \@auth_data
)->prefix('was');
my $search = SOAP::Data->name(
"locatorSearchFieldsIdentification" => \@search_data
)->prefix('was');
my $header = SOAP::Data->type('xml' => '');
my $response = $client->call("RunLocator",
SOAP::Header->type('data'=>$header),
SOAP::Data->type('data' => $auth),
SOAP::Data->type('data' => $search) );
#open OUT,'>','output.xml' or die "$!";
print $response;
#close OUT;
poj