我们正设计一套针对电信供应商的新系统,并且锁定Oracle服务总线(OSB)作为企业服务总线。对我来说这款工具的最好的加分项就是强大的工具支持。Oracle已经将其所有企业集成软件栈集成为一个整体,将其捆绑为Oracle SOA套件。本文将把重点放在Oracle SOA套件11g的一部分,Oracle OSB 11g上。Oracle SOA Suite 12c有很大的变化。然而ORacle 12C套件中我喜欢的新功能是开发人员可以在一个IDE(集成开发环境)里,用JDeveloper开发BPEL(业务流程执行语言)以及开发OSB代码。
关于 OSB 需要注意的几点如下:
所以本文中关注的场景如下:
演示项目可以在这里下载。
首先创建企业服务,作为内部服务的表面。 在OSB项目中,创建四个文件夹:
然后需要复制本例中的 内部服务WSDL和代理服务 WSDL文件到 “WSDL” 文件夹。
右击 “business” 文件夹,并选择 New->Business服务。当企业服务创建好,“General” 选项卡弹出。在此,我们需要做如下操作:
这就是我们配置业务服务所需要做的所有操作。然后进入我们的代理服务,这是所有的动作发生的地方。
结果如下:
- (:: 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 training 1/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 training 1/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” 标签页.
就是这样,现在我们就可以测试该功能。 在你动手之前,请记住首先启动在SOAP UI上创建的模拟服务。
现在,我们登录服务总线控制台,转到代理服务并启动测试控制台。 下面是过运行示例得到的结果:
你以在“ Invocation Trace”部分中的同一个屏幕上进一步了解发生的详细过程。 OSB进行的请求和响应转换可以在下面的图片中看到:
到这里我们将结束对Oracle Service Bus的介绍。 如果你有任何疑问,请随时留言,我将尽快回复。 另外,如果有任何改善的地方,请留下你的反馈,我们将一如既往的非常感谢。
End.
来源: http://www.36dsj.com/archives/99638