Tuesday, September 16, 2014

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

Pada kesempatan ini saya ingin berbagi tentang cara mengconvert SOAP ke REST & REST ke SOAP menggunakan OSB. Sebagai contoh case, saya mempunyai client yang menggunakan SOAP Webservice, dan saya sendiri menggunakan RESTful Webservice. Bagaimana cara SOAP & REST saling berkomunikasi?  Dengan menggunakan OSB saya akan coba untuk mengkomunikasikan antar SOAP & REST.
  1. Pertama-tama kita buat project baru pada OSB kita, setelah diberinama, kemudian kita buat folder baru yang diberi nama XSD, didalam nya kita akan buat xml schema & WSDL yang akan dipakai oleh proxyservice yang akan kita buat nanti.
    Berikut contoh xml schema yang saya pakai, dan beri nama xml_blog.xsd

     <?xml version="1.0" encoding="ISO-8859-1" ?>  
     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
           xmlns="http://www.nostratech.com/xsd/inquiry"  
           targetNamespace="http://www.nostratech.com/xsd/inquiry"  
           elementFormDefault="qualified">  
      <xsd:element name="accountInquiryRequest">  
       <xsd:complexType>  
        <xsd:sequence>  
         <xsd:element name="bankCode" type="xsd:string"/>  
         <xsd:element name="accountNo" type="xsd:string"/>  
         <xsd:element name="accountCurrency" type="xsd:string"/>  
         <xsd:element name="messageId" type="xsd:string"/>  
         <xsd:element name="rqDatetime" type="xsd:dateTime"/>  
        </xsd:sequence>  
       </xsd:complexType>  
      </xsd:element>  
      <xsd:element name="accountInquiryResponse">  
       <xsd:complexType>  
        <xsd:sequence>  
         <xsd:element name="responseCode" type="xsd:string"/>  
         <xsd:element name="responseDesc" type="xsd:string"/>  
         <xsd:element name="accountName" type="xsd:string"/>  
         <xsd:element name="currency" type="xsd:string"/>  
         <xsd:element name="balanceSign" type="xsd:string"/>  
         <xsd:element name="balance" type="xsd:integer"/>  
         <xsd:element name="accountStatus" type="xsd:string"/>  
         <xsd:element name="productType" type="xsd:string"/>  
        </xsd:sequence>  
       </xsd:complexType>  
      </xsd:element>  
     </xsd:schema>  
    

    Berikut contoh WSDL yang saya pakai.

     <?xml version="1.0" encoding="UTF-8" ?>
    <definitions targetNamespace="urn:WSDLDocument1"
                 xmlns="http://schemas.xmlsoap.org/wsdl/"
                 xmlns:tns="urn:WSDLDocument1"
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                 xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
                 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                 xmlns:wncxi="http://www.nostratech.com/xsd/inquiry">
      <types>
        <xsd:schema targetNamespace="urn:WSDLDocument1/types"
                    elementFormDefault="qualified"/>
        <xsd:schema>
          <xsd:import schemaLocation="../../../xml_blog.xsd"
                      namespace="http://www.nostratech.com/xsd/inquiry"/>
        </xsd:schema>
      </types>
      <portType name="accountInquiry">
        <operation name="accountInquiryRequestOperation">
          <input message="tns:accountInquiry_accountInquiryRequest"/>
          <output message="tns:accountInquiry_accountInquiryResponse"/>
        </operation>
      </portType>
      <message name="accountInquiry_accountInquiryRequest">
        <part name="part" element="wncxi:accountInquiryRequest"/>
      </message>
      <message name="accountInquiry_accountInquiryResponse">
        <part name="part" element="wncxi:accountInquiryResponse"/>
      </message>
      <binding name="accountInquiryBinding" type="tns:accountInquiry">
        <soap:binding style="document"
                      transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="accountInquiryRequestOperation">
          <soap:operation style="document"
                          soapAction="urn:WSDLDocument1/accountInquiryRequestOperation"/>
          <input>
            <soap:body use="literal" parts="part"/>
          </input>
          <output>
            <soap:body use="literal" parts="part"/>
          </output>
        </operation>
      </binding>
      <service name="accountInquiry">
        <port name="accountInquiryPort" binding="tns:accountInquiryBinding">
          <soap:address location="http://www.example.com"/>
        </port>
      </service>
    </definitions>
    
  2. Setelah WSDL & xml schema dibuat, kita akan buat Businness Service dengan menggunakan endpoint REST yang sudah kita jelaskan pada awal tadi. Buat Businness Service, Service type nya menggunakan Message Service. Untuk Request & Response Type nya menggunakan xml. Kemudian masukkan endpoint REST service yang kita punya. Jika sudah bisa langsung di klik Last dan Pilih Save.



  3. Jika sudah membuat Business Service, maka selanjutnya yang dibuat adalah Proxy Service. Untuk Service Type nya menggunakan WSDL Service, kita gunakan WSDL yang telah kita buat di awal. Jika sudah kita bisa define endpoint untuk proxy service yang akan kita buat & pilih bagian get all header nya dibuat jadi yes. Jika sudah bisa langsung di klik Last dan Pilih Save.



Bersambung ke part 2...

No comments:

Post a Comment