我們正設(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ù)將會包含調(diào)用實(shí)際服務(wù)的功能。所以本文中關(guān)注的場景如下:
我們有一個(gè)內(nèi)部的服務(wù),回報(bào)用戶信息,如果用戶通過在MSISDN或SIM卡號碼,根據(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)然后到“Transport” 選項(xiàng)卡,并且將?URI改為:: http://localhost:8088/mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding. 這是因?yàn)槲覀儗⑹褂肧OAPUI 模擬服務(wù)特征來測試,?URI 代表由WSDL表示的SOAPUI的模擬服務(wù)端點(diǎn)。本例中的SOAPUI項(xiàng)目可以在此下載。這就是我們配置業(yè)務(wù)服務(wù)所需要做的所有操作。然后進(jìn)入我們的代理服務(wù),這是所有的動作發(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 文件,該文件會提供給外部客戶端。
進(jìn)入 “Message Flow” 標(biāo)簽頁. 在該標(biāo)簽頁, 首先由右側(cè)的 “Design Palette” 中拖拽一個(gè) “Route” 元素.然后,拖拽一個(gè) “Routing” 元素到 “Route” 元素中.點(diǎn)擊 “Routing” 元素, 并在底部面板中, 進(jìn)入 “Properties” 標(biāo)簽頁, 在該標(biāo)簽頁中你將提供代理服務(wù)將會訪問的業(yè)務(wù)服務(wù)與操作名稱.結(jié)果如下:
然后拖拽一個(gè) “Replace” 到 “Request Action” 組件.在 “Properties” 標(biāo)簽頁為? “Replace” 動作提供信息之前, 我們需要?jiǎng)?chuàng)建 XQuery 轉(zhuǎn)換文件, 該文件會將代理服務(wù)映射為業(yè)務(wù)服務(wù)請求,然后將業(yè)務(wù)服務(wù)響應(yīng)映射回代理服務(wù)響應(yīng).右鍵點(diǎn)擊 “transformation” 目錄并選擇 New->XQuery Transformation. 輸入有效名稱. 對請求與響應(yīng)轉(zhuǎn)換文件也需要進(jìn)行同樣的操作。所用的請求轉(zhuǎn)換文件如下:(:: 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” 動作,進(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:然后選擇 “OK” 從而會將你帶回 “Properties” 標(biāo)簽.選擇以 “Replace node contents” 單選按鈕. 結(jié)果如下所示:現(xiàn)在讓我們拖拽一個(gè) “Replace” 動作到 “Response Action” 組件.與之前相同,選擇響應(yīng)轉(zhuǎn)換“$body/ins:InstalledBaseSubscriberClassificationQueryResponse”.你會遇到一個(gè)錯(cuò)誤,表明 “ins” 命名空間沒有被識別.為解決該錯(cuò)誤,在同一個(gè) “Properties” 標(biāo)簽內(nèi), 選擇標(biāo)簽 “Namespaces” 并點(diǎn)擊添加. 輸入 “ins” 作為前綴, “http://www.openuri.org/” 作為 URI.就是這樣,現(xiàn)在我們就可以測試該功能。 在你動手之前,請記住首先啟動在SOAP UI上創(chuàng)建的模擬服務(wù)。
現(xiàn)在,我們登錄服務(wù)總線控制臺,轉(zhuǎn)到代理服務(wù)并啟動測試控制臺。? 下面是過運(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ù)助力“企宣”向上生長
- IDC:三季度全球以太網(wǎng)交換機(jī)收入同比下降7.9%、環(huán)比增長6.6%
- Fortinet李宏凱:2025年在中國大陸啟動SASE PoP節(jié)點(diǎn)部署 助力企業(yè)出海
- Fortinet李宏凱:2024年Fortinet全球客戶已超80萬
- 央國企采購管理升級,合合信息旗下啟信慧眼以科技破局難點(diǎn)
- Apache Struts重大漏洞被黑客利用,遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)加劇
- Crunchbase:2024年AI網(wǎng)絡(luò)安全行業(yè)風(fēng)險(xiǎn)投資超過26億美元
- 調(diào)查報(bào)告:AI與云重塑IT格局,77%的IT領(lǐng)導(dǎo)者視網(wǎng)絡(luò)安全為首要挑戰(zhàn)
- 長江存儲發(fā)布聲明:從無“借殼上市”意愿
- 泛微·數(shù)智大腦Xiaoe.AI正式發(fā)布,千人現(xiàn)場體驗(yàn)數(shù)智化運(yùn)營場景
- IDC:2024年第三季度北美IT分銷商收入增長至202億美元
免責(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)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。