Tuesday, September 16, 2014

Convert SOAP ke REST & REST ke SOAP Menggunakan OSB Part 2

Lanjutan dari part 1...

  1. Sebelum melanjutkan proses, kita akan terlebih dahulu membuat XSLT script yang akan digunakan nanti pada proses transforming di dalam OSB. Buat XSLT dan beri nama xslt_1 & xslt_2 & xslt_add_namespace. Berikut code untuk xslt_1 :

    <xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
    <xsl:copy>
    <xsl:output indent="yes" /> <xsl:template match="@* | node()">
    <xsl:template match="soapenv:*">
    <xsl:apply-templates select="@* | node()" /> </xsl:copy> </xsl:template>
    </xsl:stylesheet>
    <xsl:apply-templates select="@* | node()" />
    </xsl:template>

    Berikut code untuk xslt_2 :

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="*"> <xsl:element name="{local-name()}">
    </xsl:template>
    <xsl:apply-templates select="@* | node()" /> </xsl:element> <xsl:template match="@*">
    </xsl:template>
    <xsl:attribute name="{local-name()}"> <xsl:value-of select="." /> </xsl:attribute>
    </xsl:stylesheet>
    <xsl:template match="text() | comment() | processing-instruction()"> <xsl:copy />
    </xsl:template>

    Berikut code untuk xslt_add_namespace :

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*"> <xsl:copy>
    </xsl:template>
    <xsl:apply-templates select="node()|@*" /> </xsl:copy> <xsl:template match="*">
    <xsl:apply-templates select="node()|@*" />
    <xsl:element name="inq:{local-name()}" namespace="www.nostratech.com/xsd/inquiry"> </xsl:element> </xsl:template>
    </xsl:stylesheet>

    Sedikit penjelasan, untuk melakukan convert dari SOAP ke REST kita harus terlebih dahulu membuang soap envelope & namespace yang ada dalam body SOAP menggunakan xslt_1 & xslt_2 sehingga hanya tersisa xml body yang diperlukan sebagai payload input untuk REST xml kita. Sedangkan untuk proses convert dari REST ke SOAP, kita memerlukan xslt_add_namespace untuk menambahkan namespace sebelum di passing kembali ke SOAP body.

  2. Langkah selanjutnya kita akan melakukan Routing & Transform pada Proxy Service yang telah kita buat. Klik Edit Message Flow, kemudian tambahkan pipeline air.


    Tambahkan Stage dimasing masing Request & Response Pipeline.


  3. Langkah selanjutnya ialah mengedit Stage yang ada dibagian Request terlebih dahulu. Klik edit stage. Tambahkan Assign sebanyak 2 buah.




  4. Jika sudah, pada Assign pertama, klik Expression, kemudian pilih XSLT Resource, pilih xslt_1 yang telah kita buat tadi. Pada bagian Input Document isi dengan :

     $body/inq:accountInquiryRequest  
    

    Kemudian klik Save. Setelah itu isi input variable nya dengan var1. Tujuan nya adalah menyimpan proses hasil xslt_1 yang diambil dari $body/inq:accountInquiryRequest ke var1.


  5. Pada Assign kedua, klik Expression, kemudian pilih XSLT Resource, pilih xslt_2 yang telah kita buat tadi. Pada bagian Input Document isi dengan :

     $var1  
    

    Kemudian klik Save. Setelah itu isi input variable dengan var2.


  6. Tambahkan Action dengan Service Callout.

    Klik Service, kemudian pilih Business Service yang telah kita buat tadi. Jika sudah maka tampilan nya akan seperti berikut :
    Pada bagian Request Document Variable isi dengan var2, dan pada bagian Response Document Variable isi dengan var3. Jika sudah Klik Save.


  7. Langkah selanjutnya ialah mengedit Stage yang ada dibagian Response. Klik Edit Stage. Tambahkan Assign sebanyak 2 buah.


  8. Pada Assign pertama, Klik Expression, kemudian pilih XSLT Resource, pilih xslt_1 yang telah kita buat tadi. Pada bagian Input Document isi dengan :

     $var3  
    

    Kemudian klik Save.

    Setelah itu isi input variablenya dengan var4.
  9. Pada Assign kedua, Klik Expression, kemudian pilih XSLT Resource, pilih xslt_add_namespace yang telah kita buat tadi. Pada bagian Input Document isi dengan :

     $var4  
    

    Kemudian klik Save.

    Setelah itu isi input variable nya dengan var5.
  10. Tambahkan Action Replace. Kemudian pada bagian XPath isi dengan :

     .  
    

    Kemudian Save.
    Pada bagian in Variable di isi dengan :

     body  
    

    Pada bagian with, di isi dengan :

     $var5  
    

    Kemudian pilih Replace Node Content.
    Jika sudah klik Save.

    Commit Session, kemudian bisa kita test.
  11. Ketika Test, bisa memakai contoh payload sebagai berikut :

     <inq:accountInquiryRequest xmlns:inq="http://www.nostratech.com/xsd/inquiry">  
       <inq:bankCode>123</inq:bankCode>  
       <inq:accountNo>1234567890</inq:accountNo>  
       <inq:accountCurrency>IDR</inq:accountCurrency>  
       <inq:messageId>1234567890</inq:messageId>  
       <inq:rqDatetime>2008-09-29T08:49:45</inq:rqDatetime>  
     </inq:accountInquiryRequest>  
    

    Kira kira hasilnya akan sepertinya ini.

     <soapenv:Envelope      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  
          <soap:Header      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
          </soap:Header>  
          <soapenv:Body>  
               <inq:accountInquiryRequest      xmlns:inq="www.nostratech.com/xsd/inquiry">  
                    <inq:bankCode>123</inq:bankCode>  
                    <inq:accountNo>1234567890</inq:accountNo>  
                    <inq:accountCurrency>IDR</inq:accountCurrency>  
                    <inq:messageId>1234567890</inq:messageId>  
                    <inq:rqDatetime>2008-09-29T08:49:45</inq:rqDatetime>  
               </inq:accountInquiryRequest>  
          </soapenv:Body>  
     </soapenv:Envelope>  
    

     
    Demikianlah cara untuk menconvert dari SOAP service ke REST & Menggembalikan REST ke SOAP. Semoga bermanfaat !!

No comments:

Post a Comment