<div dir="ltr"><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">Hi,</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
I have been using XML::Compile::SOAP to interface with several webservices using XOP and have been able to upload with no issues. </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
But now I am having some problems extracting the returned XOP document(s). </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
Could anyone please point me to an example of extracting MTOM attachments using XML::Compile::SOAP?</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
I&#39;ve been successful in doing it by using trace with a different webservice but I am using a new webservice and my method is not working. </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">The actual script is too long to include and requires authorization – so I am only including how I am making the call here:</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">use XML::Compile::WSDL11;      # use WSDL version 1.1</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">use XML::Compile::SOAP11;      # use SOAP version 1.1</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">use XML::Compile::SOAP12;      # use SOAP version 1.2</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">use XML::Compile::Transport::SOAPHTTP;</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">use XML::Compile::XOP;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
my $xml_compile  = XML::Compile::WSDL11-&gt;new($primary_wsdl, schema_dirs =&gt; \@schema_dirs)</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                  || die &quot;[Error] UNABLE TO CREATE XML::Compile::WSDL11 OBJECT&quot;;</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my $ua  = LWP::UserAgent-&gt;new();</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">$ua-&gt;ssl_opts(verify_hostname =&gt; 0, keep_alive =&gt; 1);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">$ua-&gt;cookie_jar( {file =&gt; $jar_file, autosave =&gt; 1, ignore_discard =&gt; 1 });</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my $trans = XML::Compile::Transport::SOAPHTTP-&gt;new(user_agent =&gt; $ua, soap =&gt; &#39;SOAP11&#39;);</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my $call = $xml_compile-&gt;compileClient($operation_name, port =&gt; $service_port, trans =&gt; $trans);</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my %get_request_params   = (%data);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
my $request_params             = get_request_params(%get_request_params);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
my @request_params            = (parameters =&gt; $request_params);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my ($answer, $trace)              = $call-&gt;(@request_params);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">Which results in a successful call:</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
ANSWER: $VAR1 = {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">          &#39;parameters&#39; =&gt; {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                          &#39;Result&#39; =&gt; {</p>
<p class="MsoNormal" style="margin-left:0.5in;font-family:arial,sans-serif;font-size:13px;text-indent:0.5in">                  &#39;SignedDocument&#39; =&gt; {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
                                                      &#39;InitialContentEncoding&#39; =&gt; &#39;MIME&#39;,</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                                      &#39;DocumentFormat&#39; =&gt; &#39;OTHER&#39;,</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                                      &#39;Data&#39; =&gt; bless( do{\(my $o = 63420456)}, &#39;XML::LibXML::Element&#39; ),</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
                                                      &#39;ImplicitSignatureInfo&#39; =&gt; {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                                              &#39;SignatureFormat&#39; =&gt; &#39;PKCS7&#39;,</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                                              &#39;AuditCategory&#39; =&gt; &#39;CADESA&#39;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
                                                      }</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                                                 }</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
                                            }      </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">                               },</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
                    &#39;{<a href="http://www.trustweaver.com/trustarchive%7DRequestId" target="_blank">http://www.trustweaver.com/trustarchive}RequestId</a>&#39; =&gt; bless( do{\(my $o = 63419928)}, &#39;XML::LibXML::Element&#39; )</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">          };</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
And how I have been extracting MTOM objects in another webservice:</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
# get all of the MTOM data objects and index by the content id from the header</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my @received_files;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my $req = $trace-&gt;request;   # HTTP message which was sent</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my $res = $trace-&gt;response;  # HTTP message received</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">my @parts = $res-&gt;parts;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">foreach (@parts) {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
     my $part = $_;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">      my $headers  = $part-&gt;headers;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">       if ($headers-&gt;header(&#39;Content-Type&#39;)              eq &#39;application/octet-stream&#39; &amp;&amp;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
           $headers-&gt;header(&#39;Content-Transfer-Encoding&#39;) eq &#39;binary&#39; ) {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
            my %file;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">           </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            my $cid = $headers-&gt;header(&#39;Content-ID&#39;);</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            $cid  =~ s/^&lt;//;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            $cid  =~ s/&gt;$//;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
           </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            my $xop  = XML::Compile::XOP::Include-&gt;new(bytes =&gt; $part-&gt;content, cid =&gt; $cid);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            $file{cid}  = $cid;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            $file{xop}          = $xop;</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">            $file{filename}     = $filename;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">           </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
            push(@received_files, \%file);</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">        }</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
       </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">}</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
foreach (@received_files) {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    my $file            = $_;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    my $cid             = $file-&gt;{cid};</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    my $xop             = $file-&gt;{xop};</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">   </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    my $filename        = $file-&gt;{filename};</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
   </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    my $target_filepath = &quot;$target_directory/$filename&quot;;</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
   </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    if ($xop-&gt;write($target_filepath)) {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">   </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
        print &quot;WROTE FILE [$filename] TO [$target_filepath]\n&quot;;<br></p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">   </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
    } else {</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">        print &quot;[Error] UNABLE TO WRITE FILE [$filename] TO [$target_filepath]\n&quot;;<br>
</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">    }</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">}</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
And I am also getting the XOP lose message:</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">  warning: loosing received XOPs</p>
<p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">But I cannot seem to get the extraction done correctly.</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">Any help or pointers is greatly appreciated.</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
Thank you!</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px"> </p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">Christopher Taranto</p><p class="MsoNormal" style="font-family:arial,sans-serif;font-size:13px">
 </p></div>