前面的blog中提到了,Openxds使用iheos实现XDS Registry和XDS Repository的服务,也就是XDS.规范中的事务。iheOS即IHE Open Source(http://sourceforge.net/projects/iheos/)项目最近更新时间是2011年11月。
在服务成功发布后,可以看到Registry和Repository分别开放的调用接口。另外,也可以在openxds的服务配置文件中找到服务对应的实现类,路径是\openxds-core\src\main\resources\axis2repository\services\iheos.aar,这个压缩包中唯一的文件是services.xml。上篇blog也贴上了部分service配置信息,这里再次奉上,用于分析。
1、存储库实现Repository
服务配置文件:
<service name="xdsrepositoryb">
<description>XDS.b Repository Interface</description>
<parameter name="ServiceClass" locked="false">gov.nist.registry.ws.serviceclasses.RepositoryB</parameter>
<operation name="ProvideAndRegisterDocumentSetRequest">
<messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver" />
<actionMapping>urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b</actionMapping>
<parameter name="enableMTOM">true</parameter>
</operation>
<operation name="RetrieveDocumentSetRequest">
<messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver" />
<actionMapping>urn:ihe:iti:2007:RetrieveDocumentSet</actionMapping>
<parameter name="enableMTOM">true</parameter>
</operation>
</service>
Repository角色提供了四个服务接口,除了上面配置文件的ProvideAndRegistryDocumentSetRequest和RetrieveDocumentSetRequest外,还包括RepositoryB类的两个public方法:runContentValidationService和getServiceName。下面对前三个重要的方法进行具体分析。
1.1 ProvideAndRegistryDocumentSetRequest
即IHE事务ITI-41,提交和注册文档请求,提交的内容有:DocumentEntry元数据、Submission Set元数据、XDS Folder数据以及文档本身。在配置文件中,与ITI-41对应的实现类是XDSRawXMLInOutMessageReceiver,下面是这个类的类图。
这个核心类只有一个方法,即validate_action,传入的参数是axis2消息,根据具体的axis2消息请求类型调用对应的处理。具体的java代码如下:
public void validate_action(MessageContext msgContext, MessageContext newmsgContext) {
String in_action = msgContext.getWSAAction();
String out_action = SoapActionFactory.getResponseAction(in_action);
if (out_action == null) {
newmsgContext.setFailureReason(new Exception("Unknown action <" + in_action + ">"));
return;
}
newmsgContext.setWSAAction(out_action);
}
ITI-41消息请求XML根结点是:ProvideAndRegisterDocumentSetRequest,其中的核心类SoapActionFactory就起到了调用对应处理类的作用。所以在下面要分析的Registry接收消息的类也是XDSRawXMLInOutMessageReceiver,这种松耦合方式值得学习。
SoapActionFactory类定义了5个final static属性以及一个map,将请求消息与响应消息名称作对应。
public final static String pnr_b_async_action = "urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b";
public final static String pnr_b_action = "urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b";
public final static String ret_b_action = "urn:ihe:iti:2007:RetrieveDocumentSet";
public final static String ret_b_async_action = "urn:ihe:iti:2007:RetrieveDocumentSet";
public final static String anon_action = "urn:anonOutInOp";
async指的是异步消息处理。这5个属性只是ITI-41和ITI-43,没有包含ITI-41,但并不是没有ITI-41,只是把它写在了map中。
private static final Map<String, String> actions =
new HashMap<String, String>()
{
{
put(pnr_b_action, "urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse");
put(pnr_b_async_action, "urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse");
put("urn:ihe:iti:2007:RegisterDocumentSet-b", "urn:ihe:iti:2007:RegisterDocumentSet-bResponse");
put(ret_b_action, "urn:ihe:iti:2007:RetrieveDocumentSetResponse");
put(ret_b_async_action, "urn:ihe:iti:2007:RetrieveDocumentSetResponse");
put(MetadataSupport.SQ_action, "urn:ihe:iti:2007:RegistryStoredQueryResponse");
//put("urn:ihe:iti:2007:RegistryStoredQueryAsync", "urn:ihe:iti:2007:RegistryStoredQueryResponse");
put("urn:ihe:iti:2007:CrossGatewayRetrieve", "urn:ihe:iti:2007:CrossGatewayRetrieveResponse");
put("urn:ihe:iti:2007:CrossGatewayQuery", "urn:ihe:iti:2007:CrossGatewayQueryResponse");
//put("urn:ihe:iti:2007:CrossGatewayQueryAsync", "urn:ihe:iti:2007:CrossGatewayQueryResponse");
put(MetadataSupport.dsub_subscribe_action, MetadataSupport.dsub_subscribe_response_action);
put(MetadataSupport.MPQ_action, "urn:ihe:iti:2009:MultiPatientStoredQueryResponse");
}
};
此处的ProvideAndRegisterDocumentSetRequesty请求对应的响应是"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-bResponse"。提供的getReponseAction方法返回的只是一个String值,即响应的uri。XDSRawXMLInOutMessageReceiver将得到的响应消息名称传递给MessageContext。 此时遇到了问题:gov.nist.registry.common2.registry.Response这个抽象类的子类只有4个,有一个还是测试类,另外三个是:AdhocQueryResponse、RegistryResponse、RetrieveMultipleResponse。这里面没有ITI-41请求的响应类,ITI-41的响应是怎么处理的呢?
<service name="xdsregistryb">
<description>XDS.b Registry Interface</description>
<parameter name="ServiceClass" locked="false">gov.nist.registry.ws.serviceclasses.RegistryB</parameter>
<operation name="SubmitObjectsRequest">
<messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver" />
<actionMapping>urn:ihe:iti:2007:RegisterDocumentSet-b</actionMapping>
</operation>
<operation name="AdhocQueryRequest">
<messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver" />
<actionMapping>urn:ihe:iti:2007:RegistryStoredQuery</actionMapping>
<actionMapping>urn:ihe:iti:2009:MultiPatientStoredQuery</actionMapping>
</operation>
</service>
这是Registry角色相关的服务接口,同样包含四个服务,除了上面看到的两个:SubmitObjectsRequest、AdhocQueryRequest,还包括RegistryB的两个public方法:getServiceName和runContentValidationService。下面对每一个服务具体分析。
1.SubmitObjectsRequest
这是
注:在研究的过程中,发现了另外一个IHE的开源实现,即HIEOS,与iheOS长的太像,以致于一度弄混,把OpenXDS搞清楚之后研究一下它。HIEOS全称是:Health Information Exchange Open Source,实现了IHE XDS.b和IHE XCA集成规范。在2010年2月之前使用的SUN公司的Kenai项目平台(http://kenai.com/projects/hieos),之后迁移到了Sourceforge(http://sourceforge.net/projects/hieos)。
分享到:
相关推荐
一个简单的基准测试工具,用于xds.b存储库。 用法 为您的平台安装node.js,然后运行。 npm install 该基准测试工具随附了一个模拟xds regository服务器。 它在http://localhost:8282/上运行,并且将在任何路径下...
开源项目-gojektech-consul-envoy-xds.zip,领事公使控制飞机
python库。 资源全名:xds-0.1.8-py3-none-any.whl
加速度计,mma845x系列芯片数据手册,加速度计,mma845x系列芯片数据手册
SEED-XDS560v2PLUS仿真器安装、使用指南(Rev.B)
数据结构的经典问题,修道士与野人过河 求解步骤 源码
XDS560V2是目前的XDS510和XDS560系列仿真器的下一代产品, 在旧产品的基础上增加了控制及采集跟踪/回溯(Trace)数据的功能。 XDS560v2 DTC 支持: z 控制IEEE1149.1 JTAG兼容TAP(Test Access Port) z 调试IEEE1149...
SEED-XDS510PLUS仿真器安装、使用指南_CCS4.x&Above(Rev.B).pdf
TI新一代DSP仿真器,支持ARM和DSP
驱动
DSP仿真器 XDS510-USB2.0驱动文件,内含XDS510 CCS Driver和XDS510 USB Driver,以及使用说明
SEED-XDS510Plus Emulator for CCS4.x
直接双击XDS100_v1_1_RTM.exe即可安装,直接“Next”到底。安装前先暂时不要将XDS100仿真器插入PC机的USB接口。 安装完成后,将XDS100接入PC机,等待自动识别完硬件后,如图1.4,从设备管理器中可以查看到增加了一些...
打包10个IHE培训资料:主要包含Gazelle、MESA、SWF、RWF、XDS.b、XDS.b-I、PIX、检查、心电、监护
DSP仿真器驱动资源包,支持ccs5.3以上版本,内附两个不同的驱动:内附Driver_For_SEED-XDS560V2PLUS_Emulator驱动Driver_For_Wintech_XDS560V2PLUS_Emulator驱动SEED-XDS560v2 Driver 00.exeSEED-XDS560v2 Driver...
ICETEK-XDS510UPLUSV1.3.rar
JTAG XDS510 Texas Instruments DSP TMS320F2808 PCB.
SEED-XDS560Plus Emulator for CCS2.20.18驱动
XDS100 Ver 2.0驱动亲测可用 解决没有XDS100 Ver 2.0驱动的问题 根据系统32位或64位运行相应的安装程序