soapuploadbase64taleo

Soap: Upload binary data


I'm making a Drupal/PHP Module to upload information to Taleo (Talent Management) database using SOAP. This works well with regular data like text and dates, but not with a file.

The manual shows an example of a file attachment:

createAttachment Test Case:
<soapenv:Header/>
<soapenv:Body>
<urn:createAttachment>
<in0>webapi-5616904436472928038</in0>
<in1>15</in1>
<in2>test1.docx</in2>
<in3>test1.docx</in3>
<in4>application/vnd.openxmlformatsofficedocument.
wordprocessingml.document</in4>
<in5>
<!--type: base64Binary-->
<array>JVBERi0xLjQNJeLjz9MNCjYgMCBvYmogPDwvTGluZWFyaX==</array>
</in5>
</urn:createAttachment>
</soapenv:Body>
</soapenv:Envelope>

So I made a PHP file like this:

    // Send attachment
    $fileName = drupal_get_path('module', 'taleo') . '/test.txt';
    $rawFile = fread(fopen($fileName, "r"), filesize($fileName));
    $B64File = base64_encode($rawFile);

    $params = array(
        'in0' => $session,
        'in1'   => $candidate_id,
        'in2'   => 'test.txt',
        'in3'   => 'test.txt',
        'in4'   => 'text/plain',
        'in5'   => $B64File
    );

    $client_taleo->__call('createAttachment', $params);

When I do "echo $B64File" I get this: RmlsZSB1cGxvYWQgd2l0aCBEcnVwYWwgIQ==, so the file is being read correct.

But I always get this error:

ERROR: soapenv:Server.generalException-attBinDataArr is null.

Any ideas?


Solution

  • You forgot to encapsulate the base64-data in array-tags.

    <array>JVBERi0xLjQNJeLjz9MNCjYgMCBvYmogPDwvTGluZWFyaX==</array>
    

    Something like this should work:

    $params = array(
        'in0' => $session,
        'in1'   => $candidate_id,
        'in2'   => 'test.txt',
        'in3'   => 'test.txt',
        'in4'   => 'text/plain',
        'in5'   => array('array' => $B64File)
    );