[Xml-compile] namespace adjustment

Jack Downes jax at nwmt.us
Sat Apr 15 07:48:40 GMT 2017


Hello, I'm new to using XML::Compile and all it's related modules.
 Today is my first day in fact!

So, I'll present what I need, what I'm producing, and the code used to
do so.  Hope this helps explain my problem:


What I'm expected to produce:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <ProcessEligibility xmlns="https://claims.realmed.com">;
      <request>
        <SubmitterID>string</SubmitterID>
        <UserName>string</UserName>
        <Password>string</Password>
        <AnsiRequest>string</AnsiRequest>
        <ExternalPayerID>string</ExternalPayerID>
        <UserDefined1>string</UserDefined1>
        <UserDefined2>string</UserDefined2>
        <TimeStamp>string</TimeStamp>
      </request>
    </ProcessEligibility>
  </soap12:Body>
</soap12:Envelope>



What I'm getting:

<?xml version="1.0" encoding="UTF-8"?>
<env12:Envelope xmlns:env12="http://www.w3.org/2003/05/soap-envelope">;
  <env12:Body>
    <tns:ProcessEligibility xmlns:tns="https://claims.realmed.com">;
      <tns:request>
	<tns:SubmitterID>[submitter]</tns:SubmitterID>
	<tns:UserName>[username]</tns:UserName>
	<tns:Password>[password]</tns:Password>
	<tns:AnsiRequest>ISA*00*          *00*          *ZZ*~</tns:Ansi
Request>
	<tns:UserDefined1></tns:UserDefined1>
	<tns:UserDefined2></tns:UserDefined2>
	<tns:TimeStamp>20170415 07:17:38</tns:TimeStamp>
      </tns:request>
    </tns:ProcessEligibility>
  </env12:Body>
</env12:Envelope>



So... the problem, well, I think it's an issue anyway, is the various
namespace identifiers.  How do I make it so there are no  "tns:"
markers?  Also, it looks like "env12:" should be "soap12"

The endpoint is a Microsoft server *I think*, but vendor won't confirm.

I think the solution could be had here: https://metacpan.org/pod/XML::C
ompile::Cache#Prefix-management  but so far, I've not had much success.


My code is mostly from the examples and the helper scripts:




#!/home/jax/local/bin/perl

use strict;
use warnings;
use Config::General;
use Data::Dumper;

use XML::Compile::WSDL11;
use XML::Compile::SOAP;
use XML::Compile::SOAP11;
use XML::Compile::SOAP12;
use XML::Compile::Transport::SOAPHTTP;

#use Log::Report mode => 'DEBUG';   # or 'VERBOSE'

my $conf = Config::General->new(
   -ConfigFile => "config.conf")->{DefaultConfig};


my $AnsiRequest = "ISA*00*          *00*          *ZZ*~";


my $wsdl = XML::Compile::WSDL11->new($conf->{'WSDL'}, server_type =>
'SharePoint');
my $call = $wsdl->compileClient('ProcessEligibility', port =>
'wsElig270Soap12' );

# This struture based on the output from the explain...
my $parameters = {
(request => {'SubmitterID' => $conf->{'SubmitterID'},
              'UserName' => $conf->{'UserName'},
              'Password' => $conf->{'Password'},
              'AnsiRequest' => $AnsiRequest,
              'UserDefined1' => '',
              'UserDefined2' => '',
              'TimeStamp' => quick_timestamp() }
)};

my ($answer, $trace) = $call->($parameters);

# @params will become %$data_in in the server handler.
# $answer is a HASH, an operation OUTPUT or Fault.
# $trace is an XML::Compile::SOAP::Trace object.

# You may get an error back from the server
if(my $f = $answer->{Fault})
{   my $errname = $f->{_NAME};
    my $error   = $answer->{$errname};
    print "$error->{code}\n";

    my $details = $error->{detail};
    if(not $details)
    {   # system error, no $details
    }
    exit 1;
}


print Dumper($answer);
print Dumper($trace);


sub quick_timestamp {

    my
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    my $nice_timestamp = sprintf ( "%04d%02d%02d %02d:%02d:%02d",
                                   $year+1900,$mon+1,$mday,$hour,$min,$
sec);
    return $nice_timestamp;
}






thanks much!

Jack



More information about the Xml-compile mailing list