Just as a follow-up, I continued to play with SOAP::Data::Builder to see if I could build a successful request - To this end, I have the following code:
#!/opt/bin/perl
use SOAP::Data::Builder;
use SOAP::Lite +trace;
my $builder = SOAP::Data::Builder->new;
$builder->add_elem( 'name' => 'parameters' );
$builder->add_elem(
'name' => 'CustID',
'parent' => $builder->get_elem('parameters'),
'value' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
);
$builder->add_elem(
'name' => 'Data',
'parent' => $builder->get_elem('parameters'),
'value' => 'Testing'
);
my $result = SOAP::Lite
->service('http://www.thedialogcenter.com/EncryptionService.ws
+dl')
->Encrypt( $builder->to_soap_data );
print $result, "\n";
... which produces the following well-formed request ...
Accept: text/xml
Accept: multipart/*
Content-Length: 558
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.arkbluecross.com/WebServices/EncryptionService
+/Encrypt"
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-EN
+C="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle=
+"http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://sc
+hemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/X
+MLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"><SOAP
+-ENV:Body><Encrypt xmlns=""><parameters><CustID xsi:type="xsd:string"
+>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</CustID><Data xsi:type="xsd:string"
+>Testing</Data></parameters></Encrypt></SOAP-ENV:Body></SOAP-ENV:Enve
+lope>
However, whilst I haven't achieved a successful result, I have been able to build a well-formed SOAP request to dispatch to the service. If you can get a copy of a successful request generated by other means, it may be worth playing with SOAP::Data::Builder further to fashion a successful perl client.
perl -le "print unpack'N', pack'B32', '00000000000000000000001011001111'"
| [reply] [d/l] [select] |
Just to put to bed a mystery, I did solve this one. Well, I did not actually solve this one, but a Java programmer who wrote the service found it. Anyway here is the code.
use SOAP::Lite;
my $s = SOAP::Lite
-> uri('http://www.arkbluecross.com/WebServices/EncryptionS
+ervice')
->proxy('https://secure.arkansasbluecross.com/WebServices/E
+ncryptionService.asmx')
-> on_action(sub{sprintf '%s/%s', @_ });
my $custID = SOAP::Data->name('CustID' => "$cust_id")->type('strin
+g')->uri('http://www.arkbluecross.com/WebServices/EncryptionService')
+;
my $data = SOAP::Data->name('EncryptedData' => "$es")->type('strin
+g')->uri('http://www.arkbluecross.com/WebServices/EncryptionService')
+;
$result = $s->Decrypt($custID, $data)->result;
I do not necessarily understand the differences between all my iterations and this one, but it works which was my main concern. ES and client ID are now passed in. I still do not know why +trace never worked for me. I never saw anthing on the screen. Anytime there is an error I write it to a file and I found all kinds of garbage in there dealing with my attempts. Thanks for your help. | [reply] [d/l] |