dcm4chee源码解析

Dcm4chee源码解析:

读懂Dcm4chee的源码是建立在对DICOM标准、WADO通讯以及JBOSS Mbean仓库反射了解的基础上。

开始解读代码:

从WADOServlet的doGet开始解读

WADOResponseObject respObject = delegate.getWADOObject((WADORequestObject)reqObject );

这段代码利用托管对象delegate将WADO请求对象变成WADO响应对象,然后

sendWADOFile( response, respObject ); 第一个参数为HttpServletResponse 对象,第二个参数为WADO响应对象,也可以理解为一个DICOM对象,这样就将DICOM对象发往浏览器。

WADOResponseObject类(没有继承和实现),在它的getWADOObject函数中有这样一段代码

Objecto = server.invoke(wadoServiceName,

                   "getWADOObject",

                   new Object[] { reqVO },

                   new String[] { WADORequestObject.class.getName() } );

这段代码就是MBean的动态创建,了解动态创建后,这段代码实现上是执行了一个WADOService(注解1:This class use WADOSupport for the WADOmethods and WADOCache for caching jpg images.

)的getWADOObject方法,在该方法内写着WADOResponseObject resp = support.getWADOObject(reqVO);这样一段代码,supportWADOSupport对象,这个对象见上面的注解1。接着执行WADOSupport类里面的getWADOObject方法,在这里面写了

objectDs = cmd.getDataset();

req.setObjectInfo(objectDs);

file =this.getDICOMFile(req.getStudyUID(),req.getSeriesUID(),

req.getObjectUID());

resp =handleTextTransform(req, file, contentTypeDicomXML,

                    getDicomXslURL(), dict);

resp为一个WADOResponseObject对象。

 

getDICOMFile方法解析:

在里面有这样一段代码:

dicomObject= server.invoke(queryRetrieveScpName, "locateInstance",

                    new Object[] { instanceUID,  studyUID},

                    new String[] { String.class.getName(),

                    String.class.getName() });

又是动态,代码会执行QueryRetrieveScpServicelocateInstance方法,返回一个AEDTO对象,接着fetchFromExternalRetrieveAET(ae, studyUID, seriesUID, instanceUID),返回一个File对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值