我們正設(shè)計(jì)一套針對電信供應(yīng)商的新系統(tǒng),并且鎖定Oracle服務(wù)總線(OSB)作為企業(yè)服務(wù)總線。對我來說這款工具的最好的加分項(xiàng)就是強(qiáng)大的工具支持。Oracle已經(jīng)將其所有企業(yè)集成軟件棧集成為一個(gè)整體,將其捆綁為Oracle SOA套件。本文將把重點(diǎn)放在Oracle SOA套件11g的一部分,Oracle OSB 11g上。Oracle SOA Suite 12c有很大的變化。然而ORacle 12C套件中我喜歡的新功能是開發(fā)人員可以在一個(gè)IDE(集成開發(fā)環(huán)境)里,用JDeveloper開發(fā)BPEL(業(yè)務(wù)流程執(zhí)行語言)以及開發(fā)OSB代碼。
關(guān)于 OSB 需要注意的幾點(diǎn)如下:
代理服務(wù):?正如其名字所表明的,代理服務(wù)是為外部客戶提供的服務(wù),扮演了內(nèi)部服務(wù)外觀的角色。通過代理服務(wù),你可以更好地控制內(nèi)部服務(wù)中的變化,因?yàn)槿绻愕膬?nèi)部服務(wù)發(fā)生變化,代理服務(wù)可以執(zhí)行需要的轉(zhuǎn)換。業(yè)務(wù)服務(wù):?在 OSB中, 業(yè)務(wù)服務(wù)表示內(nèi)部應(yīng)用服務(wù)。它可以是 WebService, JMS 隊(duì)列/主題, REST 服務(wù), FTP 服務(wù)以及其他服務(wù). 業(yè)務(wù)服務(wù)將會(huì)包含調(diào)用實(shí)際服務(wù)的功能。所以本文中關(guān)注的場景如下:
我們有一個(gè)內(nèi)部的服務(wù),回報(bào)用戶信息,如果用戶通過在MSISDN或SIM卡號(hào)碼,根據(jù)輸入,數(shù)據(jù)將被取回來。通過使用代理服務(wù),這項(xiàng)服務(wù)必須以更有意義的方式開放給外部方。演示項(xiàng)目可以在這里下載。
首先創(chuàng)建企業(yè)服務(wù),作為內(nèi)部服務(wù)的表面。?在OSB項(xiàng)目中,創(chuàng)建四個(gè)文件夾:
代理業(yè)務(wù)轉(zhuǎn)換WSDL然后需要復(fù)制本例中的 內(nèi)部服務(wù)WSDL和代理服務(wù) WSDL文件到 “WSDL” 文件夾。
配置企業(yè)服務(wù)
右擊 “business” 文件夾,并選擇?New->Business服務(wù)。當(dāng)企業(yè)服務(wù)創(chuàng)建好,“General” 選項(xiàng)卡彈出。在此,我們需要做如下操作:
選擇 “WSDL Web Service” ,然后點(diǎn)擊瀏覽器。 然后選擇“Browse,” 選擇?the WSDL file,然后有兩個(gè)選項(xiàng)。選擇the one ending with “(port)這就是我們配置業(yè)務(wù)服務(wù)所需要做的所有操作。然后進(jìn)入我們的代理服務(wù),這是所有的動(dòng)作發(fā)生的地方。
配置代理服務(wù)右鍵點(diǎn)擊創(chuàng)建的 “proxy” 目錄, 選擇 New->Proxy Service 并提供一個(gè)有效的名稱.在 “General” 標(biāo)簽頁, 選擇 “WSDL Web Service” 并點(diǎn)擊瀏覽.現(xiàn)在代理服務(wù)中,你需要選擇我們創(chuàng)建的代理 WSDL 文件,該文件會(huì)提供給外部客戶端。
結(jié)果如下:
(:: pragma bea:global-element-parameter parameter="$fetchSubscriber1" element="ns2:FetchSubscriber" location="../wsdl/SubscriberProxyService.wsdl" ::)(:: pragma bea:local-element-return type="ns1:InstalledBaseSubscriberClassificationQuery/ns0:InstalledBaseSubscriberClassificationQuery" location="../wsdl/subscriber_classfication.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";declare namespace ns1 = "http://www.openuri.org/";declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberrequest/";declare function xf:subscriberrequest($fetchSubscriber1 as element(ns2:FetchSubscriber)) as element() { <ns1:InstalledBaseSubscriberClassificationQuery> <ns0:InstalledBaseSubscriberClassificationQuery> <ns0:Request> { if (data($fetchSubscriber1/EquipmentType) = "MSISDN") then <ns0:MSISDN> { (data($fetchSubscriber1/EquipmentValue))}</ns0:MSISDN> else <ns0:SIMCard> { data($fetchSubscriber1/EquipmentValue)}</ns0:SIMCard> } </ns0:Request> </ns0:InstalledBaseSubscriberClassificationQuery> </ns1:InstalledBaseSubscriberClassificationQuery>};declare variable $fetchSubscriber1 as element(ns2:FetchSubscriber) external;xf:subscriberrequest($fetchSubscriber1)
在這里正如你所看到的,我們檢測設(shè)備類型是否等 “MSISDN” ,然后在業(yè)務(wù)服務(wù)中設(shè)置相應(yīng)的元素。
所用的響應(yīng)轉(zhuǎn)換文件如下:(:: pragma bea:global-element-parameter parameter="$installedBaseSubscriberClassificationQueryResponse1" element="ns1:InstalledBaseSubscriberClassificationQueryResponse" location="../wsdl/subscriber_classfication.wsdl" ::)(:: pragma bea:global-element-return element="ns2:FetchSubscriberResponse" location="../wsdl/SubscriberProxyService.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";declare namespace ns1 = "http://www.openuri.org/";declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberresponse/";declare function xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse)) as element(ns2:FetchSubscriberResponse) { <ns2:FetchSubscriberResponse> <TradeCustomerCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@ServiceProviderCode) }</TradeCustomerCode> <PackageCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/ns0:Package/@ProductCode) }</PackageCode> <PaymentOption>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@PaymentOption) }</PaymentOption> </ns2:FetchSubscriberResponse>};declare variable $installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse) external;xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1)
這是一個(gè)簡單的轉(zhuǎn)換,在其中我們將響應(yīng)元素映射到所需的代理響應(yīng)元素。
現(xiàn)在我們回到代理服務(wù),點(diǎn)擊? “Replace” 動(dòng)作,進(jìn)入 “Properties” 標(biāo)簽頁.
在 “In Variable”? 中插入值 “body”.點(diǎn)擊 “Expression” 鏈接. 進(jìn)入 “XQuery Resources” 標(biāo)簽頁, 點(diǎn)擊 “Browse” 并選擇請求轉(zhuǎn)換文件.在右側(cè)的 “Variable Structures” 組件中,展開 “body” 元素,然后選擇請求元素并將其拖拽到 “Binding” 文本框中,如下所示:text box as follows:就是這樣,現(xiàn)在我們就可以測試該功能。 在你動(dòng)手之前,請記住首先啟動(dòng)在SOAP UI上創(chuàng)建的模擬服務(wù)。
現(xiàn)在,我們登錄服務(wù)總線控制臺(tái),轉(zhuǎn)到代理服務(wù)并啟動(dòng)測試控制臺(tái)。? 下面是過運(yùn)行示例得到的結(jié)果:
你以在“ Invocation Trace”部分中的同一個(gè)屏幕上進(jìn)一步了解發(fā)生的詳細(xì)過程。 OSB進(jìn)行的請求和響應(yīng)轉(zhuǎn)換可以在下面的圖片中看到:
到這里我們將結(jié)束對Oracle Service Bus的介紹。 如果你有任何疑問,請隨時(shí)留言,我將盡快回復(fù)。 另外,如果有任何改善的地方,請留下你的反饋,我們將一如既往的非常感謝。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長
- 長江存儲(chǔ)發(fā)布聲明:從無“借殼上市”意愿
- 泛微·數(shù)智大腦Xiaoe.AI正式發(fā)布,千人現(xiàn)場體驗(yàn)數(shù)智化運(yùn)營場景
- IDC:2024年第三季度北美IT分銷商收入增長至202億美元
- AI成為雙刃劍!凱捷調(diào)查:97%組織遭遇過GenAI漏洞攻擊
- openEuler開源五年樹立新里程碑,累計(jì)裝機(jī)量突破1000萬
- 創(chuàng)想 華彩新程!2024柯尼卡美能達(dá)媒體溝通會(huì)煥新增長之道
- 操作系統(tǒng)大會(huì)2024即將在京召開,見證openEuler發(fā)展新里程
- Gartner:AI引領(lǐng)歐洲IT支出激增,2025年將支出1.28萬億美元
- IDC:中國數(shù)字化轉(zhuǎn)型支出五年復(fù)合增長率約為15.6% 高于全球整體增速
- 2028年中國數(shù)字化轉(zhuǎn)型總體市場規(guī)模將超7300億美元
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。