欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > DCM4CHEE ARCHIVE LIGHT 源代码解析(2)-STOWRS

DCM4CHEE ARCHIVE LIGHT 源代码解析(2)-STOWRS

2025/6/18 12:21:45 来源:https://blog.csdn.net/cfrzs/article/details/148687645  浏览:    关键词:DCM4CHEE ARCHIVE LIGHT 源代码解析(2)-STOWRS

系列文章目录

  • DCM4CHEE ARCHIVE LIGHT 源代码解析(1)-前言
  • DCM4CHEE ARCHIVE LIGHT 源代码解析(2)-STOWRS

文章目录

  • 系列文章目录
  • 概述
  • 一、背景资料
    • 1、RESTful服务
    • 2、传输存储规范
    • 3、服务连接策略
    • 4、响应消息状态
  • 二、业务分析
    • 1、对象关系
    • 2、项目结构
    • 3、业务流程
  • 三、代码解析
    • 1、writeToStorage() 方法
    • 2、storeMetadata() 方法
    • 3、updateDB() 方法
    • 4、postUpdateDB() 方法
  • 写在结尾


概述

  本文尝试通过跟踪调试,阅读dcm4chee-arc-stow项目的主要业务代码。

一、背景资料

  项目 dcm4chee-arc-stow 提供通过 HTTP POST 请求接收包含 Bulkdata 的 DICOM 对象或元数据的 RESTful 服务接口。

  • Web 服务端点URL:http[s]://<host>:<port>/dcm4chee-arc/aets/{AETitle}/rs
  • 注:用配置的AETitle替换URL中的{AETitle}

1、RESTful服务

  通过RESTful服务在Web上存储(STore Over The Web By RESTful Services)

方法服务路径附加URL服务名
POST/dcm4chee-arc/aets/{aet}/rs/studies存储DICOM对象实例(Store Instances)
POST/dcm4chee-arc/aets/{aet}/rs/studies/{study}将DICOM对象实例存储到Study中(Store Instances to a Study)

2、传输存储规范

类别限制
支持的媒体类型(Accept header)仅限于application/dicom 或者 application/dicom+xml
支持的传输语法(Media Type parameter)请参阅 – 《图像存储SOP类的传输语法》,《视频存储SOP类的传输语法》,《SR存储SOP类的传输语法》和《其它存储SOP类的传输语法》
SOP类别限制请参阅 – 《存储应用程序实体(SCP)的SOP类别》

  SOP:服务对象对(Service Object Pair)。

3、服务连接策略

  同时HTTP请求的最大数量是可配置的。默认情况下它是无限的。

4、响应消息状态

  DCM4CHEE-STOW-SERVICE响应消息头包含指示成功、警告或失败的状态代码,如下面的“HTTP标准响应代码”所示。不使用其他状态代码。

服务状态HTTP 状态码STOW-RS 描述
失败400 – Bad RequestSTOW-RS服务由于语法错误而无法存储任何实例。
401 – UnauthorizedSTOW-RS服务拒绝创建或附加任何实例,因为客户端未经过身份验证。
403 – ForbiddenSTOW-RS服务理解该请求,但拒绝满足该请求(例如,权限不足的经过身份验证的用户)。
409 – ConflictSTOW-RS服务请求格式正确,但由于请求中存在冲突(例如,不支持的SOP类或研究实例UID不匹配),服务无法存储任何实例。这也可用于指示STOW-RS服务由于多种原因无法存储任何实例。有关实例错误的其他信息可以在XML响应消息正文中找到。
503 – BusySTOW-RS服务无法存储任何实例,因为资源不足。
警告202 – AcceptedSTOW-RS服务存储了一些实例,但其他实例存在警告或故障。有关此错误的其他信息可以在XML响应消息正文中找到。
成功200 – OKSTOW-RS服务已成功存储所有实例。

二、业务分析

1、对象关系

  下面是项目相关对象的主要类关系图:

在这里插入图片描述

2、项目结构

  dcm4chee-arc-stow 项目实际只提供了 /studies/studies/{study} 两个接口,分别用来实现Dicom对象实例和将Dicom对象实例存储到 Study 中。
  项目中通过 StowRS 类来实现和公开相应的接口,如下图:

在这里插入图片描述
  可以看到StowRS 类的 Action 方法中,大部分是成对出现的,也就是每一个成对出现的方法都同时实现了两个接口,如下:

@POST
@Path("/studies")
@Consumes("multipart/related;type=application/dicom")
@Produces("application/dicom+json")
public void storeInstancesJSON(@Suspended AsyncResponse ar, InputStream in) throws Exception {store(ar, in, Input.DICOM, OutputType.JSON);
}@POST
@Path("/studies/{StudyInstanceUID}")
@Consumes("multipart/related;type=application/dicom")
@Produces("application/dicom+json")
public void storeInstancesJSON(@PathParam("StudyInstanceUID") String studyInstanceUID,@Suspended AsyncResponse ar,InputStream in) throws Exception {acceptedStudyInstanceUID = studyInstanceUID;store(ar, in, Input.DICOM, OutputType.JSON);
}

3、业务流程

  下图展示了存储Dicom对象的简单流程:

在这里插入图片描述
  流程图显示项目的主要功能模块:

  1. StowRS:服务入口(Controller),负责公开服务接口(Action);
  2. StoreService:主要的业务调度模块,负责保存Dicom对象流数据到指定的文件系统或者云存储和保存Dicom Tag信息到指定的数据库;
  3. StoreServiceEJB:数据访问层,负责对数据实体的读写;

三、代码解析

  在 StowRS 类找到 storeInstancesJSON 方法:

@POST
@Path("/studies")
@Consumes("multipart/related;type=application/dicom")
@Produces("application/dicom+json")
public void storeInstancesJSON(

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com