DataPower

DataPower

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  IBM Data Power decoding issue

    Posted 07/26/23 01:52 PM

    Hello Team, I wanted to make a data power service that receives a base64 string and then converts this string into a pdf file and sends it back as an attached File, The problem is when I used xslt  dp:decode to decode the base64 string it gives an error because it contains non-UTF-8 characters so what to do I tried to look for any javascript build function that is supported in IBM data power gateway but can't find any so what to do and what is the best scenario for this service to work and also how to use multipart with the pdf so that it could be sent as an attached file?



    ------------------------------
    Marwan Hesham
    ------------------------------


  • 2.  RE: IBM Data Power decoding issue

    Posted 07/27/23 02:31 AM
    Edited by Hermann Stamm-Wilbrandt 07/27/23 02:36 AM

    Hi, "Buffer" is the GatewayScript datatype for data up to 1GB size.
    Use ".from(str, 'base64')" to do the conversion you want:
    buffer object



    Short demo with node in Linux shell:

    $ str=`echo -n "foobar" | base64`
    $ node -e "console.log(Buffer.from('$str', 'base64'))"
    <Buffer 66 6f 6f 62 61 72>



    ------------------------------
    Hermann Stamm-Wilbrandt
    Compiler Level 3 support
    IBM DataPower Gateways (⬚ᵈᵃᵗᵃ / ⣏⠆⡮⡆⢹⠁⡮⡆⡯⠂⢎⠆⡧⡇⣟⡃⡿⡃)
    https://stamm-wilbrandt.de/en/blog/
    ------------------------------



  • 3.  RE: IBM Data Power decoding issue

    Posted 07/27/23 03:53 AM
    Edited by Marwan Hesham 07/27/23 04:08 AM

    Thanks a lot, I have tried it but I have another question how can I create a pdf and then attached it to the response message, and in what format (for example utf-8, hex )do I need to create a pdf cause I have tried this code but the pdf isn't correct

    let crlf = '\r\n';
    // your boundry is a string starts with _Part and then some numbers
    let multipartMessageStartPart = '------=your boundry' + crlf +
            'Content-Type: application/json; charset=UTF-8' + crlf +
            'Content-Transfer-Encoding: 8bit' + crlf + crlf +

            '{\n"header": {\n"status": {\n"code": "200",\n"description": "success"\n}\n}' + crlf +
            '------=your boundry' + crlf +
            'Content-Type: application/pdf; name=text.pdf' + crlf +
            'Content-Transfer-Encoding: binary' + crlf +
            'Content-ID: <text.pdf>' + crlf +
            'Content-Disposition: attachment; name="text.pdf"; filename="text.pdf"' + crlf + crlf;
    let multipartMessageEndPart =   crlf + crlf + '------=your boundry';
    let base64 = 'base64 text value for the encoded pdf';

    let buff = Buffer.from(base64, 'base64').toString();
    session.output.write(multipartMessageStartPart + buff + multipartMessageEndPart);

    var contentType = 'multipart/related; boundary="----=your boundry"; type="application/json"';



    ------------------------------
    Marwan Hesham
    ------------------------------



  • 4.  RE: IBM Data Power decoding issue

    Posted 07/27/23 04:57 AM
    Edited by Hermann Stamm-Wilbrandt 07/27/23 05:00 AM

    > let base64 = 'base64 text value for the encoded pdf';
    >
    If you don't put in valid PDF base64 encoded, it is not surprising that it does not work.

    Try this:
    let base64 = 'JVBERi0xLjEKJcKlwrHDqwoKMSAwIG9iagogIDw8IC9UeXBlIC9DYXRhbG9nCiAgICAgL1BhZ2VzIDIgMCBSCiAgPj4KZW5kb2JqCgoyIDAgb2JqCiAgPDwgL1R5cGUgL1BhZ2VzCiAgICAgL0tpZHMgWzMgMCBSXQogICAgIC9Db3VudCAxCiAgICAgL01lZGlhQm94IFswIDAgMzAwIDE0NF0KICA+PgplbmRvYmoKCjMgMCBvYmoKICA8PCAgL1R5cGUgL1BhZ2UKICAgICAgL1BhcmVudCAyIDAgUgogICAgICAvUmVzb3VyY2VzCiAgICAgICA8PCAvRm9udAogICAgICAgICAgIDw8IC9GMQogICAgICAgICAgICAgICA8PCAvVHlwZSAvRm9udAogICAgICAgICAgICAgICAgICAvU3VidHlwZSAvVHlwZTEKICAgICAgICAgICAgICAgICAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgogICAgICAgICAgICAgICA+PgogICAgICAgICAgID4+CiAgICAgICA+PgogICAgICAvQ29udGVudHMgNCAwIFIKICA+PgplbmRvYmoKCjQgMCBvYmoKICA8PCAvTGVuZ3RoIDU1ID4+CnN0cmVhbQogIEJUCiAgICAvRjEgMTggVGYKICAgIDAgMCBUZAogICAgKEhlbGxvIFdvcmxkKSBUagogIEVUCmVuZHN0cmVhbQplbmRvYmoKCnhyZWYKMCA1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxOCAwMDAwMCBuIAowMDAwMDAwMDc3IDAwMDAwIG4gCjAwMDAwMDAxNzggMDAwMDAgbiAKMDAwMDAwMDQ1NyAwMDAwMCBuIAp0cmFpbGVyCiAgPDwgIC9Sb290IDEgMCBSCiAgICAgIC9TaXplIDUKICA+PgpzdGFydHhyZWYKNTY1CiUlRU9GCg==';

    You should see "Hello World" (from here).

    For test in browser as data link, copy into your browser address bar:

    data:application/pdf;base64,JVBERi0xLjEKJcKlwrHDqwoKMSAwIG9iagogIDw8IC9UeXBlIC9DYXRhbG9nCiAgICAgL1BhZ2VzIDIgMCBSCiAgPj4KZW5kb2JqCgoyIDAgb2JqCiAgPDwgL1R5cGUgL1BhZ2VzCiAgICAgL0tpZHMgWzMgMCBSXQogICAgIC9Db3VudCAxCiAgICAgL01lZGlhQm94IFswIDAgMzAwIDE0NF0KICA+PgplbmRvYmoKCjMgMCBvYmoKICA8PCAgL1R5cGUgL1BhZ2UKICAgICAgL1BhcmVudCAyIDAgUgogICAgICAvUmVzb3VyY2VzCiAgICAgICA8PCAvRm9udAogICAgICAgICAgIDw8IC9GMQogICAgICAgICAgICAgICA8PCAvVHlwZSAvRm9udAogICAgICAgICAgICAgICAgICAvU3VidHlwZSAvVHlwZTEKICAgICAgICAgICAgICAgICAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgogICAgICAgICAgICAgICA+PgogICAgICAgICAgID4+CiAgICAgICA+PgogICAgICAvQ29udGVudHMgNCAwIFIKICA+PgplbmRvYmoKCjQgMCBvYmoKICA8PCAvTGVuZ3RoIDU1ID4+CnN0cmVhbQogIEJUCiAgICAvRjEgMTggVGYKICAgIDAgMCBUZAogICAgKEhlbGxvIFdvcmxkKSBUagogIEVUCmVuZHN0cmVhbQplbmRvYmoKCnhyZWYKMCA1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxOCAwMDAwMCBuIAowMDAwMDAwMDc3IDAwMDAwIG4gCjAwMDAwMDAxNzggMDAwMDAgbiAKMDAwMDAwMDQ1NyAwMDAwMCBuIAp0cmFpbGVyCiAgPDwgIC9Sb290IDEgMCBSCiAgICAgIC9TaXplIDUKICA+PgpzdGFydHhyZWYKNTY1CiUlRU9GCg==

    ------------------------------
    Hermann Stamm-Wilbrandt
    Compiler Level 3 support & Fixpack team lead
    IBM DataPower Gateways (⬚ᵈᵃᵗᵃ / ⣏⠆⡮⡆⢹⠁⡮⡆⡯⠂⢎⠆⡧⡇⣟⡃⡿⡃)
    https://stamm-wilbrandt.de/en/blog/
    ------------------------------



  • 5.  RE: IBM Data Power decoding issue

    Posted 07/14/25 08:13 AM
    Edited by Kumar . 07/14/25 08:15 AM

    Hello Marwan,

    The scenario I have been given is similar to the one that you have implemented.

    I'd be grateful if you could outline the approach you took and share any supporting code or references for guidance



    ------------------------------
    Kumar
    ------------------------------