图 3. 中介模块
中介模块包含一个名为 MedicationSPLExport 的导出,并带有一个 Web 服务绑定和一个简单的接口。该模块还有两个导入,这两个导入都具有 Web 服务绑定:
MedicationServiceImport:此导入绑定到内部服务,以检索将用于执行 XQuery 的所需药品的唯一 ID。
HL7ServiceImport:此导入绑定到 alphaWorks SPL 数据服务,用来检索药品的 XML 描述(给定了唯一 ID)。
如图 3 中的组装图所示,中介模块还包含一个名为 InvokeHL7Service 的 Java Service Component Architecture (SCA) 组件,该组件表示用于调用 HL7 数据服务的自定义中介元素中包含的代码。下文还将谈到这一点。
元素的相互连接非常简单。需要说明的唯一连接是 InvokeHL7Service 和 HL7ServiceImport 之间的连接。此连接可让自定义中介在查找中使用服务合作伙伴的符号名称来调用相应的服务。换句话说,我们不必将被调用服务的端点地址硬编码到自定义中介中。
简言之,中介流的目标是调用请求路径上的一个内部 Web 服务,并使用从该服务获得的信息作为响应路径的一部分来调用另一 Web 服务。图 4 显示了中介流组件的请求路径。
图 4. 中介流组件的请求路径
XSLTranformation1 的目标是将 MedicationSPL 接口(中介模块向其客户端公开的接口)转换为中介接口(即内部 Web 服务的接口)。在转换中使用了一个常规 XSLT 样式表。在请求路径中,使用 MedicationSPL 中提供的名称调用内部服务来获得 UUID。返回的值为 UUID。然后将 UUID(为进行演示已对其进行硬编码)插入到要在响应路径中使用的服务消息对象,以便调用 HL7 SPL 数据服务。
图 5. 中介流组件的响应路径
中介流组件的响应路径如图 5 所示。此流程的目标是使用从内部服务返回的数据形成 XQuery 并调用 HL7 服务(使用自定义代码中介元素执行此操作)。此自定义中介元素的目的是获取内部 Web 服务(存储于 SMO 中)返回的值,使用该值构建 XQuery,并将其传递到 HL7 Web 服务。清单 3 描述了自定义中介元素的实现。
清单 3. 自定义中介实现
public DataObject mediate(DataObject input1) {
System.out.println("In Response Mediation");
System.out.println("invoke service and extract response payload");
ServiceManager serviceManager = ServiceManager.INSTANCE;
BOFactory bofactory = (BOFactory) serviceManager
.locateService("com/ibm/websphere/bo/BOFactory");
System.out.println("Before Locating Service After Getting Object");
//(1) Building XPath while extracting the payload from the
// incoming SMO input1.getString("body/GetStringResponse/GetStringReturn")
String query = "XQUERY declare default element namespace "urn:hl7-org:v3";for
$doc in db2-fn:xmlcolumn(‘DB2INST1.HL7.DOCUMENT’)/PORP_IN000001
where $doc/receiver/device/id/@root=""
+ input1.getString("body/GetStringResponse/GetStringReturn")
+ "" return $doc";
//(2) Creating Elements for HL7 Service and setting it’s payload to the Built Xquery
DataObject runXquery = bofactory.createByElement(
"http://schemas.ibm.com/hl7/hl7/hl7.dadx", "runxquery");
runXquery.setString("query", query);
System.out.println("After Setting Object");
System.out.println("invoke HL7 service ");
//(3) invoking the webservice by locating the service providing the operation name
// and passing in the newly created DataObject as the input Parameters
Service myService = (Service) ServiceManager.INSTANCE
.locateService("theSoapPortTypePartner");
DataObject Hl7Response = (DataObject) myService.invoke("runxquery",
runXquery);
System.out.println("Getting returned from HL7");
DataObject Hl7ResponseOutPut = Hl7Response.getDataObject("queryresult");
// (4)Adjusting Return Values for Polocies External
DataObject message = bofactory.createByMessage(
"http://MedicationSPLModule/MedicationSPL",
"getSPLInfoResponseMsg");
DataObject myRes = bofactory.createByElement(
"http://MedicationSPLModule/MedicationSPL",
"getSPLInfoResponse");
myRes.setDataObject("SPLDocument", hl7ResponseOutPut);
System.out.println("2");
System.out.println(message);
message.setDataObject("getSPLInfoResult", myRes);
input1.setDataObject("body", message);
System.out.println("leaving Response");
return input1;
}
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
总线技术究竟该不该用?
曾几何时企业服务总线(ESB)被视为企业IT的核心。今天,不仅ESB受到了比被废弃还要糟糕的攻击,若干开发趋势似乎对更简单的消息总线也发起了质疑。
-
从ESB到微服务:如何演变?
从web开发人员的角度看,大量的微服务部署到轻量级的Karaf 容器中,这就符合了ESB的定义。
-
企业IT架构术语之Amazon Dynamo数据库
Dynamo可以用来形容一个精力充沛的人。不用如此惊讶,Amazon Dynamo数据库的创建正是要延续这一理念。