我们正设计一套针对电信供应商的新系统,并且锁定Oracle服务总线(OSB)作为企业服务总线。对我来说这款工具的最好的加分项就是强大的工具支持。Oracle已经将其所有企业集成软件栈集成为一个整体,将其捆绑为Oracle SOA套件。本文将把重点放在Oracle SOA套件11g的一部分,Oracle OSB 11g上。Oracle SOA Suite 12c有很大的变化。然而ORacle 12C套件中我喜欢的新功能是开发人员可以在一个IDE(集成开发环境)里,用JDeveloper开发BPEL(业务流程执行语言)以及开发OSB代码。
关于 OSB 需要注意的几点如下:
代理服务: 正如其名字所表明的,代理服务是为外部客户提供的服务,扮演了内部服务外观的角色。通过代理服务,你可以更好地控制内部服务中的变化,因为如果你的内部服务发生变化,代理服务可以执行需要的转换。业务服务: 在 OSB中, 业务服务表示内部应用服务。它可以是 WebService, JMS 队列/主题, REST 服务, FTP 服务以及其他服务. 业务服务将会包含调用实际服务的功能。所以本文中关注的场景如下:
我们有一个内部的服务,回报用户信息,如果用户通过在MSISDN或SIM卡号码,根据输入,数据将被取回来。通过使用代理服务,这项服务必须以更有意义的方式开放给外部方。演示项目可以在这里下载。
首先创建企业服务,作为内部服务的表面。 在OSB项目中,创建四个文件夹:
代理业务转换WSDL然后需要复制本例中的 内部服务WSDL和代理服务 WSDL文件到 “WSDL” 文件夹。
配置企业服务
右击 “business” 文件夹,并选择 New->Business服务。当企业服务创建好,“General” 选项卡弹出。在此,我们需要做如下操作:
选择 “WSDL Web Service” ,然后点击浏览器。 然后选择“Browse,” 选择 the WSDL file,然后有两个选项。选择the one ending with “(port)这就是我们配置业务服务所需要做的所有操作。然后进入我们的代理服务,这是所有的动作发生的地方。
配置代理服务右键点击创建的 “proxy” 目录, 选择 New->Proxy Service 并提供一个有效的名称.在 “General” 标签页, 选择 “WSDL Web Service” 并点击浏览.现在代理服务中,你需要选择我们创建的代理 WSDL 文件,该文件会提供给外部客户端。
结果如下:
(:: 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)
在这里正如你所看到的,我们检测设备类型是否等 “MSISDN” ,然后在业务服务中设置相应的元素。
所用的响应转换文件如下:(:: 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)
这是一个简单的转换,在其中我们将响应元素映射到所需的代理响应元素。
现在我们回到代理服务,点击 “Replace” 动作,进入 “Properties” 标签页.
在 “In Variable” 中插入值 “body”.点击 “Expression” 链接. 进入 “XQuery Resources” 标签页, 点击 “Browse” 并选择请求转换文件.在右侧的 “Variable Structures” 组件中,展开 “body” 元素,然后选择请求元素并将其拖拽到 “Binding” 文本框中,如下所示:text box as follows:就是这样,现在我们就可以测试该功能。 在你动手之前,请记住首先启动在SOAP UI上创建的模拟服务。
现在,我们登录服务总线控制台,转到代理服务并启动测试控制台。 下面是过运行示例得到的结果:
你以在“ Invocation Trace”部分中的同一个屏幕上进一步了解发生的详细过程。 OSB进行的请求和响应转换可以在下面的图片中看到:
到这里我们将结束对Oracle Service Bus的介绍。 如果你有任何疑问,请随时留言,我将尽快回复。 另外,如果有任何改善的地方,请留下你的反馈,我们将一如既往的非常感谢。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。